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,440 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const os = require('node:os');
4
+ const chalk = require('chalk');
5
+ const { BaseIdeSetup } = require('./_base-ide');
6
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
7
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
8
+ const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
9
+ const { getTasksFromBmad } = require('./shared/bmad-artifacts');
10
+ const { toDashPath, customAgentDashName } = require('./shared/path-utils');
11
+ const prompts = require('../../../lib/prompts');
12
+
13
+ /**
14
+ * Codex setup handler (CLI mode)
15
+ */
16
+ class CodexSetup extends BaseIdeSetup {
17
+ constructor() {
18
+ super('codex', 'Codex', true); // preferred IDE
19
+ }
20
+
21
+ /**
22
+ * Collect configuration choices before installation
23
+ * @param {Object} options - Configuration options
24
+ * @returns {Object} Collected configuration
25
+ */
26
+ async collectConfiguration(options = {}) {
27
+ let confirmed = false;
28
+ let installLocation = 'global';
29
+
30
+ while (!confirmed) {
31
+ installLocation = await prompts.select({
32
+ message: 'Where would you like to install Codex CLI prompts?',
33
+ choices: [
34
+ {
35
+ name: 'Global - Simple for single project ' + '(~/.codex/prompts, but references THIS project only)',
36
+ value: 'global',
37
+ },
38
+ {
39
+ name: `Project-specific - Recommended for real work (requires CODEX_HOME=<project-dir>${path.sep}.codex)`,
40
+ value: 'project',
41
+ },
42
+ ],
43
+ default: 'global',
44
+ });
45
+
46
+ // Display detailed instructions for the chosen option
47
+ console.log('');
48
+ if (installLocation === 'project') {
49
+ console.log(this.getProjectSpecificInstructions());
50
+ } else {
51
+ console.log(this.getGlobalInstructions());
52
+ }
53
+
54
+ // Confirm the choice
55
+ confirmed = await prompts.confirm({
56
+ message: 'Proceed with this installation option?',
57
+ default: true,
58
+ });
59
+
60
+ if (!confirmed) {
61
+ console.log(chalk.yellow("\n Let's choose a different installation option.\n"));
62
+ }
63
+ }
64
+
65
+ return { installLocation };
66
+ }
67
+
68
+ /**
69
+ * Setup Codex configuration
70
+ * @param {string} projectDir - Project directory
71
+ * @param {string} bmadDir - BMAD installation directory
72
+ * @param {Object} options - Setup options
73
+ */
74
+ async setup(projectDir, bmadDir, options = {}) {
75
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
76
+
77
+ // Always use CLI mode
78
+ const mode = 'cli';
79
+
80
+ // Get installation location from pre-collected config or default to global
81
+ const installLocation = options.preCollectedConfig?.installLocation || 'global';
82
+
83
+ const { artifacts, counts } = await this.collectClaudeArtifacts(projectDir, bmadDir, options);
84
+
85
+ const destDir = this.getCodexPromptDir(projectDir, installLocation);
86
+ await fs.ensureDir(destDir);
87
+ await this.clearOldBmadFiles(destDir);
88
+
89
+ // Collect artifacts and write using underscore format
90
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
91
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
92
+ const agentCount = await agentGen.writeDashArtifacts(destDir, agentArtifacts);
93
+
94
+ const tasks = await getTasksFromBmad(bmadDir, options.selectedModules || []);
95
+ const taskArtifacts = [];
96
+ for (const task of tasks) {
97
+ const content = await this.readAndProcessWithProject(
98
+ task.path,
99
+ {
100
+ module: task.module,
101
+ name: task.name,
102
+ },
103
+ projectDir,
104
+ );
105
+ taskArtifacts.push({
106
+ type: 'task',
107
+ module: task.module,
108
+ sourcePath: task.path,
109
+ relativePath: path.join(task.module, 'tasks', `${task.name}.md`),
110
+ content,
111
+ });
112
+ }
113
+
114
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
115
+ const { artifacts: workflowArtifacts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
116
+ const workflowCount = await workflowGenerator.writeDashArtifacts(destDir, workflowArtifacts);
117
+
118
+ // Also write tasks using underscore format
119
+ const ttGen = new TaskToolCommandGenerator();
120
+ const tasksWritten = await ttGen.writeDashArtifacts(destDir, taskArtifacts);
121
+
122
+ const written = agentCount + workflowCount + tasksWritten;
123
+
124
+ console.log(chalk.green(`✓ ${this.name} configured:`));
125
+ console.log(chalk.dim(` - Mode: CLI`));
126
+ console.log(chalk.dim(` - ${counts.agents} agents exported`));
127
+ console.log(chalk.dim(` - ${counts.tasks} tasks exported`));
128
+ console.log(chalk.dim(` - ${counts.workflows} workflow commands exported`));
129
+ if (counts.workflowLaunchers > 0) {
130
+ console.log(chalk.dim(` - ${counts.workflowLaunchers} workflow launchers exported`));
131
+ }
132
+ console.log(chalk.dim(` - ${written} Codex prompt files written`));
133
+ console.log(chalk.dim(` - Destination: ${destDir}`));
134
+
135
+ return {
136
+ success: true,
137
+ mode,
138
+ artifacts,
139
+ counts,
140
+ destination: destDir,
141
+ written,
142
+ installLocation,
143
+ };
144
+ }
145
+
146
+ /**
147
+ * Detect Codex installation by checking for BMAD prompt exports
148
+ */
149
+ async detect(projectDir) {
150
+ // Check both global and project-specific locations
151
+ const globalDir = this.getCodexPromptDir(null, 'global');
152
+ const projectDir_local = projectDir || process.cwd();
153
+ const projectSpecificDir = this.getCodexPromptDir(projectDir_local, 'project');
154
+
155
+ // Check global location
156
+ if (await fs.pathExists(globalDir)) {
157
+ try {
158
+ const entries = await fs.readdir(globalDir);
159
+ if (entries && entries.some((entry) => entry && typeof entry === 'string' && entry.startsWith('bmad'))) {
160
+ return true;
161
+ }
162
+ } catch {
163
+ // Ignore errors
164
+ }
165
+ }
166
+
167
+ // Check project-specific location
168
+ if (await fs.pathExists(projectSpecificDir)) {
169
+ try {
170
+ const entries = await fs.readdir(projectSpecificDir);
171
+ if (entries && entries.some((entry) => entry && typeof entry === 'string' && entry.startsWith('bmad'))) {
172
+ return true;
173
+ }
174
+ } catch {
175
+ // Ignore errors
176
+ }
177
+ }
178
+
179
+ return false;
180
+ }
181
+
182
+ /**
183
+ * Collect Claude-style artifacts for Codex export.
184
+ * Returns the normalized artifact list for further processing.
185
+ */
186
+ async collectClaudeArtifacts(projectDir, bmadDir, options = {}) {
187
+ const selectedModules = options.selectedModules || [];
188
+ const artifacts = [];
189
+
190
+ // Generate agent launchers
191
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
192
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, selectedModules);
193
+
194
+ for (const artifact of agentArtifacts) {
195
+ artifacts.push({
196
+ type: 'agent',
197
+ module: artifact.module,
198
+ sourcePath: artifact.sourcePath,
199
+ relativePath: artifact.relativePath,
200
+ content: artifact.content,
201
+ });
202
+ }
203
+
204
+ const tasks = await getTasksFromBmad(bmadDir, selectedModules);
205
+ for (const task of tasks) {
206
+ const content = await this.readAndProcessWithProject(
207
+ task.path,
208
+ {
209
+ module: task.module,
210
+ name: task.name,
211
+ },
212
+ projectDir,
213
+ );
214
+
215
+ artifacts.push({
216
+ type: 'task',
217
+ module: task.module,
218
+ sourcePath: task.path,
219
+ relativePath: path.join(task.module, 'tasks', `${task.name}.md`),
220
+ content,
221
+ });
222
+ }
223
+
224
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
225
+ const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
226
+ artifacts.push(...workflowArtifacts);
227
+
228
+ return {
229
+ artifacts,
230
+ counts: {
231
+ agents: agentArtifacts.length,
232
+ tasks: tasks.length,
233
+ workflows: workflowCounts.commands,
234
+ workflowLaunchers: workflowCounts.launchers,
235
+ },
236
+ };
237
+ }
238
+
239
+ getCodexPromptDir(projectDir = null, location = 'global') {
240
+ if (location === 'project' && projectDir) {
241
+ return path.join(projectDir, '.codex', 'prompts');
242
+ }
243
+ return path.join(os.homedir(), '.codex', 'prompts');
244
+ }
245
+
246
+ async flattenAndWriteArtifacts(artifacts, destDir) {
247
+ let written = 0;
248
+
249
+ for (const artifact of artifacts) {
250
+ const flattenedName = this.flattenFilename(artifact.relativePath);
251
+ const targetPath = path.join(destDir, flattenedName);
252
+ await fs.writeFile(targetPath, artifact.content);
253
+ written++;
254
+ }
255
+
256
+ return written;
257
+ }
258
+
259
+ async clearOldBmadFiles(destDir) {
260
+ if (!(await fs.pathExists(destDir))) {
261
+ return;
262
+ }
263
+
264
+ let entries;
265
+ try {
266
+ entries = await fs.readdir(destDir);
267
+ } catch (error) {
268
+ // Directory exists but can't be read - skip cleanup
269
+ console.warn(chalk.yellow(`Warning: Could not read directory ${destDir}: ${error.message}`));
270
+ return;
271
+ }
272
+
273
+ if (!entries || !Array.isArray(entries)) {
274
+ return;
275
+ }
276
+
277
+ for (const entry of entries) {
278
+ // Skip non-strings or undefined entries
279
+ if (!entry || typeof entry !== 'string') {
280
+ continue;
281
+ }
282
+ if (!entry.startsWith('bmad')) {
283
+ continue;
284
+ }
285
+
286
+ const entryPath = path.join(destDir, entry);
287
+ try {
288
+ const stat = await fs.stat(entryPath);
289
+ if (stat.isFile()) {
290
+ await fs.remove(entryPath);
291
+ } else if (stat.isDirectory()) {
292
+ await fs.remove(entryPath);
293
+ }
294
+ } catch (error) {
295
+ // Skip files that can't be processed
296
+ console.warn(chalk.dim(` Skipping ${entry}: ${error.message}`));
297
+ }
298
+ }
299
+ }
300
+
301
+ async readAndProcessWithProject(filePath, metadata, projectDir) {
302
+ const content = await fs.readFile(filePath, 'utf8');
303
+ return super.processContent(content, metadata, projectDir);
304
+ }
305
+
306
+ /**
307
+ * Get instructions for global installation
308
+ * @returns {string} Instructions text
309
+ */
310
+ getGlobalInstructions(destDir) {
311
+ const lines = [
312
+ '',
313
+ chalk.bold.cyan('═'.repeat(70)),
314
+ chalk.bold.yellow(' IMPORTANT: Codex Configuration'),
315
+ chalk.bold.cyan('═'.repeat(70)),
316
+ '',
317
+ chalk.white(' /prompts installed globally to your HOME DIRECTORY.'),
318
+ '',
319
+ chalk.yellow(' ⚠️ These prompts reference a specific _bmad path'),
320
+ chalk.dim(" To use with other projects, you'd need to copy the _bmad dir"),
321
+ '',
322
+ chalk.green(' ✓ You can now use /commands in Codex CLI'),
323
+ chalk.dim(' Example: /bmad_bmm_pm'),
324
+ chalk.dim(' Type / to see all available commands'),
325
+ '',
326
+ chalk.bold.cyan('═'.repeat(70)),
327
+ '',
328
+ ];
329
+ return lines.join('\n');
330
+ }
331
+
332
+ /**
333
+ * Get instructions for project-specific installation
334
+ * @param {string} projectDir - Optional project directory
335
+ * @param {string} destDir - Optional destination directory
336
+ * @returns {string} Instructions text
337
+ */
338
+ getProjectSpecificInstructions(projectDir = null, destDir = null) {
339
+ const isWindows = os.platform() === 'win32';
340
+
341
+ const commonLines = [
342
+ '',
343
+ chalk.bold.cyan('═'.repeat(70)),
344
+ chalk.bold.yellow(' Project-Specific Codex Configuration'),
345
+ chalk.bold.cyan('═'.repeat(70)),
346
+ '',
347
+ chalk.white(' Prompts will be installed to: ') + chalk.cyan(destDir || '<project>/.codex/prompts'),
348
+ '',
349
+ chalk.bold.yellow(' ⚠️ REQUIRED: You must set CODEX_HOME to use these prompts'),
350
+ '',
351
+ ];
352
+
353
+ const windowsLines = [
354
+ chalk.bold(' Create a codex.cmd file in your project root:'),
355
+ '',
356
+ chalk.green(' @echo off'),
357
+ chalk.green(' set CODEX_HOME=%~dp0.codex'),
358
+ chalk.green(' codex %*'),
359
+ '',
360
+ chalk.dim(String.raw` Then run: .\codex instead of codex`),
361
+ chalk.dim(' (The %~dp0 gets the directory of the .cmd file)'),
362
+ ];
363
+
364
+ const unixLines = [
365
+ chalk.bold(' Add this alias to your ~/.bashrc or ~/.zshrc:'),
366
+ '',
367
+ chalk.green(' alias codex=\'CODEX_HOME="$PWD/.codex" codex\''),
368
+ '',
369
+ chalk.dim(' After adding, run: source ~/.bashrc (or source ~/.zshrc)'),
370
+ chalk.dim(' (The $PWD uses your current working directory)'),
371
+ ];
372
+ const closingLines = [
373
+ '',
374
+ chalk.dim(' This tells Codex CLI to use prompts from this project instead of ~/.codex'),
375
+ '',
376
+ chalk.bold.cyan('═'.repeat(70)),
377
+ '',
378
+ ];
379
+
380
+ const lines = [...commonLines, ...(isWindows ? windowsLines : unixLines), ...closingLines];
381
+
382
+ return lines.join('\n');
383
+ }
384
+
385
+ /**
386
+ * Cleanup Codex configuration
387
+ */
388
+ async cleanup(projectDir = null) {
389
+ // Clean both global and project-specific locations
390
+ const globalDir = this.getCodexPromptDir(null, 'global');
391
+ await this.clearOldBmadFiles(globalDir);
392
+
393
+ if (projectDir) {
394
+ const projectSpecificDir = this.getCodexPromptDir(projectDir, 'project');
395
+ await this.clearOldBmadFiles(projectSpecificDir);
396
+ }
397
+ }
398
+
399
+ /**
400
+ * Install a custom agent launcher for Codex
401
+ * @param {string} projectDir - Project directory (not used, Codex installs to home)
402
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
403
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
404
+ * @param {Object} metadata - Agent metadata
405
+ * @returns {Object|null} Info about created command
406
+ */
407
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
408
+ const destDir = this.getCodexPromptDir(projectDir, 'project');
409
+ await fs.ensureDir(destDir);
410
+
411
+ const launcherContent = `---
412
+ name: '${agentName}'
413
+ description: '${agentName} agent'
414
+ ---
415
+
416
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
417
+
418
+ <agent-activation CRITICAL="TRUE">
419
+ 1. LOAD the FULL agent file from @${agentPath}
420
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
421
+ 3. FOLLOW every step in the <activation> section precisely
422
+ 4. DISPLAY the welcome/greeting as instructed
423
+ 5. PRESENT the numbered menu
424
+ 6. WAIT for user input before proceeding
425
+ </agent-activation>
426
+ `;
427
+
428
+ // Use underscore format: bmad_custom_fred-commit-poet.md
429
+ const fileName = customAgentDashName(agentName);
430
+ const launcherPath = path.join(destDir, fileName);
431
+ await fs.writeFile(launcherPath, launcherContent, 'utf8');
432
+
433
+ return {
434
+ path: path.relative(projectDir, launcherPath),
435
+ command: `/${fileName.replace('.md', '')}`,
436
+ };
437
+ }
438
+ }
439
+
440
+ module.exports = { CodexSetup };
@@ -0,0 +1,250 @@
1
+ const path = require('node:path');
2
+ const { BaseIdeSetup } = require('./_base-ide');
3
+ const chalk = require('chalk');
4
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
5
+
6
+ /**
7
+ * KiloCode IDE setup handler
8
+ * Creates custom modes in .kilocodemodes file (similar to Roo)
9
+ */
10
+ class KiloSetup extends BaseIdeSetup {
11
+ constructor() {
12
+ super('kilo', 'Kilo Code');
13
+ this.configFile = '.kilocodemodes';
14
+ }
15
+
16
+ /**
17
+ * Setup KiloCode IDE configuration
18
+ * @param {string} projectDir - Project directory
19
+ * @param {string} bmadDir - BMAD installation directory
20
+ * @param {Object} options - Setup options
21
+ */
22
+ async setup(projectDir, bmadDir, options = {}) {
23
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
24
+
25
+ // Check for existing .kilocodemodes file
26
+ const kiloModesPath = path.join(projectDir, this.configFile);
27
+ let existingModes = [];
28
+ let existingContent = '';
29
+
30
+ if (await this.pathExists(kiloModesPath)) {
31
+ existingContent = await this.readFile(kiloModesPath);
32
+ // Parse existing modes
33
+ const modeMatches = existingContent.matchAll(/- slug: ([\w-]+)/g);
34
+ for (const match of modeMatches) {
35
+ existingModes.push(match[1]);
36
+ }
37
+ console.log(chalk.yellow(`Found existing .kilocodemodes file with ${existingModes.length} modes`));
38
+ }
39
+
40
+ // Generate agent launchers
41
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
42
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
43
+
44
+ // Create modes content
45
+ let newModesContent = '';
46
+ let addedCount = 0;
47
+ let skippedCount = 0;
48
+
49
+ for (const artifact of agentArtifacts) {
50
+ const slug = `bmad-${artifact.module}-${artifact.name}`;
51
+
52
+ // Skip if already exists
53
+ if (existingModes.includes(slug)) {
54
+ console.log(chalk.dim(` Skipping ${slug} - already exists`));
55
+ skippedCount++;
56
+ continue;
57
+ }
58
+
59
+ const modeEntry = await this.createModeEntry(artifact, projectDir);
60
+
61
+ newModesContent += modeEntry;
62
+ addedCount++;
63
+ }
64
+
65
+ // Build final content
66
+ let finalContent = '';
67
+ if (existingContent) {
68
+ finalContent = existingContent.trim() + '\n' + newModesContent;
69
+ } else {
70
+ finalContent = 'customModes:\n' + newModesContent;
71
+ }
72
+
73
+ // Write .kilocodemodes file
74
+ await this.writeFile(kiloModesPath, finalContent);
75
+
76
+ console.log(chalk.green(`✓ ${this.name} configured:`));
77
+ console.log(chalk.dim(` - ${addedCount} modes added`));
78
+ if (skippedCount > 0) {
79
+ console.log(chalk.dim(` - ${skippedCount} modes skipped (already exist)`));
80
+ }
81
+ console.log(chalk.dim(` - Configuration file: ${this.configFile}`));
82
+ console.log(chalk.dim('\n Modes will be available when you open this project in KiloCode'));
83
+
84
+ return {
85
+ success: true,
86
+ modes: addedCount,
87
+ skipped: skippedCount,
88
+ };
89
+ }
90
+
91
+ /**
92
+ * Create a mode entry for an agent
93
+ */
94
+ async createModeEntry(artifact, projectDir) {
95
+ // Extract metadata from launcher content
96
+ const titleMatch = artifact.content.match(/title="([^"]+)"/);
97
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(artifact.name);
98
+
99
+ const iconMatch = artifact.content.match(/icon="([^"]+)"/);
100
+ const icon = iconMatch ? iconMatch[1] : '🤖';
101
+
102
+ const whenToUseMatch = artifact.content.match(/whenToUse="([^"]+)"/);
103
+ const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
104
+
105
+ // Get the activation header from central template
106
+ const activationHeader = await this.getAgentCommandHeader();
107
+
108
+ const roleDefinitionMatch = artifact.content.match(/roleDefinition="([^"]+)"/);
109
+ const roleDefinition = roleDefinitionMatch
110
+ ? roleDefinitionMatch[1]
111
+ : `You are a ${title} specializing in ${title.toLowerCase()} tasks.`;
112
+
113
+ // Get relative path
114
+ const relativePath = path.relative(projectDir, artifact.sourcePath).replaceAll('\\', '/');
115
+
116
+ // Build mode entry (KiloCode uses same schema as Roo)
117
+ const slug = `bmad-${artifact.module}-${artifact.name}`;
118
+ let modeEntry = ` - slug: ${slug}\n`;
119
+ modeEntry += ` name: '${icon} ${title}'\n`;
120
+ modeEntry += ` roleDefinition: ${roleDefinition}\n`;
121
+ modeEntry += ` whenToUse: ${whenToUse}\n`;
122
+ modeEntry += ` customInstructions: |\n`;
123
+ modeEntry += ` ${activationHeader} Read the full YAML from ${relativePath} start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode\n`;
124
+ modeEntry += ` groups:\n`;
125
+ modeEntry += ` - read\n`;
126
+ modeEntry += ` - edit\n`;
127
+ modeEntry += ` - browser\n`;
128
+ modeEntry += ` - command\n`;
129
+ modeEntry += ` - mcp\n`;
130
+
131
+ return modeEntry;
132
+ }
133
+
134
+ /**
135
+ * Format name as title
136
+ */
137
+ formatTitle(name) {
138
+ return name
139
+ .split('-')
140
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
141
+ .join(' ');
142
+ }
143
+
144
+ /**
145
+ * Cleanup KiloCode configuration
146
+ */
147
+ async cleanup(projectDir) {
148
+ const fs = require('fs-extra');
149
+ const kiloModesPath = path.join(projectDir, this.configFile);
150
+
151
+ if (await fs.pathExists(kiloModesPath)) {
152
+ const content = await fs.readFile(kiloModesPath, 'utf8');
153
+
154
+ // Remove BMAD modes only
155
+ const lines = content.split('\n');
156
+ const filteredLines = [];
157
+ let skipMode = false;
158
+ let removedCount = 0;
159
+
160
+ for (const line of lines) {
161
+ if (/^\s*- slug: bmad-/.test(line)) {
162
+ skipMode = true;
163
+ removedCount++;
164
+ } else if (skipMode && /^\s*- slug: /.test(line)) {
165
+ skipMode = false;
166
+ }
167
+
168
+ if (!skipMode) {
169
+ filteredLines.push(line);
170
+ }
171
+ }
172
+
173
+ await fs.writeFile(kiloModesPath, filteredLines.join('\n'));
174
+ console.log(chalk.dim(`Removed ${removedCount} BMAD modes from .kilocodemodes`));
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Install a custom agent launcher for Kilo
180
+ * @param {string} projectDir - Project directory
181
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
182
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
183
+ * @param {Object} metadata - Agent metadata
184
+ * @returns {Object} Installation result
185
+ */
186
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
187
+ const kilocodemodesPath = path.join(projectDir, this.configFile);
188
+ let existingContent = '';
189
+
190
+ // Read existing .kilocodemodes file
191
+ if (await this.pathExists(kilocodemodesPath)) {
192
+ existingContent = await this.readFile(kilocodemodesPath);
193
+ }
194
+
195
+ // Create custom agent mode entry
196
+ const slug = `bmad-custom-${agentName.toLowerCase()}`;
197
+ const modeEntry = ` - slug: ${slug}
198
+ name: 'BMAD Custom: ${agentName}'
199
+ description: |
200
+ Custom BMAD agent: ${agentName}
201
+
202
+ **⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
203
+
204
+ This is a launcher for the custom BMAD agent "${agentName}". The agent will follow the persona and instructions from the main agent file.
205
+ prompt: |
206
+ @${agentPath}
207
+ always: false
208
+ permissions: all
209
+ `;
210
+
211
+ // Check if mode already exists
212
+ if (existingContent.includes(slug)) {
213
+ return {
214
+ ide: 'kilo',
215
+ path: this.configFile,
216
+ command: agentName,
217
+ type: 'custom-agent-launcher',
218
+ alreadyExists: true,
219
+ };
220
+ }
221
+
222
+ // Build final content
223
+ let finalContent = '';
224
+ if (existingContent) {
225
+ // Find customModes section or add it
226
+ if (existingContent.includes('customModes:')) {
227
+ // Append to existing customModes
228
+ finalContent = existingContent + modeEntry;
229
+ } else {
230
+ // Add customModes section
231
+ finalContent = existingContent.trim() + '\n\ncustomModes:\n' + modeEntry;
232
+ }
233
+ } else {
234
+ // Create new .kilocodemodes file with customModes
235
+ finalContent = 'customModes:\n' + modeEntry;
236
+ }
237
+
238
+ // Write .kilocodemodes file
239
+ await this.writeFile(kilocodemodesPath, finalContent);
240
+
241
+ return {
242
+ ide: 'kilo',
243
+ path: this.configFile,
244
+ command: slug,
245
+ type: 'custom-agent-launcher',
246
+ };
247
+ }
248
+ }
249
+
250
+ module.exports = { KiloSetup };