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,157 @@
1
+ # BMAD Platform Codes Configuration
2
+ # Central configuration for all platform/IDE codes used in the BMAD system
3
+ #
4
+ # This file defines the standardized platform codes that are used throughout
5
+ # the installation system to identify different platforms (IDEs, tools, etc.)
6
+ #
7
+ # Format:
8
+ # code: Platform identifier used internally
9
+ # name: Display name shown to users
10
+ # preferred: Whether this platform is shown as a recommended option on install
11
+ # category: Type of platform (ide, tool, service, etc.)
12
+
13
+ platforms:
14
+ # Recommended Platforms
15
+ claude-code:
16
+ name: "Claude Code"
17
+ preferred: true
18
+ category: cli
19
+ description: "Anthropic's official CLI for Claude"
20
+
21
+ windsurf:
22
+ name: "Windsurf"
23
+ preferred: true
24
+ category: ide
25
+ description: "AI-powered IDE with cascade flows"
26
+
27
+ cursor:
28
+ name: "Cursor"
29
+ preferred: true
30
+ category: ide
31
+ description: "AI-first code editor"
32
+
33
+ # Other IDEs and Tools
34
+ cline:
35
+ name: "Cline"
36
+ preferred: false
37
+ category: ide
38
+ description: "AI coding assistant"
39
+
40
+ opencode:
41
+ name: "OpenCode"
42
+ preferred: false
43
+ category: ide
44
+ description: "OpenCode terminal coding assistant"
45
+
46
+ auggie:
47
+ name: "Auggie"
48
+ preferred: false
49
+ category: cli
50
+ description: "AI development tool"
51
+
52
+ roo:
53
+ name: "Roo Cline"
54
+ preferred: false
55
+ category: ide
56
+ description: "Enhanced Cline fork"
57
+
58
+ rovo:
59
+ name: "Rovo"
60
+ preferred: false
61
+ category: ide
62
+ description: "Atlassian's AI coding assistant"
63
+
64
+ rovo-dev:
65
+ name: "Rovo Dev"
66
+ preferred: false
67
+ category: ide
68
+ description: "Atlassian's Rovo development environment"
69
+
70
+ kiro-cli:
71
+ name: "Kiro CLI"
72
+ preferred: false
73
+ category: cli
74
+ description: "Kiro command-line interface"
75
+
76
+ github-copilot:
77
+ name: "GitHub Copilot"
78
+ preferred: false
79
+ category: ide
80
+ description: "GitHub's AI pair programmer"
81
+
82
+ codex:
83
+ name: "Codex"
84
+ preferred: false
85
+ category: cli
86
+ description: "OpenAI Codex integration"
87
+
88
+ qwen:
89
+ name: "QwenCoder"
90
+ preferred: false
91
+ category: ide
92
+ description: "Qwen AI coding assistant"
93
+
94
+ gemini:
95
+ name: "Gemini CLI"
96
+ preferred: false
97
+ category: cli
98
+ description: "Google's CLI for Gemini"
99
+
100
+ iflow:
101
+ name: "iFlow"
102
+ preferred: false
103
+ category: ide
104
+ description: "AI workflow automation"
105
+
106
+ kilo:
107
+ name: "KiloCoder"
108
+ preferred: false
109
+ category: ide
110
+ description: "AI coding platform"
111
+
112
+ crush:
113
+ name: "Crush"
114
+ preferred: false
115
+ category: ide
116
+ description: "AI development assistant"
117
+
118
+ antigravity:
119
+ name: "Google Antigravity"
120
+ preferred: false
121
+ category: ide
122
+ description: "Google's AI development environment"
123
+
124
+ trae:
125
+ name: "Trae"
126
+ preferred: false
127
+ category: ide
128
+ description: "AI coding tool"
129
+
130
+ # Platform categories
131
+ categories:
132
+ ide:
133
+ name: "Integrated Development Environment"
134
+ description: "Full-featured code editors with AI assistance"
135
+
136
+ cli:
137
+ name: "Command Line Interface"
138
+ description: "Terminal-based tools"
139
+
140
+ tool:
141
+ name: "Development Tool"
142
+ description: "Standalone development utilities"
143
+
144
+ service:
145
+ name: "Cloud Service"
146
+ description: "Cloud-based development platforms"
147
+
148
+ extension:
149
+ name: "Editor Extension"
150
+ description: "Plugins for existing editors"
151
+
152
+ # Naming conventions and rules
153
+ conventions:
154
+ code_format: "lowercase-kebab-case"
155
+ name_format: "Title Case"
156
+ max_code_length: 20
157
+ allowed_characters: "a-z0-9-"
@@ -0,0 +1,491 @@
1
+ // Zod schema definition for *.agent.yaml files
2
+ const assert = require('node:assert');
3
+ const { z } = require('zod');
4
+
5
+ const COMMAND_TARGET_KEYS = ['workflow', 'validate-workflow', 'exec', 'action', 'tmpl', 'data'];
6
+ const TRIGGER_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
7
+ const COMPOUND_TRIGGER_PATTERN = /^([A-Z]{1,3}) or fuzzy match on ([a-z0-9]+(?:-[a-z0-9]+)*)$/;
8
+
9
+ /**
10
+ * Derive the expected shortcut from a kebab-case trigger.
11
+ * - Single word: first letter (e.g., "help" → "H")
12
+ * - Multi-word: first letter of first two words (e.g., "tech-spec" → "TS")
13
+ * @param {string} kebabTrigger The kebab-case trigger name.
14
+ * @returns {string} The expected uppercase shortcut.
15
+ */
16
+ function deriveShortcutFromKebab(kebabTrigger) {
17
+ const words = kebabTrigger.split('-');
18
+ if (words.length === 1) {
19
+ return words[0][0].toUpperCase();
20
+ }
21
+ return (words[0][0] + words[1][0]).toUpperCase();
22
+ }
23
+
24
+ /**
25
+ * Parse and validate a compound trigger string.
26
+ * Format: "<SHORTCUT> or fuzzy match on <kebab-case>"
27
+ * @param {string} triggerValue The trigger string to parse.
28
+ * @returns {{ valid: boolean, shortcut?: string, kebabTrigger?: string, error?: string }}
29
+ */
30
+ function parseCompoundTrigger(triggerValue) {
31
+ const match = COMPOUND_TRIGGER_PATTERN.exec(triggerValue);
32
+ if (!match) {
33
+ return { valid: false, error: 'invalid compound trigger format' };
34
+ }
35
+
36
+ const [, shortcut, kebabTrigger] = match;
37
+
38
+ return { valid: true, shortcut, kebabTrigger };
39
+ }
40
+
41
+ // Public API ---------------------------------------------------------------
42
+
43
+ /**
44
+ * Validate an agent YAML payload against the schema derived from its file location.
45
+ * Exposed as the single public entry point, so callers do not reach into schema internals.
46
+ *
47
+ * @param {string} filePath Path to the agent file (used to infer module scope).
48
+ * @param {unknown} agentYaml Parsed YAML content.
49
+ * @returns {import('zod').SafeParseReturnType<unknown, unknown>} SafeParse result.
50
+ */
51
+ function validateAgentFile(filePath, agentYaml) {
52
+ const expectedModule = deriveModuleFromPath(filePath);
53
+ const schema = agentSchema({ module: expectedModule });
54
+ return schema.safeParse(agentYaml);
55
+ }
56
+
57
+ module.exports = { validateAgentFile };
58
+
59
+ // Internal helpers ---------------------------------------------------------
60
+
61
+ /**
62
+ * Build a Zod schema for validating a single agent definition.
63
+ * The schema is generated per call so module-scoped agents can pass their expected
64
+ * module slug while core agents leave it undefined.
65
+ *
66
+ * @param {Object} [options]
67
+ * @param {string|null|undefined} [options.module] Module slug for module agents; omit or null for core agents.
68
+ * @returns {import('zod').ZodSchema} Configured Zod schema instance.
69
+ */
70
+ function agentSchema(options = {}) {
71
+ const expectedModule = normalizeModuleOption(options.module);
72
+
73
+ return (
74
+ z
75
+ .object({
76
+ agent: buildAgentSchema(expectedModule),
77
+ })
78
+ .strict()
79
+ // Refinement: enforce trigger format and uniqueness rules after structural checks.
80
+ .superRefine((value, ctx) => {
81
+ const seenTriggers = new Set();
82
+
83
+ let index = 0;
84
+ for (const item of value.agent.menu) {
85
+ // Handle legacy format with trigger field
86
+ if (item.trigger) {
87
+ const triggerValue = item.trigger;
88
+ let canonicalTrigger = triggerValue;
89
+
90
+ // Check if it's a compound trigger (contains " or ")
91
+ if (triggerValue.includes(' or ')) {
92
+ const result = parseCompoundTrigger(triggerValue);
93
+ if (!result.valid) {
94
+ ctx.addIssue({
95
+ code: 'custom',
96
+ path: ['agent', 'menu', index, 'trigger'],
97
+ message: `agent.menu[].trigger compound format error: ${result.error}`,
98
+ });
99
+ return;
100
+ }
101
+
102
+ // Validate that shortcut matches description brackets
103
+ const descriptionMatch = item.description?.match(/^\[([A-Z]{1,3})\]/);
104
+ if (!descriptionMatch) {
105
+ ctx.addIssue({
106
+ code: 'custom',
107
+ path: ['agent', 'menu', index, 'description'],
108
+ message: `agent.menu[].description must start with [SHORTCUT] where SHORTCUT matches the trigger shortcut "${result.shortcut}"`,
109
+ });
110
+ return;
111
+ }
112
+
113
+ const descriptionShortcut = descriptionMatch[1];
114
+ if (descriptionShortcut !== result.shortcut) {
115
+ ctx.addIssue({
116
+ code: 'custom',
117
+ path: ['agent', 'menu', index, 'description'],
118
+ message: `agent.menu[].description shortcut "[${descriptionShortcut}]" must match trigger shortcut "${result.shortcut}"`,
119
+ });
120
+ return;
121
+ }
122
+
123
+ canonicalTrigger = result.kebabTrigger;
124
+ } else if (!TRIGGER_PATTERN.test(triggerValue)) {
125
+ ctx.addIssue({
126
+ code: 'custom',
127
+ path: ['agent', 'menu', index, 'trigger'],
128
+ message: 'agent.menu[].trigger must be kebab-case (lowercase words separated by hyphen)',
129
+ });
130
+ return;
131
+ }
132
+
133
+ if (seenTriggers.has(canonicalTrigger)) {
134
+ ctx.addIssue({
135
+ code: 'custom',
136
+ path: ['agent', 'menu', index, 'trigger'],
137
+ message: `agent.menu[].trigger duplicates "${canonicalTrigger}" within the same agent`,
138
+ });
139
+ return;
140
+ }
141
+
142
+ seenTriggers.add(canonicalTrigger);
143
+ }
144
+ // Handle multi format with triggers array (new format)
145
+ else if (item.triggers && Array.isArray(item.triggers)) {
146
+ for (const [triggerIndex, triggerItem] of item.triggers.entries()) {
147
+ let triggerName = null;
148
+
149
+ // Extract trigger name from all three formats
150
+ if (triggerItem.trigger) {
151
+ // Format 1: Simple flat format with trigger field
152
+ triggerName = triggerItem.trigger;
153
+ } else {
154
+ // Format 2a or 2b: Object-key format
155
+ const keys = Object.keys(triggerItem);
156
+ if (keys.length === 1 && keys[0] !== 'trigger') {
157
+ triggerName = keys[0];
158
+ }
159
+ }
160
+
161
+ if (triggerName) {
162
+ if (!TRIGGER_PATTERN.test(triggerName)) {
163
+ ctx.addIssue({
164
+ code: 'custom',
165
+ path: ['agent', 'menu', index, 'triggers', triggerIndex],
166
+ message: `agent.menu[].triggers[] must be kebab-case (lowercase words separated by hyphen) - got "${triggerName}"`,
167
+ });
168
+ return;
169
+ }
170
+
171
+ if (seenTriggers.has(triggerName)) {
172
+ ctx.addIssue({
173
+ code: 'custom',
174
+ path: ['agent', 'menu', index, 'triggers', triggerIndex],
175
+ message: `agent.menu[].triggers[] duplicates "${triggerName}" within the same agent`,
176
+ });
177
+ return;
178
+ }
179
+
180
+ seenTriggers.add(triggerName);
181
+ }
182
+ }
183
+ }
184
+
185
+ index += 1;
186
+ }
187
+ })
188
+ // Refinement: suggest conversational_knowledge when discussion is true
189
+ .superRefine((value, ctx) => {
190
+ if (value.agent.discussion === true && !value.agent.conversational_knowledge) {
191
+ ctx.addIssue({
192
+ code: 'custom',
193
+ path: ['agent', 'conversational_knowledge'],
194
+ message: 'It is recommended to include conversational_knowledge when discussion is true',
195
+ });
196
+ }
197
+ })
198
+ );
199
+ }
200
+
201
+ /**
202
+ * Assemble the full agent schema using the module expectation provided by the caller.
203
+ * @param {string|null} expectedModule Trimmed module slug or null for core agents.
204
+ */
205
+ function buildAgentSchema(expectedModule) {
206
+ return z
207
+ .object({
208
+ metadata: buildMetadataSchema(expectedModule),
209
+ persona: buildPersonaSchema(),
210
+ critical_actions: z.array(createNonEmptyString('agent.critical_actions[]')).optional(),
211
+ menu: z.array(buildMenuItemSchema()).min(1, { message: 'agent.menu must include at least one entry' }),
212
+ prompts: z.array(buildPromptSchema()).optional(),
213
+ webskip: z.boolean().optional(),
214
+ discussion: z.boolean().optional(),
215
+ conversational_knowledge: z.array(z.object({}).passthrough()).min(1).optional(),
216
+ })
217
+ .strict();
218
+ }
219
+
220
+ /**
221
+ * Validate metadata shape.
222
+ * @param {string|null} expectedModule Trimmed module slug or null when core agent metadata is expected.
223
+ * Note: Module field is optional and can be any value - no validation against path.
224
+ */
225
+ function buildMetadataSchema(expectedModule) {
226
+ const schemaShape = {
227
+ id: createNonEmptyString('agent.metadata.id'),
228
+ name: createNonEmptyString('agent.metadata.name'),
229
+ title: createNonEmptyString('agent.metadata.title'),
230
+ icon: createNonEmptyString('agent.metadata.icon'),
231
+ module: createNonEmptyString('agent.metadata.module').optional(),
232
+ hasSidecar: z.boolean(),
233
+ };
234
+
235
+ return z.object(schemaShape).strict();
236
+ }
237
+
238
+ function buildPersonaSchema() {
239
+ return z
240
+ .object({
241
+ role: createNonEmptyString('agent.persona.role'),
242
+ identity: createNonEmptyString('agent.persona.identity'),
243
+ communication_style: createNonEmptyString('agent.persona.communication_style'),
244
+ principles: z.union([
245
+ createNonEmptyString('agent.persona.principles'),
246
+ z
247
+ .array(createNonEmptyString('agent.persona.principles[]'))
248
+ .min(1, { message: 'agent.persona.principles must include at least one entry' }),
249
+ ]),
250
+ })
251
+ .strict();
252
+ }
253
+
254
+ function buildPromptSchema() {
255
+ return z
256
+ .object({
257
+ id: createNonEmptyString('agent.prompts[].id'),
258
+ content: z.string().refine((value) => value.trim().length > 0, {
259
+ message: 'agent.prompts[].content must be a non-empty string',
260
+ }),
261
+ description: createNonEmptyString('agent.prompts[].description').optional(),
262
+ })
263
+ .strict();
264
+ }
265
+
266
+ /**
267
+ * Schema for individual menu entries ensuring they are actionable.
268
+ * Supports both legacy format and new multi format.
269
+ */
270
+ function buildMenuItemSchema() {
271
+ // Legacy menu item format
272
+ const legacyMenuItemSchema = z
273
+ .object({
274
+ trigger: createNonEmptyString('agent.menu[].trigger'),
275
+ description: createNonEmptyString('agent.menu[].description'),
276
+ workflow: createNonEmptyString('agent.menu[].workflow').optional(),
277
+ 'workflow-install': createNonEmptyString('agent.menu[].workflow-install').optional(),
278
+ 'validate-workflow': createNonEmptyString('agent.menu[].validate-workflow').optional(),
279
+ exec: createNonEmptyString('agent.menu[].exec').optional(),
280
+ action: createNonEmptyString('agent.menu[].action').optional(),
281
+ tmpl: createNonEmptyString('agent.menu[].tmpl').optional(),
282
+ data: z.string().optional(),
283
+ checklist: createNonEmptyString('agent.menu[].checklist').optional(),
284
+ document: createNonEmptyString('agent.menu[].document').optional(),
285
+ 'ide-only': z.boolean().optional(),
286
+ 'web-only': z.boolean().optional(),
287
+ discussion: z.boolean().optional(),
288
+ })
289
+ .strict()
290
+ .superRefine((value, ctx) => {
291
+ const hasCommandTarget = COMMAND_TARGET_KEYS.some((key) => {
292
+ const commandValue = value[key];
293
+ return typeof commandValue === 'string' && commandValue.trim().length > 0;
294
+ });
295
+
296
+ if (!hasCommandTarget) {
297
+ ctx.addIssue({
298
+ code: 'custom',
299
+ message: 'agent.menu[] entries must include at least one command target field',
300
+ });
301
+ }
302
+ });
303
+
304
+ // Multi menu item format
305
+ const multiMenuItemSchema = z
306
+ .object({
307
+ multi: createNonEmptyString('agent.menu[].multi'),
308
+ triggers: z
309
+ .array(
310
+ z.union([
311
+ // Format 1: Simple flat format (has trigger field)
312
+ z
313
+ .object({
314
+ trigger: z.string(),
315
+ input: createNonEmptyString('agent.menu[].triggers[].input'),
316
+ route: createNonEmptyString('agent.menu[].triggers[].route').optional(),
317
+ action: createNonEmptyString('agent.menu[].triggers[].action').optional(),
318
+ data: z.string().optional(),
319
+ type: z.enum(['exec', 'action', 'workflow']).optional(),
320
+ })
321
+ .strict()
322
+ .refine((data) => data.trigger, { message: 'Must have trigger field' })
323
+ .superRefine((value, ctx) => {
324
+ // Must have either route or action (or both)
325
+ if (!value.route && !value.action) {
326
+ ctx.addIssue({
327
+ code: 'custom',
328
+ message: 'agent.menu[].triggers[] must have either route or action (or both)',
329
+ });
330
+ }
331
+ }),
332
+ // Format 2a: Object with array format (like bmad-builder.agent.yaml)
333
+ z
334
+ .object({})
335
+ .passthrough()
336
+ .refine(
337
+ (value) => {
338
+ const keys = Object.keys(value);
339
+ if (keys.length !== 1) return false;
340
+ const triggerItems = value[keys[0]];
341
+ return Array.isArray(triggerItems);
342
+ },
343
+ { message: 'Must be object with single key pointing to array' },
344
+ )
345
+ .superRefine((value, ctx) => {
346
+ const triggerName = Object.keys(value)[0];
347
+ const triggerItems = value[triggerName];
348
+
349
+ if (!Array.isArray(triggerItems)) {
350
+ ctx.addIssue({
351
+ code: 'custom',
352
+ message: `Trigger "${triggerName}" must be an array of items`,
353
+ });
354
+ return;
355
+ }
356
+
357
+ // Check required fields in the array
358
+ const hasInput = triggerItems.some((item) => 'input' in item);
359
+ const hasRouteOrAction = triggerItems.some((item) => 'route' in item || 'action' in item);
360
+
361
+ if (!hasInput) {
362
+ ctx.addIssue({
363
+ code: 'custom',
364
+ message: `Trigger "${triggerName}" must have an input field`,
365
+ });
366
+ }
367
+
368
+ if (!hasRouteOrAction) {
369
+ ctx.addIssue({
370
+ code: 'custom',
371
+ message: `Trigger "${triggerName}" must have a route or action field`,
372
+ });
373
+ }
374
+ }),
375
+ // Format 2b: Object with direct fields (like analyst.agent.yaml)
376
+ z
377
+ .object({})
378
+ .passthrough()
379
+ .refine(
380
+ (value) => {
381
+ const keys = Object.keys(value);
382
+ if (keys.length !== 1) return false;
383
+ const triggerFields = value[keys[0]];
384
+ return !Array.isArray(triggerFields) && typeof triggerFields === 'object';
385
+ },
386
+ { message: 'Must be object with single key pointing to object' },
387
+ )
388
+ .superRefine((value, ctx) => {
389
+ const triggerName = Object.keys(value)[0];
390
+ const triggerFields = value[triggerName];
391
+
392
+ // Check required fields
393
+ if (!triggerFields.input || typeof triggerFields.input !== 'string') {
394
+ ctx.addIssue({
395
+ code: 'custom',
396
+ message: `Trigger "${triggerName}" must have an input field`,
397
+ });
398
+ }
399
+
400
+ if (!triggerFields.route && !triggerFields.action) {
401
+ ctx.addIssue({
402
+ code: 'custom',
403
+ message: `Trigger "${triggerName}" must have a route or action field`,
404
+ });
405
+ }
406
+ }),
407
+ ]),
408
+ )
409
+ .min(1, { message: 'agent.menu[].triggers must have at least one trigger' }),
410
+ discussion: z.boolean().optional(),
411
+ })
412
+ .strict()
413
+ .superRefine((value, ctx) => {
414
+ // Check for duplicate trigger names
415
+ const seenTriggers = new Set();
416
+ for (const [index, triggerItem] of value.triggers.entries()) {
417
+ let triggerName = null;
418
+
419
+ // Extract trigger name from either format
420
+ if (triggerItem.trigger) {
421
+ // Format 1
422
+ triggerName = triggerItem.trigger;
423
+ } else {
424
+ // Format 2
425
+ const keys = Object.keys(triggerItem);
426
+ if (keys.length === 1) {
427
+ triggerName = keys[0];
428
+ }
429
+ }
430
+
431
+ if (triggerName) {
432
+ if (seenTriggers.has(triggerName)) {
433
+ ctx.addIssue({
434
+ code: 'custom',
435
+ path: ['agent', 'menu', 'triggers', index],
436
+ message: `Trigger name "${triggerName}" is duplicated`,
437
+ });
438
+ }
439
+ seenTriggers.add(triggerName);
440
+
441
+ // Validate trigger name format
442
+ if (!TRIGGER_PATTERN.test(triggerName)) {
443
+ ctx.addIssue({
444
+ code: 'custom',
445
+ path: ['agent', 'menu', 'triggers', index],
446
+ message: `Trigger name "${triggerName}" must be kebab-case (lowercase words separated by hyphen)`,
447
+ });
448
+ }
449
+ }
450
+ }
451
+ });
452
+
453
+ return z.union([legacyMenuItemSchema, multiMenuItemSchema]);
454
+ }
455
+
456
+ /**
457
+ * Derive the expected module slug from a file path residing under src/<module>/agents/.
458
+ * @param {string} filePath Absolute or relative agent path.
459
+ * @returns {string|null} Module slug if identifiable, otherwise null.
460
+ */
461
+ function deriveModuleFromPath(filePath) {
462
+ assert(filePath, 'validateAgentFile expects filePath to be provided');
463
+ assert(typeof filePath === 'string', 'validateAgentFile expects filePath to be a string');
464
+ assert(filePath.startsWith('src/'), 'validateAgentFile expects filePath to start with "src/"');
465
+
466
+ const marker = 'src/';
467
+ if (!filePath.startsWith(marker)) {
468
+ return null;
469
+ }
470
+
471
+ const remainder = filePath.slice(marker.length);
472
+ const slashIndex = remainder.indexOf('/');
473
+ return slashIndex === -1 ? null : remainder.slice(0, slashIndex);
474
+ }
475
+
476
+ function normalizeModuleOption(moduleOption) {
477
+ if (typeof moduleOption !== 'string') {
478
+ return null;
479
+ }
480
+
481
+ const trimmed = moduleOption.trim();
482
+ return trimmed.length > 0 ? trimmed : null;
483
+ }
484
+
485
+ // Primitive validators -----------------------------------------------------
486
+
487
+ function createNonEmptyString(label) {
488
+ return z.string().refine((value) => value.trim().length > 0, {
489
+ message: `${label} must be a non-empty string`,
490
+ });
491
+ }