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,460 @@
1
+ /**
2
+ * VisualTestBuilder Component
3
+ *
4
+ * Main interface for building tests visually without writing code.
5
+ * Designed for non-programmers to create comprehensive tests through
6
+ * a guided, step-by-step process.
7
+ *
8
+ * Features:
9
+ * - Wizard-based test creation flow
10
+ * - Code generation from visual inputs
11
+ * - Live preview of generated test code
12
+ * - Test file saving
13
+ * - Integration with AI Test Generator
14
+ * - Dark/light theme support
15
+ * - "Explain like I'm 5" guidance
16
+ *
17
+ * @module renderer/components/test-center/VisualTestBuilder
18
+ */
19
+
20
+ import React, { useState, useCallback } from 'react';
21
+ import TestStepWizard, { TestConfiguration } from './TestStepWizard';
22
+
23
+ /**
24
+ * Test generation result
25
+ */
26
+ export interface TestGenerationResult {
27
+ /**
28
+ * Generated test code
29
+ */
30
+ code: string;
31
+
32
+ /**
33
+ * Generated file path
34
+ */
35
+ filePath: string;
36
+
37
+ /**
38
+ * Generation timestamp
39
+ */
40
+ timestamp: Date;
41
+
42
+ /**
43
+ * Test configuration used
44
+ */
45
+ config: TestConfiguration;
46
+ }
47
+
48
+ /**
49
+ * Props for VisualTestBuilder component
50
+ */
51
+ export interface VisualTestBuilderProps {
52
+ /**
53
+ * Callback when test is successfully created
54
+ */
55
+ onTestCreated?: (result: TestGenerationResult) => void;
56
+
57
+ /**
58
+ * Callback when builder is closed
59
+ */
60
+ onClose?: () => void;
61
+
62
+ /**
63
+ * Custom CSS class name
64
+ */
65
+ className?: string;
66
+ }
67
+
68
+ /**
69
+ * Generate test code from configuration
70
+ * This is a template-based generator that creates valid test files
71
+ * without requiring AI (AI Test Generator can enhance this later)
72
+ */
73
+ const generateTestCode = (config: TestConfiguration): string => {
74
+ const { testType, framework, targetName, targetPath, scenarios, assertions } = config;
75
+
76
+ // Generate imports
77
+ let imports = '';
78
+ if (framework === 'jest') {
79
+ imports = `import { describe, test, expect } from '@jest/globals';\n`;
80
+ } else if (framework === 'mocha') {
81
+ imports = `import { describe, it } from 'mocha';\nimport { expect } from 'chai';\n`;
82
+ } else if (framework === 'vitest') {
83
+ imports = `import { describe, test, expect } from 'vitest';\n`;
84
+ }
85
+
86
+ // Add import for target
87
+ const importPath = targetPath.replace(/\.(ts|js)x?$/, '');
88
+ if (testType === 'function') {
89
+ imports += `import { ${targetName} } from '../${importPath}';\n`;
90
+ } else if (testType === 'class') {
91
+ imports += `import { ${targetName} } from '../${importPath}';\n`;
92
+ } else if (testType === 'component') {
93
+ imports += `import React from 'react';\n`;
94
+ imports += `import { render, screen } from '@testing-library/react';\n`;
95
+ imports += `import { ${targetName} } from '../${importPath}';\n`;
96
+ } else if (testType === 'workflow') {
97
+ imports += `import { ${targetName} } from '../${importPath}';\n`;
98
+ }
99
+
100
+ // Generate test suite
101
+ let testSuite = `\ndescribe('${targetName}', () => {\n`;
102
+
103
+ // Generate tests from scenarios
104
+ scenarios.forEach((scenario, index) => {
105
+ const testName = scenario.description || `${scenario.type} test ${index + 1}`;
106
+ const testFunction = framework === 'mocha' ? 'it' : 'test';
107
+
108
+ testSuite += ` ${testFunction}('${testName}', () => {\n`;
109
+
110
+ // Generate test body based on test type
111
+ if (testType === 'function') {
112
+ // Function test
113
+ testSuite += ` // TODO: Set up test inputs\n`;
114
+ testSuite += ` const input = /* your input value */;\n`;
115
+ testSuite += `\n`;
116
+ testSuite += ` // Execute function\n`;
117
+ testSuite += ` const result = ${targetName}(input);\n`;
118
+ testSuite += `\n`;
119
+ testSuite += ` // Assertions\n`;
120
+ assertions.forEach((assertion) => {
121
+ testSuite += generateAssertion(assertion, 'result');
122
+ });
123
+ } else if (testType === 'class') {
124
+ // Class test
125
+ testSuite += ` // Create instance\n`;
126
+ testSuite += ` const instance = new ${targetName}();\n`;
127
+ testSuite += `\n`;
128
+ testSuite += ` // TODO: Call methods and verify behavior\n`;
129
+ testSuite += ` // instance.someMethod();\n`;
130
+ testSuite += `\n`;
131
+ testSuite += ` // Assertions\n`;
132
+ assertions.forEach((assertion) => {
133
+ testSuite += generateAssertion(assertion, 'instance');
134
+ });
135
+ } else if (testType === 'component') {
136
+ // Component test
137
+ testSuite += ` // Render component\n`;
138
+ testSuite += ` render(<${targetName} />);\n`;
139
+ testSuite += `\n`;
140
+ testSuite += ` // Assertions\n`;
141
+ assertions.forEach((assertion) => {
142
+ if (assertion.type === 'contains') {
143
+ testSuite += ` expect(screen.getByText('${assertion.value}')).toBeInTheDocument();\n`;
144
+ } else if (assertion.type === 'truthy') {
145
+ testSuite += ` expect(screen.getByRole('button')).toBeTruthy();\n`;
146
+ } else {
147
+ testSuite += ` // TODO: Add assertion for ${assertion.type}\n`;
148
+ }
149
+ });
150
+ } else if (testType === 'workflow') {
151
+ // Workflow step test
152
+ testSuite += ` // Set up workflow context\n`;
153
+ testSuite += ` const context = { /* workflow context */ };\n`;
154
+ testSuite += `\n`;
155
+ testSuite += ` // Execute workflow step\n`;
156
+ testSuite += ` const result = await ${targetName}(context);\n`;
157
+ testSuite += `\n`;
158
+ testSuite += ` // Assertions\n`;
159
+ assertions.forEach((assertion) => {
160
+ testSuite += generateAssertion(assertion, 'result');
161
+ });
162
+ }
163
+
164
+ testSuite += ` });\n\n`;
165
+ });
166
+
167
+ testSuite += `});\n`;
168
+
169
+ // Add helpful comments at the top
170
+ const header = `/**
171
+ * Test Suite: ${targetName}
172
+ *
173
+ * This test file was generated by BMAD Studio's Visual Test Builder.
174
+ * It includes ${scenarios.length} test scenario(s) with ${assertions.length} assertion(s).
175
+ *
176
+ * ⚠️ IMPORTANT: This is a template. You may need to:
177
+ * - Fill in actual input values
178
+ * - Adjust assertions to match your code's behavior
179
+ * - Add setup/teardown code if needed
180
+ *
181
+ * Generated: ${new Date().toISOString()}
182
+ */
183
+
184
+ `;
185
+
186
+ return header + imports + testSuite;
187
+ };
188
+
189
+ /**
190
+ * Generate assertion code based on assertion type
191
+ */
192
+ const generateAssertion = (
193
+ assertion: TestConfiguration['assertions'][0],
194
+ variableName: string
195
+ ): string => {
196
+ const { type, value, description } = assertion;
197
+ const comment = description ? `// ${description}\n ` : '';
198
+
199
+ switch (type) {
200
+ case 'equals':
201
+ return `${comment}expect(${variableName}).toBe(${JSON.stringify(value)});\n`;
202
+ case 'contains':
203
+ return `${comment}expect(${variableName}).toContain(${JSON.stringify(value)});\n`;
204
+ case 'throws':
205
+ return `${comment}expect(() => ${variableName}).toThrow();\n`;
206
+ case 'truthy':
207
+ return `${comment}expect(${variableName}).toBeTruthy();\n`;
208
+ case 'falsy':
209
+ return `${comment}expect(${variableName}).toBeFalsy();\n`;
210
+ case 'greater-than':
211
+ return `${comment}expect(${variableName}).toBeGreaterThan(${value});\n`;
212
+ case 'less-than':
213
+ return `${comment}expect(${variableName}).toBeLessThan(${value});\n`;
214
+ default:
215
+ return `${comment}// TODO: Add assertion for ${type}\n`;
216
+ }
217
+ };
218
+
219
+ /**
220
+ * VisualTestBuilder Component
221
+ *
222
+ * Provides a no-code interface for creating tests through a guided wizard.
223
+ * Generates production-quality test files that can be run with Jest/Mocha/Vitest.
224
+ *
225
+ * @example
226
+ * ```tsx
227
+ * <VisualTestBuilder
228
+ * onTestCreated={(result) => console.log('Test created:', result)}
229
+ * onClose={() => console.log('Builder closed')}
230
+ * />
231
+ * ```
232
+ */
233
+ export const VisualTestBuilder: React.FC<VisualTestBuilderProps> = ({
234
+ onTestCreated,
235
+ onClose,
236
+ className = '',
237
+ }) => {
238
+ const [view, setView] = useState<'wizard' | 'preview'>('wizard');
239
+ const [generatedResult, setGeneratedResult] = useState<TestGenerationResult | null>(null);
240
+ const [isSaving, setIsSaving] = useState(false);
241
+
242
+ /**
243
+ * Handle wizard completion - generate test code
244
+ */
245
+ const handleWizardComplete = useCallback((config: TestConfiguration) => {
246
+ try {
247
+ // Generate test code from configuration
248
+ const code = generateTestCode(config);
249
+
250
+ // Create result
251
+ const result: TestGenerationResult = {
252
+ code,
253
+ filePath: config.outputPath,
254
+ timestamp: new Date(),
255
+ config,
256
+ };
257
+
258
+ setGeneratedResult(result);
259
+ setView('preview');
260
+ } catch (error) {
261
+ console.error('Failed to generate test code:', error);
262
+ alert('Failed to generate test code. Please check your configuration.');
263
+ }
264
+ }, []);
265
+
266
+ /**
267
+ * Save generated test file
268
+ */
269
+ const handleSaveTest = useCallback(async () => {
270
+ if (!generatedResult) return;
271
+
272
+ setIsSaving(true);
273
+ try {
274
+ // TODO: Integrate with Electron IPC to save file
275
+ // For now, simulate save with delay
276
+ await new Promise((resolve) => setTimeout(resolve, 1000));
277
+
278
+ // In production, use:
279
+ // await window.electron.file.write({
280
+ // path: generatedResult.filePath,
281
+ // content: generatedResult.code,
282
+ // });
283
+
284
+ console.log('Test file saved:', generatedResult.filePath);
285
+ onTestCreated?.(generatedResult);
286
+ onClose?.();
287
+ } catch (error) {
288
+ console.error('Failed to save test file:', error);
289
+ alert('Failed to save test file. Please try again.');
290
+ } finally {
291
+ setIsSaving(false);
292
+ }
293
+ }, [generatedResult, onTestCreated, onClose]);
294
+
295
+ /**
296
+ * Go back to wizard
297
+ */
298
+ const handleBackToWizard = useCallback(() => {
299
+ setView('wizard');
300
+ }, []);
301
+
302
+ /**
303
+ * Cancel and close
304
+ */
305
+ const handleCancel = useCallback(() => {
306
+ if (confirm('Are you sure you want to cancel? Your progress will be lost.')) {
307
+ onClose?.();
308
+ }
309
+ }, [onClose]);
310
+
311
+ return (
312
+ <div className={`flex flex-col h-full bg-white dark:bg-gray-900 ${className}`}>
313
+ {view === 'wizard' ? (
314
+ <TestStepWizard
315
+ onComplete={handleWizardComplete}
316
+ onCancel={handleCancel}
317
+ />
318
+ ) : (
319
+ <>
320
+ {/* Preview Header */}
321
+ <div className="flex-none border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 px-6 py-4">
322
+ <div className="max-w-5xl mx-auto">
323
+ <div className="flex items-center justify-between">
324
+ <div>
325
+ <h2 className="text-xl font-bold text-gray-900 dark:text-white mb-1">
326
+ Preview Generated Test
327
+ </h2>
328
+ <p className="text-sm text-gray-600 dark:text-gray-400">
329
+ Review your test code before saving
330
+ </p>
331
+ </div>
332
+ <button
333
+ onClick={handleBackToWizard}
334
+ className="px-4 py-2 text-sm text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors"
335
+ aria-label="Back to wizard"
336
+ >
337
+ ← Back to Wizard
338
+ </button>
339
+ </div>
340
+ </div>
341
+ </div>
342
+
343
+ {/* Preview Content */}
344
+ <div className="flex-1 overflow-y-auto px-6 py-6">
345
+ <div className="max-w-5xl mx-auto space-y-6">
346
+ {/* Success message */}
347
+ <div className="bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-4">
348
+ <div className="flex items-start gap-3">
349
+ <div className="text-2xl">✓</div>
350
+ <div className="flex-1">
351
+ <h3 className="text-sm font-semibold text-green-900 dark:text-green-100 mb-1">
352
+ Test Successfully Generated!
353
+ </h3>
354
+ <p className="text-xs text-green-800 dark:text-green-200 mb-2">
355
+ Your test file is ready. Review the code below and click "Save Test File" to create it.
356
+ </p>
357
+ <div className="text-xs text-green-800 dark:text-green-200">
358
+ <strong>File:</strong>{' '}
359
+ <code className="bg-green-100 dark:bg-green-900/40 px-2 py-1 rounded font-mono">
360
+ {generatedResult?.filePath}
361
+ </code>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ </div>
366
+
367
+ {/* Test info */}
368
+ {generatedResult && (
369
+ <div className="grid grid-cols-3 gap-4">
370
+ <div className="bg-gray-50 dark:bg-gray-800 rounded-lg p-4">
371
+ <div className="text-xs text-gray-600 dark:text-gray-400 mb-1">Test Type</div>
372
+ <div className="text-sm font-semibold text-gray-900 dark:text-white">
373
+ {generatedResult.config.testType}
374
+ </div>
375
+ </div>
376
+ <div className="bg-gray-50 dark:bg-gray-800 rounded-lg p-4">
377
+ <div className="text-xs text-gray-600 dark:text-gray-400 mb-1">Framework</div>
378
+ <div className="text-sm font-semibold text-gray-900 dark:text-white">
379
+ {generatedResult.config.framework}
380
+ </div>
381
+ </div>
382
+ <div className="bg-gray-50 dark:bg-gray-800 rounded-lg p-4">
383
+ <div className="text-xs text-gray-600 dark:text-gray-400 mb-1">Scenarios</div>
384
+ <div className="text-sm font-semibold text-gray-900 dark:text-white">
385
+ {generatedResult.config.scenarios.length}
386
+ </div>
387
+ </div>
388
+ </div>
389
+ )}
390
+
391
+ {/* Code preview */}
392
+ <div>
393
+ <div className="flex items-center justify-between mb-2">
394
+ <h3 className="text-sm font-semibold text-gray-900 dark:text-white">
395
+ Generated Code
396
+ </h3>
397
+ <button
398
+ onClick={() => {
399
+ if (generatedResult) {
400
+ navigator.clipboard.writeText(generatedResult.code);
401
+ alert('Code copied to clipboard!');
402
+ }
403
+ }}
404
+ className="text-xs text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
405
+ >
406
+ 📋 Copy to Clipboard
407
+ </button>
408
+ </div>
409
+ <div className="bg-gray-900 rounded-lg overflow-hidden">
410
+ <pre className="p-4 overflow-x-auto text-xs text-gray-100 font-mono">
411
+ <code>{generatedResult?.code}</code>
412
+ </pre>
413
+ </div>
414
+ </div>
415
+
416
+ {/* Important notes */}
417
+ <div className="bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4">
418
+ <h4 className="text-sm font-semibold text-yellow-900 dark:text-yellow-100 mb-2">
419
+ ⚠️ Before You Save
420
+ </h4>
421
+ <ul className="text-xs text-yellow-800 dark:text-yellow-200 space-y-1 list-disc list-inside">
422
+ <li>This is a template - you may need to add actual test values</li>
423
+ <li>Review the generated assertions to ensure they match your expectations</li>
424
+ <li>Add any necessary setup/teardown code (beforeEach, afterEach)</li>
425
+ <li>Test the file after saving to ensure it works correctly</li>
426
+ </ul>
427
+ </div>
428
+ </div>
429
+ </div>
430
+
431
+ {/* Preview Footer */}
432
+ <div className="flex-none border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 px-6 py-4">
433
+ <div className="max-w-5xl mx-auto flex items-center justify-between">
434
+ <button
435
+ onClick={handleCancel}
436
+ className="px-4 py-2 text-sm text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors"
437
+ disabled={isSaving}
438
+ >
439
+ ✗ Cancel
440
+ </button>
441
+
442
+ <button
443
+ onClick={handleSaveTest}
444
+ disabled={isSaving}
445
+ className="px-6 py-2 text-sm bg-green-600 hover:bg-green-700 text-white rounded transition-colors disabled:opacity-50 disabled:cursor-not-allowed font-medium"
446
+ aria-label="Save test file"
447
+ >
448
+ {isSaving ? '💾 Saving...' : '💾 Save Test File'}
449
+ </button>
450
+ </div>
451
+ </div>
452
+ </>
453
+ )}
454
+ </div>
455
+ );
456
+ };
457
+
458
+ VisualTestBuilder.displayName = 'VisualTestBuilder';
459
+
460
+ export default VisualTestBuilder;
@@ -0,0 +1,200 @@
1
+ /**
2
+ * DependencyEdge Component
3
+ *
4
+ * Custom edge component for React Flow representing dependencies between workflow steps.
5
+ * Displays animated connection lines with visual indicators.
6
+ *
7
+ * Features:
8
+ * - Animated dependency visualization
9
+ * - Directional arrows
10
+ * - Interactive hover states
11
+ * - Delete functionality
12
+ * - Dark/light theme support
13
+ * - Accessibility support
14
+ *
15
+ * @module renderer/components/workflow/DependencyEdge
16
+ */
17
+
18
+ import React, { memo } from 'react';
19
+ import {
20
+ EdgeProps,
21
+ getBezierPath,
22
+ EdgeLabelRenderer,
23
+ BaseEdge,
24
+ useReactFlow,
25
+ } from 'reactflow';
26
+
27
+ /**
28
+ * Custom data for dependency edges
29
+ */
30
+ export interface DependencyEdgeData {
31
+ /**
32
+ * Optional label for the dependency
33
+ */
34
+ label?: string;
35
+
36
+ /**
37
+ * Whether this dependency is conditional
38
+ */
39
+ conditional?: boolean;
40
+
41
+ /**
42
+ * Custom color for the edge
43
+ */
44
+ color?: string;
45
+ }
46
+
47
+ /**
48
+ * DependencyEdge Component
49
+ *
50
+ * Custom React Flow edge for workflow step dependencies.
51
+ * Renders a smooth bezier curve with directional indicators.
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * // Used internally by React Flow - don't instantiate directly
56
+ * const edgeTypes = {
57
+ * dependency: DependencyEdge
58
+ * };
59
+ * ```
60
+ */
61
+ const DependencyEdge: React.FC<EdgeProps<DependencyEdgeData>> = memo(
62
+ ({
63
+ id,
64
+ sourceX,
65
+ sourceY,
66
+ targetX,
67
+ targetY,
68
+ sourcePosition,
69
+ targetPosition,
70
+ style = {},
71
+ markerEnd,
72
+ data,
73
+ selected,
74
+ }) => {
75
+ const { setEdges } = useReactFlow();
76
+
77
+ // Calculate the path
78
+ const [edgePath, labelX, labelY] = getBezierPath({
79
+ sourceX,
80
+ sourceY,
81
+ sourcePosition,
82
+ targetX,
83
+ targetY,
84
+ targetPosition,
85
+ });
86
+
87
+ /**
88
+ * Handle edge deletion
89
+ */
90
+ const onEdgeClick = (event: React.MouseEvent) => {
91
+ event.stopPropagation();
92
+ setEdges((edges) => edges.filter((edge) => edge.id !== id));
93
+ };
94
+
95
+ // Determine edge color based on type and state
96
+ const edgeColor = data?.color || (data?.conditional ? '#f97316' : '#6b7280');
97
+ const strokeWidth = selected ? 3 : 2;
98
+ const opacity = selected ? 1 : 0.7;
99
+
100
+ return (
101
+ <>
102
+ {/* Main Edge Path */}
103
+ <BaseEdge
104
+ id={id}
105
+ path={edgePath}
106
+ markerEnd={markerEnd}
107
+ style={{
108
+ ...style,
109
+ stroke: edgeColor,
110
+ strokeWidth,
111
+ opacity,
112
+ }}
113
+ />
114
+
115
+ {/* Edge Label with Delete Button */}
116
+ <EdgeLabelRenderer>
117
+ <div
118
+ style={{
119
+ position: 'absolute',
120
+ transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`,
121
+ pointerEvents: 'all',
122
+ }}
123
+ className="nodrag nopan"
124
+ >
125
+ <div
126
+ className={`
127
+ group flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium
128
+ bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600
129
+ shadow-sm transition-all
130
+ ${selected ? 'ring-2 ring-blue-500' : ''}
131
+ hover:shadow-md
132
+ `}
133
+ role="group"
134
+ aria-label={`Dependency edge${data?.label ? `: ${data.label}` : ''}`}
135
+ >
136
+ {/* Edge Label */}
137
+ {data?.label && (
138
+ <span className="text-gray-700 dark:text-gray-300">
139
+ {data.label}
140
+ </span>
141
+ )}
142
+
143
+ {/* Conditional Indicator */}
144
+ {data?.conditional && (
145
+ <span
146
+ className="text-orange-500"
147
+ title="Conditional dependency"
148
+ aria-label="Conditional dependency"
149
+ >
150
+ ?
151
+ </span>
152
+ )}
153
+
154
+ {/* Delete Button (visible on hover) */}
155
+ <button
156
+ onClick={onEdgeClick}
157
+ className="
158
+ opacity-0 group-hover:opacity-100
159
+ w-4 h-4 flex items-center justify-center
160
+ rounded-full bg-red-100 dark:bg-red-900/30
161
+ hover:bg-red-200 dark:hover:bg-red-900/50
162
+ text-red-600 dark:text-red-400
163
+ transition-all
164
+ "
165
+ aria-label="Delete connection"
166
+ title="Delete connection"
167
+ >
168
+ <svg
169
+ className="w-3 h-3"
170
+ fill="none"
171
+ stroke="currentColor"
172
+ viewBox="0 0 24 24"
173
+ aria-hidden="true"
174
+ >
175
+ <path
176
+ strokeLinecap="round"
177
+ strokeLinejoin="round"
178
+ strokeWidth={2}
179
+ d="M6 18L18 6M6 6l12 12"
180
+ />
181
+ </svg>
182
+ </button>
183
+ </div>
184
+ </div>
185
+ </EdgeLabelRenderer>
186
+
187
+ {/* Animated Flow Indicator */}
188
+ {selected && (
189
+ <circle r="4" fill={edgeColor}>
190
+ <animateMotion dur="2s" repeatCount="indefinite" path={edgePath} />
191
+ </circle>
192
+ )}
193
+ </>
194
+ );
195
+ }
196
+ );
197
+
198
+ DependencyEdge.displayName = 'DependencyEdge';
199
+
200
+ export default DependencyEdge;