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,896 @@
1
+ /**
2
+ * MigrationWizard Component
3
+ *
4
+ * Multi-step wizard for migrating legacy BMAD projects to the new Electron app format.
5
+ * Inspired by the interactive wizard pattern from tools/cli/lib/prompts.js,
6
+ * translated into a visual React component.
7
+ *
8
+ * Features:
9
+ * - Step-by-step migration flow with visual progress
10
+ * - Automatic legacy project detection
11
+ * - Backup creation before migration
12
+ * - Real-time migration progress tracking
13
+ * - Detailed migration reports
14
+ * - Rollback capability
15
+ * - Dark/light theme support
16
+ * - Keyboard navigation (Next: Enter, Back: Escape)
17
+ *
18
+ * Steps:
19
+ * 1. Select legacy project directory
20
+ * 2. Review detected legacy content
21
+ * 3. Configure migration options
22
+ * 4. Execute migration with progress tracking
23
+ * 5. Review migration results
24
+ *
25
+ * @module renderer/components/MigrationWizard
26
+ */
27
+
28
+ import React, { useState, useCallback, useEffect } from 'react';
29
+
30
+ /**
31
+ * Wizard step configuration
32
+ */
33
+ interface WizardStep {
34
+ id: string;
35
+ title: string;
36
+ description: string;
37
+ completed: boolean;
38
+ }
39
+
40
+ /**
41
+ * Migration wizard props
42
+ */
43
+ interface MigrationWizardProps {
44
+ /**
45
+ * Whether the wizard is open
46
+ */
47
+ isOpen: boolean;
48
+
49
+ /**
50
+ * Callback when wizard is closed
51
+ */
52
+ onClose: () => void;
53
+
54
+ /**
55
+ * Callback when migration is completed successfully
56
+ */
57
+ onComplete?: (result: MigrationResult) => void;
58
+ }
59
+
60
+ /**
61
+ * Legacy project info (from legacy-migrator.ts)
62
+ */
63
+ interface LegacyProjectInfo {
64
+ isLegacy: boolean;
65
+ version?: string;
66
+ projectPath: string;
67
+ directories: {
68
+ agents?: string;
69
+ workflows?: string;
70
+ config?: string;
71
+ steps?: string;
72
+ };
73
+ counts: {
74
+ agents: number;
75
+ workflows: number;
76
+ steps: number;
77
+ hasConfig: boolean;
78
+ };
79
+ issues: string[];
80
+ }
81
+
82
+ /**
83
+ * Migration step (from legacy-migrator.ts)
84
+ */
85
+ interface MigrationStep {
86
+ id: string;
87
+ name: string;
88
+ description: string;
89
+ status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
90
+ progress: number;
91
+ error?: string;
92
+ }
93
+
94
+ /**
95
+ * Migration result (from legacy-migrator.ts)
96
+ */
97
+ interface MigrationResult {
98
+ success: boolean;
99
+ steps: MigrationStep[];
100
+ migrated: {
101
+ agents: number;
102
+ workflows: number;
103
+ config: boolean;
104
+ };
105
+ backupPath?: string;
106
+ error?: string;
107
+ completedAt: string;
108
+ }
109
+
110
+ /**
111
+ * MigrationWizard Component
112
+ *
113
+ * Guides users through migrating legacy BMAD projects to the new format.
114
+ */
115
+ export const MigrationWizard: React.FC<MigrationWizardProps> = ({
116
+ isOpen,
117
+ onClose,
118
+ onComplete,
119
+ }) => {
120
+ // Wizard state
121
+ const [currentStepIndex, setCurrentStepIndex] = useState(0);
122
+ const [projectPath, setProjectPath] = useState('');
123
+ const [legacyInfo, setLegacyInfo] = useState<LegacyProjectInfo | null>(null);
124
+ const [isDetecting, setIsDetecting] = useState(false);
125
+ const [createBackup, setCreateBackup] = useState(true);
126
+ const [preserveOriginal, setPreserveOriginal] = useState(true);
127
+ const [skipSteps, setSkipSteps] = useState<string[]>([]);
128
+ const [migrationSteps, setMigrationSteps] = useState<MigrationStep[]>([]);
129
+ const [isMigrating, setIsMigrating] = useState(false);
130
+ const [migrationResult, setMigrationResult] = useState<MigrationResult | null>(null);
131
+ const [error, setError] = useState<string | null>(null);
132
+
133
+ // Wizard steps definition
134
+ const wizardSteps: WizardStep[] = [
135
+ {
136
+ id: 'select-project',
137
+ title: 'Select Legacy Project',
138
+ description: 'Choose the directory containing your legacy BMAD project',
139
+ completed: currentStepIndex > 0,
140
+ },
141
+ {
142
+ id: 'review-detection',
143
+ title: 'Review Project',
144
+ description: 'Review what we found in your legacy project',
145
+ completed: currentStepIndex > 1,
146
+ },
147
+ {
148
+ id: 'configure',
149
+ title: 'Configure Migration',
150
+ description: 'Choose migration options and preferences',
151
+ completed: currentStepIndex > 2,
152
+ },
153
+ {
154
+ id: 'migrate',
155
+ title: 'Migrate Project',
156
+ description: 'Execute the migration process',
157
+ completed: currentStepIndex > 3,
158
+ },
159
+ {
160
+ id: 'results',
161
+ title: 'Migration Complete',
162
+ description: 'Review migration results and next steps',
163
+ completed: currentStepIndex > 4,
164
+ },
165
+ ];
166
+
167
+ const currentStep = wizardSteps[currentStepIndex];
168
+
169
+ /**
170
+ * Handle project path selection
171
+ */
172
+ const handleSelectDirectory = useCallback(async () => {
173
+ // TODO: Integrate with Electron's file dialog via IPC
174
+ // For now, using mock data for demonstration
175
+ const mockPath = '/path/to/legacy/project';
176
+ setProjectPath(mockPath);
177
+
178
+ // Auto-detect after selection
179
+ if (mockPath) {
180
+ await detectLegacyProject(mockPath);
181
+ }
182
+ }, []);
183
+
184
+ /**
185
+ * Detect legacy project at the given path
186
+ */
187
+ const detectLegacyProject = useCallback(async (path: string) => {
188
+ setIsDetecting(true);
189
+ setError(null);
190
+
191
+ try {
192
+ // TODO: Call Electron IPC to detect legacy project
193
+ // const result = await window.electron.legacyMigrator.detect(path);
194
+
195
+ // Mock detection result for demonstration
196
+ const mockInfo: LegacyProjectInfo = {
197
+ isLegacy: true,
198
+ version: '1.x',
199
+ projectPath: path,
200
+ directories: {
201
+ agents: `${path}/.bmad/agents`,
202
+ workflows: `${path}/.bmad/workflows`,
203
+ config: `${path}/.bmad`,
204
+ },
205
+ counts: {
206
+ agents: 8,
207
+ workflows: 12,
208
+ steps: 45,
209
+ hasConfig: true,
210
+ },
211
+ issues: [],
212
+ };
213
+
214
+ setLegacyInfo(mockInfo);
215
+
216
+ if (!mockInfo.isLegacy) {
217
+ setError('No legacy BMAD project detected at this location');
218
+ }
219
+ } catch (err) {
220
+ setError(err instanceof Error ? err.message : 'Failed to detect legacy project');
221
+ } finally {
222
+ setIsDetecting(false);
223
+ }
224
+ }, []);
225
+
226
+ /**
227
+ * Start migration process
228
+ */
229
+ const startMigration = useCallback(async () => {
230
+ if (!legacyInfo) return;
231
+
232
+ setIsMigrating(true);
233
+ setError(null);
234
+ setMigrationSteps([]);
235
+
236
+ try {
237
+ // TODO: Call Electron IPC to start migration
238
+ // Set up event listeners for progress updates
239
+ // window.electron.legacyMigrator.on('step-start', handleStepStart);
240
+ // window.electron.legacyMigrator.on('step-progress', handleStepProgress);
241
+ // window.electron.legacyMigrator.on('step-complete', handleStepComplete);
242
+
243
+ // const result = await window.electron.legacyMigrator.migrate({
244
+ // sourcePath: projectPath,
245
+ // createBackup,
246
+ // preserveOriginal,
247
+ // skipSteps,
248
+ // });
249
+
250
+ // Mock migration result for demonstration
251
+ const mockResult: MigrationResult = {
252
+ success: true,
253
+ steps: [
254
+ {
255
+ id: 'detect',
256
+ name: 'Detect Legacy Project',
257
+ description: 'Scanning project for legacy structure',
258
+ status: 'completed',
259
+ progress: 100,
260
+ },
261
+ {
262
+ id: 'backup',
263
+ name: 'Create Backup',
264
+ description: 'Backing up original project',
265
+ status: 'completed',
266
+ progress: 100,
267
+ },
268
+ {
269
+ id: 'agents',
270
+ name: 'Migrate Agents',
271
+ description: 'Migrating 8 agent files',
272
+ status: 'completed',
273
+ progress: 100,
274
+ },
275
+ {
276
+ id: 'workflows',
277
+ name: 'Migrate Workflows',
278
+ description: 'Migrating 12 workflow files',
279
+ status: 'completed',
280
+ progress: 100,
281
+ },
282
+ {
283
+ id: 'config',
284
+ name: 'Migrate Configuration',
285
+ description: 'Migrating project configuration',
286
+ status: 'completed',
287
+ progress: 100,
288
+ },
289
+ {
290
+ id: 'finalize',
291
+ name: 'Finalize Migration',
292
+ description: 'Completing migration and cleanup',
293
+ status: 'completed',
294
+ progress: 100,
295
+ },
296
+ ],
297
+ migrated: {
298
+ agents: 8,
299
+ workflows: 12,
300
+ config: true,
301
+ },
302
+ backupPath: '/path/to/backup',
303
+ completedAt: new Date().toISOString(),
304
+ };
305
+
306
+ // Simulate progressive updates
307
+ for (let i = 0; i < mockResult.steps.length; i++) {
308
+ await new Promise((resolve) => setTimeout(resolve, 500));
309
+ setMigrationSteps(mockResult.steps.slice(0, i + 1));
310
+ }
311
+
312
+ setMigrationResult(mockResult);
313
+ onComplete?.(mockResult);
314
+ } catch (err) {
315
+ setError(err instanceof Error ? err.message : 'Migration failed');
316
+ setMigrationResult({
317
+ success: false,
318
+ steps: migrationSteps,
319
+ migrated: { agents: 0, workflows: 0, config: false },
320
+ error: err instanceof Error ? err.message : 'Unknown error',
321
+ completedAt: new Date().toISOString(),
322
+ });
323
+ } finally {
324
+ setIsMigrating(false);
325
+ }
326
+ }, [legacyInfo, projectPath, createBackup, preserveOriginal, skipSteps, migrationSteps, onComplete]);
327
+
328
+ /**
329
+ * Navigate to next step
330
+ */
331
+ const handleNext = useCallback(() => {
332
+ if (currentStepIndex === 0 && !legacyInfo?.isLegacy) {
333
+ setError('Please select a valid legacy project first');
334
+ return;
335
+ }
336
+
337
+ if (currentStepIndex === 2) {
338
+ // Move to migration step and start migration
339
+ setCurrentStepIndex(3);
340
+ setTimeout(() => startMigration(), 100);
341
+ } else if (currentStepIndex < wizardSteps.length - 1) {
342
+ setCurrentStepIndex(currentStepIndex + 1);
343
+ setError(null);
344
+ }
345
+ }, [currentStepIndex, legacyInfo, wizardSteps.length, startMigration]);
346
+
347
+ /**
348
+ * Navigate to previous step
349
+ */
350
+ const handleBack = useCallback(() => {
351
+ if (currentStepIndex > 0 && !isMigrating) {
352
+ setCurrentStepIndex(currentStepIndex - 1);
353
+ setError(null);
354
+ }
355
+ }, [currentStepIndex, isMigrating]);
356
+
357
+ /**
358
+ * Close wizard and reset state
359
+ */
360
+ const handleClose = useCallback(() => {
361
+ if (!isMigrating) {
362
+ setCurrentStepIndex(0);
363
+ setProjectPath('');
364
+ setLegacyInfo(null);
365
+ setMigrationSteps([]);
366
+ setMigrationResult(null);
367
+ setError(null);
368
+ onClose();
369
+ }
370
+ }, [isMigrating, onClose]);
371
+
372
+ /**
373
+ * Keyboard navigation
374
+ */
375
+ useEffect(() => {
376
+ if (!isOpen) return;
377
+
378
+ const handleKeyDown = (e: KeyboardEvent) => {
379
+ if (e.key === 'Enter' && !isMigrating) {
380
+ handleNext();
381
+ } else if (e.key === 'Escape' && !isMigrating) {
382
+ if (currentStepIndex === 0) {
383
+ handleClose();
384
+ } else {
385
+ handleBack();
386
+ }
387
+ }
388
+ };
389
+
390
+ window.addEventListener('keydown', handleKeyDown);
391
+ return () => window.removeEventListener('keydown', handleKeyDown);
392
+ }, [isOpen, isMigrating, currentStepIndex, handleNext, handleBack, handleClose]);
393
+
394
+ if (!isOpen) return null;
395
+
396
+ return (
397
+ <div className="fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm">
398
+ <div className="w-full max-w-4xl max-h-[90vh] overflow-y-auto bg-white dark:bg-gray-800 rounded-lg shadow-2xl">
399
+ {/* Header */}
400
+ <div className="sticky top-0 z-10 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-6 py-4">
401
+ <div className="flex items-center justify-between">
402
+ <div>
403
+ <h2 className="text-2xl font-bold text-gray-900 dark:text-white">
404
+ 🔄 Legacy Project Migration
405
+ </h2>
406
+ <p className="text-sm text-gray-600 dark:text-gray-400 mt-1">
407
+ Step {currentStepIndex + 1} of {wizardSteps.length}: {currentStep.title}
408
+ </p>
409
+ </div>
410
+ {!isMigrating && (
411
+ <button
412
+ onClick={handleClose}
413
+ className="text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors"
414
+ aria-label="Close wizard"
415
+ >
416
+ <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
417
+ <path
418
+ strokeLinecap="round"
419
+ strokeLinejoin="round"
420
+ strokeWidth={2}
421
+ d="M6 18L18 6M6 6l12 12"
422
+ />
423
+ </svg>
424
+ </button>
425
+ )}
426
+ </div>
427
+
428
+ {/* Progress bar */}
429
+ <div className="mt-4">
430
+ <div className="flex items-center justify-between text-xs text-gray-600 dark:text-gray-400 mb-2">
431
+ {wizardSteps.map((step, index) => (
432
+ <div
433
+ key={step.id}
434
+ className={`flex items-center ${
435
+ index <= currentStepIndex
436
+ ? 'text-blue-600 dark:text-blue-400 font-medium'
437
+ : ''
438
+ }`}
439
+ >
440
+ <span className={`${index <= currentStepIndex ? 'opacity-100' : 'opacity-50'}`}>
441
+ {step.id === 'select-project' && '📁'}
442
+ {step.id === 'review-detection' && '🔍'}
443
+ {step.id === 'configure' && '⚙️'}
444
+ {step.id === 'migrate' && '⚡'}
445
+ {step.id === 'results' && '✅'}
446
+ </span>
447
+ </div>
448
+ ))}
449
+ </div>
450
+ <div className="w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
451
+ <div
452
+ className="h-full bg-gradient-to-r from-blue-500 to-blue-600 transition-all duration-300 ease-out"
453
+ style={{ width: `${((currentStepIndex + 1) / wizardSteps.length) * 100}%` }}
454
+ />
455
+ </div>
456
+ </div>
457
+ </div>
458
+
459
+ {/* Content */}
460
+ <div className="px-6 py-6">
461
+ {/* Error message */}
462
+ {error && (
463
+ <div className="mb-6 p-4 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg">
464
+ <div className="flex items-start gap-3">
465
+ <span className="text-2xl">⚠️</span>
466
+ <div className="flex-1">
467
+ <h4 className="text-sm font-semibold text-red-800 dark:text-red-200">Error</h4>
468
+ <p className="text-sm text-red-700 dark:text-red-300 mt-1">{error}</p>
469
+ </div>
470
+ </div>
471
+ </div>
472
+ )}
473
+
474
+ {/* Step 1: Select Project */}
475
+ {currentStepIndex === 0 && (
476
+ <div className="space-y-6">
477
+ <div>
478
+ <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
479
+ {currentStep.title}
480
+ </h3>
481
+ <p className="text-sm text-gray-600 dark:text-gray-400">
482
+ {currentStep.description}
483
+ </p>
484
+ </div>
485
+
486
+ <div className="space-y-4">
487
+ <div>
488
+ <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
489
+ Project Directory
490
+ </label>
491
+ <div className="flex gap-3">
492
+ <input
493
+ type="text"
494
+ value={projectPath}
495
+ onChange={(e) => setProjectPath(e.target.value)}
496
+ placeholder="/path/to/legacy/project"
497
+ className="flex-1 px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent"
498
+ />
499
+ <button
500
+ onClick={handleSelectDirectory}
501
+ className="px-6 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"
502
+ >
503
+ Browse...
504
+ </button>
505
+ </div>
506
+ </div>
507
+
508
+ {projectPath && (
509
+ <button
510
+ onClick={() => detectLegacyProject(projectPath)}
511
+ disabled={isDetecting}
512
+ className="w-full px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
513
+ >
514
+ {isDetecting ? 'Detecting...' : 'Detect Legacy Project'}
515
+ </button>
516
+ )}
517
+
518
+ {legacyInfo && !legacyInfo.isLegacy && (
519
+ <div className="p-4 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg">
520
+ <p className="text-sm text-yellow-800 dark:text-yellow-200">
521
+ ⚠️ No legacy BMAD project detected at this location. Please select a different directory.
522
+ </p>
523
+ </div>
524
+ )}
525
+
526
+ {legacyInfo && legacyInfo.isLegacy && (
527
+ <div className="p-4 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg">
528
+ <p className="text-sm text-green-800 dark:text-green-200">
529
+ ✅ Legacy BMAD project detected! Click "Next" to review.
530
+ </p>
531
+ </div>
532
+ )}
533
+ </div>
534
+ </div>
535
+ )}
536
+
537
+ {/* Step 2: Review Detection */}
538
+ {currentStepIndex === 1 && legacyInfo && (
539
+ <div className="space-y-6">
540
+ <div>
541
+ <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
542
+ {currentStep.title}
543
+ </h3>
544
+ <p className="text-sm text-gray-600 dark:text-gray-400">
545
+ {currentStep.description}
546
+ </p>
547
+ </div>
548
+
549
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
550
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
551
+ <div className="flex items-center gap-2 mb-2">
552
+ <span className="text-2xl">👥</span>
553
+ <span className="text-sm font-medium text-gray-700 dark:text-gray-300">Agents</span>
554
+ </div>
555
+ <p className="text-3xl font-bold text-gray-900 dark:text-white">{legacyInfo.counts.agents}</p>
556
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">agent files found</p>
557
+ </div>
558
+
559
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
560
+ <div className="flex items-center gap-2 mb-2">
561
+ <span className="text-2xl">🔄</span>
562
+ <span className="text-sm font-medium text-gray-700 dark:text-gray-300">Workflows</span>
563
+ </div>
564
+ <p className="text-3xl font-bold text-gray-900 dark:text-white">{legacyInfo.counts.workflows}</p>
565
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">workflow files found</p>
566
+ </div>
567
+
568
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
569
+ <div className="flex items-center gap-2 mb-2">
570
+ <span className="text-2xl">📋</span>
571
+ <span className="text-sm font-medium text-gray-700 dark:text-gray-300">Steps</span>
572
+ </div>
573
+ <p className="text-3xl font-bold text-gray-900 dark:text-white">{legacyInfo.counts.steps}</p>
574
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">step definitions found</p>
575
+ </div>
576
+
577
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
578
+ <div className="flex items-center gap-2 mb-2">
579
+ <span className="text-2xl">⚙️</span>
580
+ <span className="text-sm font-medium text-gray-700 dark:text-gray-300">Configuration</span>
581
+ </div>
582
+ <p className="text-3xl font-bold text-gray-900 dark:text-white">
583
+ {legacyInfo.counts.hasConfig ? '✅' : '❌'}
584
+ </p>
585
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">
586
+ {legacyInfo.counts.hasConfig ? 'config file found' : 'no config file'}
587
+ </p>
588
+ </div>
589
+ </div>
590
+
591
+ {legacyInfo.version && (
592
+ <div className="p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
593
+ <p className="text-sm text-blue-800 dark:text-blue-200">
594
+ 📦 Detected version: <span className="font-mono font-semibold">{legacyInfo.version}</span>
595
+ </p>
596
+ </div>
597
+ )}
598
+
599
+ {legacyInfo.issues.length > 0 && (
600
+ <div className="p-4 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg">
601
+ <h4 className="text-sm font-semibold text-yellow-800 dark:text-yellow-200 mb-2">⚠️ Issues Detected</h4>
602
+ <ul className="list-disc list-inside space-y-1">
603
+ {legacyInfo.issues.map((issue, index) => (
604
+ <li key={index} className="text-sm text-yellow-700 dark:text-yellow-300">
605
+ {issue}
606
+ </li>
607
+ ))}
608
+ </ul>
609
+ </div>
610
+ )}
611
+ </div>
612
+ )}
613
+
614
+ {/* Step 3: Configure Migration */}
615
+ {currentStepIndex === 2 && (
616
+ <div className="space-y-6">
617
+ <div>
618
+ <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
619
+ {currentStep.title}
620
+ </h3>
621
+ <p className="text-sm text-gray-600 dark:text-gray-400">
622
+ {currentStep.description}
623
+ </p>
624
+ </div>
625
+
626
+ <div className="space-y-4">
627
+ <label className="flex items-center gap-3 p-4 border border-gray-200 dark:border-gray-700 rounded-lg cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors">
628
+ <input
629
+ type="checkbox"
630
+ checked={createBackup}
631
+ onChange={(e) => setCreateBackup(e.target.checked)}
632
+ className="w-5 h-5 text-blue-600 rounded focus:ring-2 focus:ring-blue-500"
633
+ />
634
+ <div>
635
+ <span className="text-sm font-medium text-gray-900 dark:text-white">
636
+ Create backup before migration
637
+ </span>
638
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">
639
+ Recommended: Creates a full backup of your project before making any changes
640
+ </p>
641
+ </div>
642
+ </label>
643
+
644
+ <label className="flex items-center gap-3 p-4 border border-gray-200 dark:border-gray-700 rounded-lg cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors">
645
+ <input
646
+ type="checkbox"
647
+ checked={preserveOriginal}
648
+ onChange={(e) => setPreserveOriginal(e.target.checked)}
649
+ className="w-5 h-5 text-blue-600 rounded focus:ring-2 focus:ring-blue-500"
650
+ />
651
+ <div>
652
+ <span className="text-sm font-medium text-gray-900 dark:text-white">
653
+ Preserve original files
654
+ </span>
655
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">
656
+ Keep original files in place and create copies in the new location
657
+ </p>
658
+ </div>
659
+ </label>
660
+
661
+ <div className="p-4 border border-gray-200 dark:border-gray-700 rounded-lg">
662
+ <h4 className="text-sm font-medium text-gray-900 dark:text-white mb-3">
663
+ Skip Migration Steps (Optional)
664
+ </h4>
665
+ <div className="space-y-2">
666
+ {['agents', 'workflows', 'config'].map((step) => (
667
+ <label
668
+ key={step}
669
+ className="flex items-center gap-3 cursor-pointer"
670
+ >
671
+ <input
672
+ type="checkbox"
673
+ checked={skipSteps.includes(step)}
674
+ onChange={(e) => {
675
+ if (e.target.checked) {
676
+ setSkipSteps([...skipSteps, step]);
677
+ } else {
678
+ setSkipSteps(skipSteps.filter((s) => s !== step));
679
+ }
680
+ }}
681
+ className="w-4 h-4 text-blue-600 rounded focus:ring-2 focus:ring-blue-500"
682
+ />
683
+ <span className="text-sm text-gray-700 dark:text-gray-300 capitalize">
684
+ Skip {step}
685
+ </span>
686
+ </label>
687
+ ))}
688
+ </div>
689
+ </div>
690
+ </div>
691
+
692
+ <div className="p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
693
+ <p className="text-sm text-blue-800 dark:text-blue-200">
694
+ 💡 <strong>Tip:</strong> We recommend creating a backup and preserving original files for your first migration.
695
+ You can always clean up the originals later once you've verified everything works correctly.
696
+ </p>
697
+ </div>
698
+ </div>
699
+ )}
700
+
701
+ {/* Step 4: Execute Migration */}
702
+ {currentStepIndex === 3 && (
703
+ <div className="space-y-6">
704
+ <div>
705
+ <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
706
+ {currentStep.title}
707
+ </h3>
708
+ <p className="text-sm text-gray-600 dark:text-gray-400">
709
+ {currentStep.description}
710
+ </p>
711
+ </div>
712
+
713
+ {migrationSteps.length === 0 && isMigrating && (
714
+ <div className="flex flex-col items-center justify-center py-12">
715
+ <div className="animate-spin rounded-full h-16 w-16 border-b-2 border-blue-600 mb-4"></div>
716
+ <p className="text-sm text-gray-600 dark:text-gray-400">Initializing migration...</p>
717
+ </div>
718
+ )}
719
+
720
+ {migrationSteps.length > 0 && (
721
+ <div className="space-y-3">
722
+ {migrationSteps.map((step) => (
723
+ <div
724
+ key={step.id}
725
+ className="p-4 border border-gray-200 dark:border-gray-700 rounded-lg"
726
+ >
727
+ <div className="flex items-center justify-between mb-2">
728
+ <div className="flex items-center gap-3">
729
+ <span className="text-2xl">
730
+ {step.status === 'completed' && '✅'}
731
+ {step.status === 'running' && '⚡'}
732
+ {step.status === 'failed' && '❌'}
733
+ {step.status === 'pending' && '⏳'}
734
+ {step.status === 'skipped' && '⏭️'}
735
+ </span>
736
+ <div>
737
+ <h4 className="text-sm font-medium text-gray-900 dark:text-white">
738
+ {step.name}
739
+ </h4>
740
+ <p className="text-xs text-gray-600 dark:text-gray-400">
741
+ {step.description}
742
+ </p>
743
+ </div>
744
+ </div>
745
+ <span className="text-sm font-mono text-gray-600 dark:text-gray-400">
746
+ {step.progress}%
747
+ </span>
748
+ </div>
749
+ {step.status === 'running' && (
750
+ <div className="w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
751
+ <div
752
+ className="h-full bg-blue-600 transition-all duration-300"
753
+ style={{ width: `${step.progress}%` }}
754
+ />
755
+ </div>
756
+ )}
757
+ {step.error && (
758
+ <p className="text-xs text-red-600 dark:text-red-400 mt-2">
759
+ Error: {step.error}
760
+ </p>
761
+ )}
762
+ </div>
763
+ ))}
764
+ </div>
765
+ )}
766
+ </div>
767
+ )}
768
+
769
+ {/* Step 5: Results */}
770
+ {currentStepIndex === 4 && migrationResult && (
771
+ <div className="space-y-6">
772
+ <div>
773
+ <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
774
+ {currentStep.title}
775
+ </h3>
776
+ <p className="text-sm text-gray-600 dark:text-gray-400">
777
+ {currentStep.description}
778
+ </p>
779
+ </div>
780
+
781
+ {migrationResult.success ? (
782
+ <div className="p-6 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg text-center">
783
+ <span className="text-6xl mb-4 block">🎉</span>
784
+ <h4 className="text-xl font-bold text-green-800 dark:text-green-200 mb-2">
785
+ Migration Completed Successfully!
786
+ </h4>
787
+ <p className="text-sm text-green-700 dark:text-green-300">
788
+ Your legacy project has been migrated to the new BMAD Studio format.
789
+ </p>
790
+ </div>
791
+ ) : (
792
+ <div className="p-6 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg text-center">
793
+ <span className="text-6xl mb-4 block">😞</span>
794
+ <h4 className="text-xl font-bold text-red-800 dark:text-red-200 mb-2">
795
+ Migration Failed
796
+ </h4>
797
+ <p className="text-sm text-red-700 dark:text-red-300">
798
+ {migrationResult.error || 'An unknown error occurred during migration'}
799
+ </p>
800
+ </div>
801
+ )}
802
+
803
+ <div className="grid grid-cols-3 gap-4">
804
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg text-center">
805
+ <p className="text-3xl font-bold text-gray-900 dark:text-white">
806
+ {migrationResult.migrated.agents}
807
+ </p>
808
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">Agents Migrated</p>
809
+ </div>
810
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg text-center">
811
+ <p className="text-3xl font-bold text-gray-900 dark:text-white">
812
+ {migrationResult.migrated.workflows}
813
+ </p>
814
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">Workflows Migrated</p>
815
+ </div>
816
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg text-center">
817
+ <p className="text-3xl font-bold text-gray-900 dark:text-white">
818
+ {migrationResult.migrated.config ? '✅' : '❌'}
819
+ </p>
820
+ <p className="text-xs text-gray-600 dark:text-gray-400 mt-1">Config Migrated</p>
821
+ </div>
822
+ </div>
823
+
824
+ {migrationResult.backupPath && (
825
+ <div className="p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
826
+ <h4 className="text-sm font-semibold text-blue-800 dark:text-blue-200 mb-2">
827
+ 💾 Backup Location
828
+ </h4>
829
+ <p className="text-sm text-blue-700 dark:text-blue-300 font-mono break-all">
830
+ {migrationResult.backupPath}
831
+ </p>
832
+ </div>
833
+ )}
834
+
835
+ <div className="p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg">
836
+ <h4 className="text-sm font-semibold text-gray-900 dark:text-white mb-3">
837
+ 📋 Next Steps
838
+ </h4>
839
+ <ol className="list-decimal list-inside space-y-2 text-sm text-gray-700 dark:text-gray-300">
840
+ <li>Review your migrated agents in the Agents section</li>
841
+ <li>Check your workflows in the Workflow Editor</li>
842
+ <li>Verify your configuration in Settings</li>
843
+ <li>Run a test workflow to ensure everything works</li>
844
+ <li>If satisfied, you can safely remove the backup</li>
845
+ </ol>
846
+ </div>
847
+ </div>
848
+ )}
849
+ </div>
850
+
851
+ {/* Footer */}
852
+ <div className="sticky bottom-0 bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 px-6 py-4">
853
+ <div className="flex items-center justify-between">
854
+ <button
855
+ onClick={handleBack}
856
+ disabled={currentStepIndex === 0 || isMigrating}
857
+ className="px-6 py-2 text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
858
+ >
859
+ ← Back
860
+ </button>
861
+
862
+ <div className="flex items-center gap-3">
863
+ {currentStepIndex === 4 ? (
864
+ <button
865
+ onClick={handleClose}
866
+ className="px-6 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"
867
+ >
868
+ Done
869
+ </button>
870
+ ) : (
871
+ <button
872
+ onClick={handleNext}
873
+ disabled={
874
+ isMigrating ||
875
+ (currentStepIndex === 0 && !legacyInfo?.isLegacy) ||
876
+ (currentStepIndex === 3 && migrationSteps.length === 0)
877
+ }
878
+ className="px-6 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
879
+ >
880
+ {currentStepIndex === 2 ? 'Start Migration' : 'Next →'}
881
+ </button>
882
+ )}
883
+ </div>
884
+ </div>
885
+
886
+ <p className="text-xs text-gray-500 dark:text-gray-400 text-center mt-3">
887
+ Press <kbd className="px-2 py-1 bg-gray-100 dark:bg-gray-700 rounded text-xs">Enter</kbd> to continue or{' '}
888
+ <kbd className="px-2 py-1 bg-gray-100 dark:bg-gray-700 rounded text-xs">Esc</kbd> to go back
889
+ </p>
890
+ </div>
891
+ </div>
892
+ </div>
893
+ );
894
+ };
895
+
896
+ export default MigrationWizard;