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.
- package/.auto-claude-security.json +209 -0
- package/.claude_settings.json +34 -0
- package/.coderabbit.yaml +40 -0
- package/.nvmrc +1 -0
- package/.prettierignore +9 -0
- package/AI_TEST_GENERATOR_VERIFICATION.md +260 -0
- package/BUDGET_ALERT_TESTING.md +325 -0
- package/CHANGELOG.md +1488 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +167 -0
- package/CONTRIBUTORS.md +32 -0
- package/LEGACY_MIGRATION_TESTING.md +428 -0
- package/LICENSE +30 -0
- package/PARTY_MODE_VERIFICATION.md +274 -0
- package/PROJECT_DETECTOR_TESTING.md +288 -0
- package/README.md +236 -0
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/WORKFLOW_ROUTER_IMPLEMENTATION.md +379 -0
- package/Wordmark.png +0 -0
- package/banner-bmad-method.png +0 -0
- package/build/icons/512x512.png +0 -0
- package/build-mac.sh +3 -0
- package/docs/404.md +9 -0
- package/docs/_STYLE_GUIDE.md +367 -0
- package/docs/developer/api-reference.md +945 -0
- package/docs/developer/architecture.md +563 -0
- package/docs/developer/contributing.md +831 -0
- package/docs/downloads.md +74 -0
- package/docs/explanation/advanced-elicitation.md +24 -0
- package/docs/explanation/adversarial-review.md +57 -0
- package/docs/explanation/brainstorming.md +31 -0
- package/docs/explanation/brownfield-faq.md +55 -0
- package/docs/explanation/party-mode.md +57 -0
- package/docs/explanation/preventing-agent-conflicts.md +110 -0
- package/docs/explanation/quick-flow.md +27 -0
- package/docs/explanation/why-solutioning-matters.md +75 -0
- package/docs/how-to/brownfield/index.md +84 -0
- package/docs/how-to/brownfield/quick-fix-in-brownfield.md +76 -0
- package/docs/how-to/customize-bmad.md +158 -0
- package/docs/how-to/get-answers-about-bmad.md +102 -0
- package/docs/how-to/install-bmad.md +82 -0
- package/docs/how-to/shard-large-documents.md +101 -0
- package/docs/how-to/upgrade-to-v6.md +131 -0
- package/docs/index.md +56 -0
- package/docs/reference/workflow-map.md +83 -0
- package/docs/tea/explanation/engagement-models.md +710 -0
- package/docs/tea/explanation/fixture-architecture.md +457 -0
- package/docs/tea/explanation/knowledge-base-system.md +554 -0
- package/docs/tea/explanation/network-first-patterns.md +853 -0
- package/docs/tea/explanation/risk-based-testing.md +586 -0
- package/docs/tea/explanation/tea-overview.md +410 -0
- package/docs/tea/explanation/test-quality-standards.md +907 -0
- package/docs/tea/explanation/testing-as-engineering.md +112 -0
- package/docs/tea/glossary/index.md +159 -0
- package/docs/tea/how-to/brownfield/use-tea-for-enterprise.md +525 -0
- package/docs/tea/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
- package/docs/tea/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
- package/docs/tea/how-to/customization/integrate-playwright-utils.md +813 -0
- package/docs/tea/how-to/workflows/run-atdd.md +436 -0
- package/docs/tea/how-to/workflows/run-automate.md +653 -0
- package/docs/tea/how-to/workflows/run-nfr-assess.md +679 -0
- package/docs/tea/how-to/workflows/run-test-design.md +135 -0
- package/docs/tea/how-to/workflows/run-test-review.md +605 -0
- package/docs/tea/how-to/workflows/run-trace.md +883 -0
- package/docs/tea/how-to/workflows/setup-ci.md +712 -0
- package/docs/tea/how-to/workflows/setup-test-framework.md +98 -0
- package/docs/tea/reference/commands.md +276 -0
- package/docs/tea/reference/configuration.md +678 -0
- package/docs/tea/reference/knowledge-base.md +340 -0
- package/docs/tea/tutorials/tea-lite-quickstart.md +444 -0
- package/docs/tutorials/getting-started.md +205 -0
- package/docs/user-guide/getting-started.md +348 -0
- package/docs/user-guide/token-economy.md +601 -0
- package/docs/user-guide/workflows.md +546 -0
- package/electron-builder.yml +75 -0
- package/eslint.config.mjs +152 -0
- package/package.json +162 -0
- package/prettier.config.mjs +32 -0
- package/public/monaco-workers/index.js +21 -0
- package/renderer/App.tsx +311 -0
- package/renderer/components/ChatPanel.tsx +285 -0
- package/renderer/components/CodeEditor.tsx +327 -0
- package/renderer/components/CodeEditor.types.ts +245 -0
- package/renderer/components/FlowSelector.tsx +534 -0
- package/renderer/components/MessageInput.tsx +252 -0
- package/renderer/components/MessageList.tsx +204 -0
- package/renderer/components/MigrationWizard.tsx +896 -0
- package/renderer/components/NotificationCenter.tsx +291 -0
- package/renderer/components/OnboardingWizard.tsx +112 -0
- package/renderer/components/PartyMode.tsx +555 -0
- package/renderer/components/Sidebar.module.css +258 -0
- package/renderer/components/Sidebar.tsx +157 -0
- package/renderer/components/TemplateSelector.tsx +553 -0
- package/renderer/components/Terminal.tsx +523 -0
- package/renderer/components/TestCenter.tsx +364 -0
- package/renderer/components/TokenAnalytics.tsx +607 -0
- package/renderer/components/TokenMonitor.tsx +331 -0
- package/renderer/components/TutorialOverlay.tsx +483 -0
- package/renderer/components/WorkflowEditor.tsx +470 -0
- package/renderer/components/onboarding/Step1Welcome.tsx +72 -0
- package/renderer/components/onboarding/Step2Setup.tsx +193 -0
- package/renderer/components/onboarding/Step3CreateProject.tsx +209 -0
- package/renderer/components/test-center/CoverageDashboard.tsx +588 -0
- package/renderer/components/test-center/ELI5Guide.tsx +521 -0
- package/renderer/components/test-center/TestList.tsx +381 -0
- package/renderer/components/test-center/TestRunner.tsx +431 -0
- package/renderer/components/test-center/TestStepWizard.tsx +1000 -0
- package/renderer/components/test-center/VisualTestBuilder.tsx +460 -0
- package/renderer/components/workflow/DependencyEdge.tsx +200 -0
- package/renderer/components/workflow/StepNode.tsx +234 -0
- package/renderer/components/workflow/StepPalette.tsx +412 -0
- package/renderer/context/ThemeContext.tsx +97 -0
- package/renderer/data/shortcuts.json +94 -0
- package/renderer/data/testing-guides.json +261 -0
- package/renderer/data/tutorials.json +546 -0
- package/renderer/hooks/useKeyboardShortcuts.ts +249 -0
- package/renderer/hooks/useNotifications.ts +267 -0
- package/renderer/hooks/useTheme.ts +149 -0
- package/renderer/hooks/useTokenTracking.ts +464 -0
- package/renderer/hooks/useWorkflowState.ts +309 -0
- package/renderer/index.html +16 -0
- package/renderer/index.tsx +17 -0
- package/renderer/lib/MONACO_OFFLINE_CONFIG.md +153 -0
- package/renderer/lib/chart-utils.ts +472 -0
- package/renderer/lib/file-system-provider.ts +295 -0
- package/renderer/lib/monaco-loader.ts +247 -0
- package/renderer/renderer/components/NOTIFICATION_SYSTEM.md +192 -0
- package/renderer/styles.css +55 -0
- package/renderer/types/css-modules.d.ts +21 -0
- package/renderer/types/electron.d.ts +316 -0
- package/src/bmm/_module-installer/installer.js +48 -0
- package/src/bmm/agents/analyst.agent.yaml +36 -0
- package/src/bmm/agents/architect.agent.yaml +28 -0
- package/src/bmm/agents/dev.agent.yaml +38 -0
- package/src/bmm/agents/parallel-orchestrator.agent.yaml +50 -0
- package/src/bmm/agents/pm.agent.yaml +46 -0
- package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
- package/src/bmm/agents/sm.agent.yaml +36 -0
- package/src/bmm/agents/tea.agent.yaml +63 -0
- package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
- package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +45 -0
- package/src/bmm/agents/ux-designer.agent.yaml +26 -0
- package/src/bmm/agents/yolo-dev.agent.yaml +41 -0
- package/src/bmm/data/auto-testing-config.yaml +84 -0
- package/src/bmm/data/guided-mode-instructions.yaml +112 -0
- package/src/bmm/data/parallelization-config.yaml +136 -0
- package/src/bmm/data/project-context-template.md +26 -0
- package/src/bmm/data/speed-profiles.yaml +127 -0
- package/src/bmm/module-help.csv +32 -0
- package/src/bmm/module.yaml +60 -0
- package/src/bmm/teams/default-party.csv +21 -0
- package/src/bmm/teams/team-fullstack.yaml +12 -0
- package/src/bmm/testarch/knowledge/adr-quality-readiness-checklist.md +350 -0
- package/src/bmm/testarch/knowledge/api-request.md +442 -0
- package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
- package/src/bmm/testarch/knowledge/auth-session.md +552 -0
- package/src/bmm/testarch/knowledge/burn-in.md +273 -0
- package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
- package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
- package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
- package/src/bmm/testarch/knowledge/data-factories.md +500 -0
- package/src/bmm/testarch/knowledge/email-auth.md +721 -0
- package/src/bmm/testarch/knowledge/error-handling.md +725 -0
- package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
- package/src/bmm/testarch/knowledge/file-utils.md +463 -0
- package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
- package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
- package/src/bmm/testarch/knowledge/log.md +429 -0
- package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
- package/src/bmm/testarch/knowledge/network-first.md +486 -0
- package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
- package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
- package/src/bmm/testarch/knowledge/overview.md +286 -0
- package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
- package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
- package/src/bmm/testarch/knowledge/recurse.md +421 -0
- package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
- package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
- package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
- package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
- package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
- package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/src/bmm/testarch/knowledge/test-quality.md +664 -0
- package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
- package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
- package/src/bmm/testarch/tea-index.csv +35 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
- package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
- package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +13 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +218 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md +433 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow.md +150 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +135 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
- package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
- package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
- package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
- package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
- package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
- package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
- package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
- package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
- package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +32 -0
- package/src/bmm/workflows/4-implementation/fix-and-test/workflow.md +197 -0
- package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +58 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +54 -0
- package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-01-detect.md +55 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-02-confirm.md +48 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-03-implement.md +61 -0
- package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/workflow.md +41 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +176 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +153 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +149 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +73 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +192 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +145 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +93 -0
- package/src/bmm/workflows/bmad-quick-flow/yolo-mode/steps/step-01-rapid-spec.md +54 -0
- package/src/bmm/workflows/bmad-quick-flow/yolo-mode/steps/step-02-ship-it.md +65 -0
- package/src/bmm/workflows/bmad-quick-flow/yolo-mode/workflow.md +54 -0
- package/src/bmm/workflows/document-project/checklist.md +245 -0
- package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/src/bmm/workflows/document-project/instructions.md +221 -0
- package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/src/bmm/workflows/document-project/workflow.yaml +30 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
- package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
- package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-01-parse-target.md +49 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-02-launch-streams.md +135 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-03-sync-point.md +74 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-04-merge-insights.md +179 -0
- package/src/bmm/workflows/parallel-work/parallel-analysis/workflow.md +55 -0
- package/src/bmm/workflows/parallel-work/parallel-generation/workflow.md +109 -0
- package/src/bmm/workflows/parallel-work/parallel-reviews/workflow.md +111 -0
- package/src/bmm/workflows/parallel-work/parallel-stories/workflow.md +112 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-01-load-sprint.md +54 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-02-plan-execution.md +63 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-03-execute-stories.md +112 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-04-code-review.md +148 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-05-integration-testing.md +200 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-06-sprint-report.md +290 -0
- package/src/bmm/workflows/parallel-work/sprint-mode/workflow.md +58 -0
- package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
- package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
- package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
- package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
- package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
- package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
- package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
- package/src/bmm/workflows/testarch/ci/checklist.md +247 -0
- package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
- package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
- package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
- package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
- package/src/bmm/workflows/testarch/framework/checklist.md +320 -0
- package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
- package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
- package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
- package/src/bmm/workflows/testarch/nfr-assess/instructions.md +726 -0
- package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +461 -0
- package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
- package/src/bmm/workflows/testarch/test-design/checklist.md +407 -0
- package/src/bmm/workflows/testarch/test-design/instructions.md +1158 -0
- package/src/bmm/workflows/testarch/test-design/test-design-architecture-template.md +213 -0
- package/src/bmm/workflows/testarch/test-design/test-design-qa-template.md +286 -0
- package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
- package/src/bmm/workflows/testarch/test-design/workflow.yaml +71 -0
- package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
- package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
- package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
- package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
- package/src/bmm/workflows/testarch/trace/checklist.md +642 -0
- package/src/bmm/workflows/testarch/trace/instructions.md +1030 -0
- package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
- package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
- package/src/core/_module-installer/installer.js +60 -0
- package/src/core/agents/bmad-master.agent.yaml +29 -0
- package/src/core/module-help.csv +9 -0
- package/src/core/module.yaml +25 -0
- package/src/core/resources/excalidraw/README.md +160 -0
- package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
- package/src/core/resources/excalidraw/library-loader.md +50 -0
- package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
- package/src/core/tasks/editorial-review-prose.xml +100 -0
- package/src/core/tasks/editorial-review-structure.xml +209 -0
- package/src/core/tasks/help.md +62 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/review-adversarial-general.xml +48 -0
- package/src/core/tasks/shard-doc.xml +109 -0
- package/src/core/tasks/workflow.xml +235 -0
- package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/src/core/workflows/brainstorming/template.md +15 -0
- package/src/core/workflows/brainstorming/workflow.md +58 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
- package/src/core/workflows/party-mode/workflow.md +194 -0
- package/src/utility/agent-components/activation-rules.txt +6 -0
- package/src/utility/agent-components/activation-steps.txt +14 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/agent-components/agent.customize.template.yaml +41 -0
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-data.txt +5 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/tools/bmad-npx-wrapper.js +69 -0
- package/tools/build-docs.js +577 -0
- package/tools/cli/README.md +7 -0
- package/tools/cli/bmad-cli.js +65 -0
- package/tools/cli/commands/diagnostics.js +303 -0
- package/tools/cli/commands/install.js +87 -0
- package/tools/cli/commands/module.js +210 -0
- package/tools/cli/commands/status.js +65 -0
- package/tools/cli/commands/uninstall.js +86 -0
- package/tools/cli/external-official-modules.yaml +54 -0
- package/tools/cli/installers/install-messages.yaml +59 -0
- package/tools/cli/installers/lib/core/config-collector.js +1079 -0
- package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
- package/tools/cli/installers/lib/core/detector.js +223 -0
- package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
- package/tools/cli/installers/lib/core/installer.js +2812 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +1054 -0
- package/tools/cli/installers/lib/core/manifest.js +1036 -0
- package/tools/cli/installers/lib/custom/handler.js +363 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +655 -0
- package/tools/cli/installers/lib/ide/_config-driven.js +450 -0
- package/tools/cli/installers/lib/ide/codex.js +440 -0
- package/tools/cli/installers/lib/ide/kilo.js +250 -0
- package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
- package/tools/cli/installers/lib/ide/manager.js +271 -0
- package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +227 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +181 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +163 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
- package/tools/cli/installers/lib/ide/shared/path-utils.js +292 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +270 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +319 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/opencode/body.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/opencode/header.md +4 -0
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/message-loader.js +85 -0
- package/tools/cli/installers/lib/modules/external-manager.js +135 -0
- package/tools/cli/installers/lib/modules/manager.js +1375 -0
- package/tools/cli/lib/activation-builder.js +163 -0
- package/tools/cli/lib/agent/compiler.js +522 -0
- package/tools/cli/lib/agent/compiler.ts +572 -0
- package/tools/cli/lib/agent/installer.js +716 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/agent/types.ts +155 -0
- package/tools/cli/lib/agent-analyzer.js +109 -0
- package/tools/cli/lib/agent-party-generator.js +194 -0
- package/tools/cli/lib/cli-utils.js +227 -0
- package/tools/cli/lib/config.js +213 -0
- package/tools/cli/lib/config.ts +227 -0
- package/tools/cli/lib/file-ops.js +204 -0
- package/tools/cli/lib/file-ops.ts +215 -0
- package/tools/cli/lib/platform-codes.js +116 -0
- package/tools/cli/lib/project-root.js +77 -0
- package/tools/cli/lib/prompts.js +433 -0
- package/tools/cli/lib/prompts.ts +541 -0
- package/tools/cli/lib/types/config.types.ts +43 -0
- package/tools/cli/lib/types/xml-handler.types.ts +50 -0
- package/tools/cli/lib/ui.js +1660 -0
- package/tools/cli/lib/xml-handler.js +177 -0
- package/tools/cli/lib/xml-handler.ts +188 -0
- package/tools/cli/lib/xml-to-markdown.js +82 -0
- package/tools/cli/lib/yaml-format.js +245 -0
- package/tools/cli/lib/yaml-xml-builder.js +587 -0
- package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/tools/docs/fix-refs.md +91 -0
- package/tools/docs/index.md +2 -0
- package/tools/fix-doc-links.js +288 -0
- package/tools/flattener/aggregate.js +76 -0
- package/tools/flattener/aggregate.ts +78 -0
- package/tools/flattener/binary.js +80 -0
- package/tools/flattener/discovery.js +71 -0
- package/tools/flattener/files.js +35 -0
- package/tools/flattener/files.ts +31 -0
- package/tools/flattener/ignoreRules.js +172 -0
- package/tools/flattener/main.js +483 -0
- package/tools/flattener/main.ts +262 -0
- package/tools/flattener/projectRoot.js +201 -0
- package/tools/flattener/prompts.js +44 -0
- package/tools/flattener/stats.helpers.js +368 -0
- package/tools/flattener/stats.js +75 -0
- package/tools/flattener/test-matrix.js +409 -0
- package/tools/flattener/types.ts +53 -0
- package/tools/flattener/xml.js +82 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/lib/xml-utils.js +13 -0
- package/tools/maintainer/review-pr-README.md +55 -0
- package/tools/maintainer/review-pr.md +242 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +157 -0
- package/tools/schema/agent.js +491 -0
- package/tools/schema/agent.ts +489 -0
- package/tools/schema/agent.types.ts +31 -0
- package/tools/update-bmad.sh +24 -0
- package/tools/validate-agent-schema.js +110 -0
- package/tools/validate-doc-links.js +371 -0
- package/tools/validate-svg-changes.sh +356 -0
- 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;
|