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,303 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const os = require('node:os');
|
|
4
|
+
const { execSync } = require('node:child_process');
|
|
5
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
6
|
+
const { Manifest } = require('../installers/lib/core/manifest');
|
|
7
|
+
const { Detector } = require('../installers/lib/core/detector');
|
|
8
|
+
|
|
9
|
+
const installer = new Installer();
|
|
10
|
+
const manifest = new Manifest();
|
|
11
|
+
const detector = new Detector();
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Execute a command and return output, or error message
|
|
15
|
+
* @param {string} command - Command to execute
|
|
16
|
+
* @returns {string} Command output or error message
|
|
17
|
+
*/
|
|
18
|
+
function execCommand(command) {
|
|
19
|
+
try {
|
|
20
|
+
return execSync(command, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
21
|
+
} catch (error) {
|
|
22
|
+
return chalk.red('Not found or error');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Check for common issues in BMAD installation
|
|
28
|
+
* @param {string} bmadDir - BMAD directory path
|
|
29
|
+
* @param {Object} manifestData - Manifest data
|
|
30
|
+
* @returns {Array} Array of issue objects
|
|
31
|
+
*/
|
|
32
|
+
async function checkForIssues(bmadDir, manifestData) {
|
|
33
|
+
const issues = [];
|
|
34
|
+
const fs = require('fs-extra');
|
|
35
|
+
|
|
36
|
+
// Check if manifest exists
|
|
37
|
+
if (!manifestData) {
|
|
38
|
+
issues.push({
|
|
39
|
+
severity: 'error',
|
|
40
|
+
message: 'No manifest.yaml found',
|
|
41
|
+
suggestion: 'Run "bmad install" to set up or repair installation',
|
|
42
|
+
});
|
|
43
|
+
return issues;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Check if installation version matches current CLI version
|
|
47
|
+
const packageJson = require('../../../package.json');
|
|
48
|
+
const cliVersion = packageJson.version;
|
|
49
|
+
const installedVersion = manifestData.installation?.version;
|
|
50
|
+
|
|
51
|
+
if (installedVersion && installedVersion !== cliVersion) {
|
|
52
|
+
issues.push({
|
|
53
|
+
severity: 'warning',
|
|
54
|
+
message: `Version mismatch: CLI v${cliVersion} vs Installation v${installedVersion}`,
|
|
55
|
+
suggestion: 'Run "bmad install" and select "Quick Update" to sync versions',
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Check if modules have their directories
|
|
60
|
+
const modules = manifestData.modules || [];
|
|
61
|
+
for (const module of modules) {
|
|
62
|
+
if (module.source === 'external') {
|
|
63
|
+
const moduleDir = path.join(bmadDir, '_config', 'external', module.id);
|
|
64
|
+
if (!(await fs.pathExists(moduleDir))) {
|
|
65
|
+
issues.push({
|
|
66
|
+
severity: 'error',
|
|
67
|
+
message: `Module directory missing: ${module.id}`,
|
|
68
|
+
suggestion: `Reinstall module using "bmad module add ${module.id}"`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Check if _config directory is writable
|
|
75
|
+
const configDir = path.join(bmadDir, '_config');
|
|
76
|
+
if (await fs.pathExists(configDir)) {
|
|
77
|
+
try {
|
|
78
|
+
await fs.access(configDir, fs.constants.W_OK);
|
|
79
|
+
} catch {
|
|
80
|
+
issues.push({
|
|
81
|
+
severity: 'error',
|
|
82
|
+
message: 'Configuration directory is not writable',
|
|
83
|
+
suggestion: 'Check file permissions on _config directory',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Check for legacy folder structures
|
|
89
|
+
const legacyCfgPath = path.join(bmadDir, '_cfg');
|
|
90
|
+
if (await fs.pathExists(legacyCfgPath)) {
|
|
91
|
+
issues.push({
|
|
92
|
+
severity: 'warning',
|
|
93
|
+
message: 'Legacy "_cfg" folder detected',
|
|
94
|
+
suggestion: 'Run "bmad install" to migrate to current structure',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return issues;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
module.exports = {
|
|
102
|
+
command: 'diagnostics',
|
|
103
|
+
description: 'Display system diagnostics and troubleshooting information',
|
|
104
|
+
options: [
|
|
105
|
+
['-v, --verbose', 'Show detailed diagnostic information'],
|
|
106
|
+
['--json', 'Output diagnostics in JSON format'],
|
|
107
|
+
],
|
|
108
|
+
action: async (options) => {
|
|
109
|
+
try {
|
|
110
|
+
const jsonOutput = options.json || false;
|
|
111
|
+
const verbose = options.verbose || false;
|
|
112
|
+
|
|
113
|
+
// Collect diagnostic data
|
|
114
|
+
const diagnosticData = {
|
|
115
|
+
timestamp: new Date().toISOString(),
|
|
116
|
+
system: {},
|
|
117
|
+
bmad: {},
|
|
118
|
+
issues: [],
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// System Information
|
|
122
|
+
diagnosticData.system = {
|
|
123
|
+
platform: os.platform(),
|
|
124
|
+
arch: os.arch(),
|
|
125
|
+
release: os.release(),
|
|
126
|
+
nodeVersion: process.version,
|
|
127
|
+
npmVersion: execCommand('npm --version'),
|
|
128
|
+
homeDir: os.homedir(),
|
|
129
|
+
currentDir: process.cwd(),
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// BMAD Installation
|
|
133
|
+
const projectDir = process.cwd();
|
|
134
|
+
const { bmadDir } = await installer.findBmadDir(projectDir);
|
|
135
|
+
|
|
136
|
+
const fs = require('fs-extra');
|
|
137
|
+
if (await fs.pathExists(bmadDir)) {
|
|
138
|
+
diagnosticData.bmad.installed = true;
|
|
139
|
+
diagnosticData.bmad.location = bmadDir;
|
|
140
|
+
|
|
141
|
+
// Read manifest
|
|
142
|
+
const manifestData = await manifest._readRaw(bmadDir);
|
|
143
|
+
if (manifestData) {
|
|
144
|
+
diagnosticData.bmad.version = manifestData.installation?.version || 'unknown';
|
|
145
|
+
diagnosticData.bmad.installDate = manifestData.installation?.installDate;
|
|
146
|
+
diagnosticData.bmad.lastUpdated = manifestData.installation?.lastUpdated;
|
|
147
|
+
diagnosticData.bmad.modules = (manifestData.modules || []).map((m) => ({
|
|
148
|
+
id: m.id,
|
|
149
|
+
name: m.name,
|
|
150
|
+
version: m.version,
|
|
151
|
+
source: m.source,
|
|
152
|
+
}));
|
|
153
|
+
|
|
154
|
+
// Detect configured IDEs
|
|
155
|
+
const existingInstall = await detector.detect(bmadDir);
|
|
156
|
+
diagnosticData.bmad.ides = existingInstall.ides || [];
|
|
157
|
+
|
|
158
|
+
// Check for issues
|
|
159
|
+
diagnosticData.issues = await checkForIssues(bmadDir, manifestData);
|
|
160
|
+
} else {
|
|
161
|
+
diagnosticData.bmad.installed = false;
|
|
162
|
+
diagnosticData.issues.push({
|
|
163
|
+
severity: 'error',
|
|
164
|
+
message: 'BMAD directory exists but manifest is missing or corrupted',
|
|
165
|
+
suggestion: 'Run "bmad install" to repair installation',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
diagnosticData.bmad.installed = false;
|
|
170
|
+
diagnosticData.issues.push({
|
|
171
|
+
severity: 'info',
|
|
172
|
+
message: 'No BMAD installation found',
|
|
173
|
+
suggestion: 'Run "bmad install" to set up a new installation',
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Get CLI version
|
|
178
|
+
const packageJson = require('../../../package.json');
|
|
179
|
+
diagnosticData.bmad.cliVersion = packageJson.version;
|
|
180
|
+
|
|
181
|
+
// Output results
|
|
182
|
+
if (jsonOutput) {
|
|
183
|
+
console.log(JSON.stringify(diagnosticData, null, 2));
|
|
184
|
+
process.exit(0);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Human-readable output
|
|
189
|
+
console.log('');
|
|
190
|
+
console.log(chalk.cyan.bold('🔍 BMAD Diagnostics'));
|
|
191
|
+
console.log(chalk.gray('─'.repeat(80)));
|
|
192
|
+
|
|
193
|
+
// System Section
|
|
194
|
+
console.log(chalk.yellow('\n📊 System Information'));
|
|
195
|
+
console.log(` ${chalk.gray('Platform:'.padEnd(20))} ${diagnosticData.system.platform} (${diagnosticData.system.arch})`);
|
|
196
|
+
console.log(` ${chalk.gray('OS Release:'.padEnd(20))} ${diagnosticData.system.release}`);
|
|
197
|
+
console.log(` ${chalk.gray('Node.js:'.padEnd(20))} ${diagnosticData.system.nodeVersion}`);
|
|
198
|
+
console.log(` ${chalk.gray('npm:'.padEnd(20))} ${diagnosticData.system.npmVersion}`);
|
|
199
|
+
console.log(` ${chalk.gray('Current Directory:'.padEnd(20))} ${diagnosticData.system.currentDir}`);
|
|
200
|
+
|
|
201
|
+
if (verbose) {
|
|
202
|
+
console.log(` ${chalk.gray('Home Directory:'.padEnd(20))} ${diagnosticData.system.homeDir}`);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// BMAD Installation Section
|
|
206
|
+
console.log(chalk.yellow('\n🔧 BMAD Installation'));
|
|
207
|
+
console.log(` ${chalk.gray('CLI Version:'.padEnd(20))} ${diagnosticData.bmad.cliVersion}`);
|
|
208
|
+
|
|
209
|
+
if (diagnosticData.bmad.installed) {
|
|
210
|
+
console.log(` ${chalk.gray('Installed:'.padEnd(20))} ${chalk.green('Yes')}`);
|
|
211
|
+
console.log(` ${chalk.gray('Version:'.padEnd(20))} ${diagnosticData.bmad.version}`);
|
|
212
|
+
console.log(` ${chalk.gray('Location:'.padEnd(20))} ${diagnosticData.bmad.location}`);
|
|
213
|
+
|
|
214
|
+
if (diagnosticData.bmad.installDate) {
|
|
215
|
+
console.log(` ${chalk.gray('Install Date:'.padEnd(20))} ${new Date(diagnosticData.bmad.installDate).toLocaleDateString()}`);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (diagnosticData.bmad.lastUpdated) {
|
|
219
|
+
console.log(` ${chalk.gray('Last Updated:'.padEnd(20))} ${new Date(diagnosticData.bmad.lastUpdated).toLocaleDateString()}`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Modules
|
|
223
|
+
if (diagnosticData.bmad.modules && diagnosticData.bmad.modules.length > 0) {
|
|
224
|
+
console.log(chalk.yellow('\n📦 Installed Modules'));
|
|
225
|
+
for (const module of diagnosticData.bmad.modules) {
|
|
226
|
+
const versionInfo = module.version ? chalk.gray(`v${module.version}`) : chalk.gray('unknown');
|
|
227
|
+
const sourceInfo = chalk.dim(`[${module.source}]`);
|
|
228
|
+
console.log(` ${chalk.cyan(module.name.padEnd(25))} ${versionInfo.padEnd(15)} ${sourceInfo}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// IDEs/Tools
|
|
233
|
+
if (diagnosticData.bmad.ides && diagnosticData.bmad.ides.length > 0) {
|
|
234
|
+
console.log(chalk.yellow('\n🛠️ Configured Tools'));
|
|
235
|
+
for (const ide of diagnosticData.bmad.ides) {
|
|
236
|
+
console.log(` ${chalk.cyan('•')} ${ide}`);
|
|
237
|
+
}
|
|
238
|
+
} else {
|
|
239
|
+
console.log(chalk.yellow('\n🛠️ Configured Tools'));
|
|
240
|
+
console.log(` ${chalk.gray('No tools configured')}`);
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
console.log(` ${chalk.gray('Installed:'.padEnd(20))} ${chalk.red('No')}`);
|
|
244
|
+
console.log(` ${chalk.gray('Location:'.padEnd(20))} ${chalk.gray('N/A')}`);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Issues Section
|
|
248
|
+
if (diagnosticData.issues.length > 0) {
|
|
249
|
+
console.log(chalk.yellow('\n⚠️ Issues & Recommendations'));
|
|
250
|
+
|
|
251
|
+
const errors = diagnosticData.issues.filter((i) => i.severity === 'error');
|
|
252
|
+
const warnings = diagnosticData.issues.filter((i) => i.severity === 'warning');
|
|
253
|
+
const info = diagnosticData.issues.filter((i) => i.severity === 'info');
|
|
254
|
+
|
|
255
|
+
if (errors.length > 0) {
|
|
256
|
+
console.log(chalk.red.bold('\n Errors:'));
|
|
257
|
+
for (const issue of errors) {
|
|
258
|
+
console.log(` ${chalk.red('✗')} ${issue.message}`);
|
|
259
|
+
console.log(` ${chalk.dim('→')} ${issue.suggestion}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (warnings.length > 0) {
|
|
264
|
+
console.log(chalk.yellow.bold('\n Warnings:'));
|
|
265
|
+
for (const issue of warnings) {
|
|
266
|
+
console.log(` ${chalk.yellow('⚠')} ${issue.message}`);
|
|
267
|
+
console.log(` ${chalk.dim('→')} ${issue.suggestion}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (info.length > 0) {
|
|
272
|
+
console.log(chalk.cyan.bold('\n Info:'));
|
|
273
|
+
for (const issue of info) {
|
|
274
|
+
console.log(` ${chalk.cyan('ℹ')} ${issue.message}`);
|
|
275
|
+
console.log(` ${chalk.dim('→')} ${issue.suggestion}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
} else {
|
|
279
|
+
console.log(chalk.green('\n✓ No issues detected'));
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Troubleshooting Tips
|
|
283
|
+
if (!options.json && verbose) {
|
|
284
|
+
console.log(chalk.yellow('\n💡 Troubleshooting Tips'));
|
|
285
|
+
console.log(chalk.dim(' • If commands fail, try running with sudo/admin privileges'));
|
|
286
|
+
console.log(chalk.dim(' • Check that Node.js version is >= 16.0.0'));
|
|
287
|
+
console.log(chalk.dim(' • Ensure npm packages are up to date with "npm install"'));
|
|
288
|
+
console.log(chalk.dim(' • For permission issues, check folder ownership and permissions'));
|
|
289
|
+
console.log(chalk.dim(' • Use "bmad install" to repair or update your installation'));
|
|
290
|
+
console.log(chalk.dim(' • Use "bmad status" to check module versions and updates'));
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
console.log('');
|
|
294
|
+
process.exit(0);
|
|
295
|
+
} catch (error) {
|
|
296
|
+
console.error(chalk.red('Diagnostics failed:'), error.message);
|
|
297
|
+
if (process.env.BMAD_DEBUG) {
|
|
298
|
+
console.error(chalk.dim(error.stack));
|
|
299
|
+
}
|
|
300
|
+
process.exit(1);
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
4
|
+
const { UI } = require('../lib/ui');
|
|
5
|
+
|
|
6
|
+
const installer = new Installer();
|
|
7
|
+
const ui = new UI();
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
command: 'install',
|
|
11
|
+
description: 'Install BMAD Core agents and tools',
|
|
12
|
+
options: [['-d, --debug', 'Enable debug output for manifest generation']],
|
|
13
|
+
action: async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
// Set debug flag as environment variable for all components
|
|
16
|
+
if (options.debug) {
|
|
17
|
+
process.env.BMAD_DEBUG_MANIFEST = 'true';
|
|
18
|
+
console.log(chalk.cyan('Debug mode enabled\n'));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const config = await ui.promptInstall();
|
|
22
|
+
|
|
23
|
+
// Handle cancel
|
|
24
|
+
if (config.actionType === 'cancel') {
|
|
25
|
+
console.log(chalk.yellow('Installation cancelled.'));
|
|
26
|
+
process.exit(0);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Handle quick update separately
|
|
31
|
+
if (config.actionType === 'quick-update') {
|
|
32
|
+
const result = await installer.quickUpdate(config);
|
|
33
|
+
console.log(chalk.green('\n✨ Quick update complete!'));
|
|
34
|
+
console.log(chalk.cyan(`Updated ${result.moduleCount} modules with preserved settings (${result.modules.join(', ')})`));
|
|
35
|
+
|
|
36
|
+
// Display version-specific end message
|
|
37
|
+
const { MessageLoader } = require('../installers/lib/message-loader');
|
|
38
|
+
const messageLoader = new MessageLoader();
|
|
39
|
+
messageLoader.displayEndMessage();
|
|
40
|
+
|
|
41
|
+
process.exit(0);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Handle compile agents separately
|
|
46
|
+
if (config.actionType === 'compile-agents') {
|
|
47
|
+
const result = await installer.compileAgents(config);
|
|
48
|
+
console.log(chalk.green('\n✨ Agent recompilation complete!'));
|
|
49
|
+
console.log(chalk.cyan(`Recompiled ${result.agentCount} agents with customizations applied`));
|
|
50
|
+
process.exit(0);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Regular install/update flow
|
|
55
|
+
const result = await installer.install(config);
|
|
56
|
+
|
|
57
|
+
// Check if installation was cancelled
|
|
58
|
+
if (result && result.cancelled) {
|
|
59
|
+
process.exit(0);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Check if installation succeeded
|
|
64
|
+
if (result && result.success) {
|
|
65
|
+
// Display version-specific end message from install-messages.yaml
|
|
66
|
+
const { MessageLoader } = require('../installers/lib/message-loader');
|
|
67
|
+
const messageLoader = new MessageLoader();
|
|
68
|
+
messageLoader.displayEndMessage();
|
|
69
|
+
|
|
70
|
+
process.exit(0);
|
|
71
|
+
}
|
|
72
|
+
} catch (error) {
|
|
73
|
+
// Check if error has a complete formatted message
|
|
74
|
+
if (error.fullMessage) {
|
|
75
|
+
console.error(error.fullMessage);
|
|
76
|
+
if (error.stack) {
|
|
77
|
+
console.error('\n' + chalk.dim(error.stack));
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
// Generic error handling for all other errors
|
|
81
|
+
console.error(chalk.red('Installation failed:'), error.message);
|
|
82
|
+
console.error(chalk.dim(error.stack));
|
|
83
|
+
}
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
};
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
4
|
+
const { Manifest } = require('../installers/lib/core/manifest');
|
|
5
|
+
const { UI } = require('../lib/ui');
|
|
6
|
+
const { confirm } = require('@clack/prompts');
|
|
7
|
+
const { Command } = require('commander');
|
|
8
|
+
|
|
9
|
+
const installer = new Installer();
|
|
10
|
+
const manifest = new Manifest();
|
|
11
|
+
const ui = new UI();
|
|
12
|
+
|
|
13
|
+
// Create the module command with subcommands
|
|
14
|
+
const moduleCommand = new Command('module');
|
|
15
|
+
moduleCommand.description('Manage BMAD modules');
|
|
16
|
+
|
|
17
|
+
// Add subcommand
|
|
18
|
+
const addCommand = moduleCommand
|
|
19
|
+
.command('add <module-name>')
|
|
20
|
+
.description('Add a module to the BMAD installation')
|
|
21
|
+
.option('-s, --source <url>', 'Git repository URL or npm package name')
|
|
22
|
+
.option('-v, --version <version>', 'Specific version to install (for npm packages)')
|
|
23
|
+
.option('-f, --force', 'Force installation even if module already exists')
|
|
24
|
+
.action(async (moduleName, options) => {
|
|
25
|
+
try {
|
|
26
|
+
// Find the bmad directory
|
|
27
|
+
const projectDir = process.cwd();
|
|
28
|
+
const { bmadDir } = await installer.findBmadDir(projectDir);
|
|
29
|
+
|
|
30
|
+
// Check if bmad directory exists
|
|
31
|
+
const fs = require('fs-extra');
|
|
32
|
+
if (!(await fs.pathExists(bmadDir))) {
|
|
33
|
+
console.log(chalk.red('No BMAD installation found in the current directory.'));
|
|
34
|
+
console.log(chalk.dim(`Expected location: ${bmadDir}`));
|
|
35
|
+
console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Read current manifest
|
|
41
|
+
const manifestData = await manifest._readRaw(bmadDir);
|
|
42
|
+
|
|
43
|
+
if (!manifestData) {
|
|
44
|
+
console.log(chalk.red('No BMAD installation manifest found.'));
|
|
45
|
+
console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Check if module already exists
|
|
51
|
+
const existingModule = manifestData.modules?.find((m) => m.name === moduleName);
|
|
52
|
+
if (existingModule && !options.force) {
|
|
53
|
+
console.log(chalk.yellow(`Module "${moduleName}" is already installed.`));
|
|
54
|
+
console.log(chalk.dim(`Use --force to reinstall or update the module.`));
|
|
55
|
+
console.log(chalk.dim(`Current version: ${existingModule.version || 'unknown'}`));
|
|
56
|
+
process.exit(0);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Prepare module configuration
|
|
61
|
+
const moduleConfig = {
|
|
62
|
+
name: moduleName,
|
|
63
|
+
source: options.source || moduleName,
|
|
64
|
+
version: options.version || 'latest',
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
console.log(chalk.cyan(`\nAdding module: ${moduleName}`));
|
|
68
|
+
if (options.source) {
|
|
69
|
+
console.log(chalk.dim(`Source: ${options.source}`));
|
|
70
|
+
}
|
|
71
|
+
if (options.version) {
|
|
72
|
+
console.log(chalk.dim(`Version: ${options.version}`));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Add the module using installer
|
|
76
|
+
const result = await installer.addModule(bmadDir, moduleConfig);
|
|
77
|
+
|
|
78
|
+
if (result && result.success) {
|
|
79
|
+
console.log(chalk.green('\n✨ Module added successfully!'));
|
|
80
|
+
console.log(chalk.dim(`Module "${moduleName}" has been added to your BMAD installation.`));
|
|
81
|
+
process.exit(0);
|
|
82
|
+
} else {
|
|
83
|
+
console.log(chalk.yellow('\n⚠️ Module addition completed with warnings.'));
|
|
84
|
+
if (result && result.message) {
|
|
85
|
+
console.log(chalk.dim(result.message));
|
|
86
|
+
}
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error(chalk.red('Failed to add module:'), error.message);
|
|
91
|
+
if (process.env.BMAD_DEBUG) {
|
|
92
|
+
console.error(chalk.dim(error.stack));
|
|
93
|
+
}
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Remove subcommand
|
|
99
|
+
const removeCommand = moduleCommand
|
|
100
|
+
.command('remove <module-name>')
|
|
101
|
+
.description('Remove a module from the BMAD installation')
|
|
102
|
+
.option('-y, --yes', 'Skip confirmation prompt')
|
|
103
|
+
.option('--keep-data', 'Remove module but keep its data and configuration files')
|
|
104
|
+
.action(async (moduleName, options) => {
|
|
105
|
+
try {
|
|
106
|
+
// Find the bmad directory
|
|
107
|
+
const projectDir = process.cwd();
|
|
108
|
+
const { bmadDir } = await installer.findBmadDir(projectDir);
|
|
109
|
+
|
|
110
|
+
// Check if bmad directory exists
|
|
111
|
+
const fs = require('fs-extra');
|
|
112
|
+
if (!(await fs.pathExists(bmadDir))) {
|
|
113
|
+
console.log(chalk.red('No BMAD installation found in the current directory.'));
|
|
114
|
+
console.log(chalk.dim(`Expected location: ${bmadDir}`));
|
|
115
|
+
console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
|
|
116
|
+
process.exit(1);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Read current manifest
|
|
121
|
+
const manifestData = await manifest._readRaw(bmadDir);
|
|
122
|
+
|
|
123
|
+
if (!manifestData) {
|
|
124
|
+
console.log(chalk.red('No BMAD installation manifest found.'));
|
|
125
|
+
console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
|
|
126
|
+
process.exit(1);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Check if module exists
|
|
131
|
+
const existingModule = manifestData.modules?.find((m) => m.name === moduleName);
|
|
132
|
+
if (!existingModule) {
|
|
133
|
+
console.log(chalk.yellow(`Module "${moduleName}" is not installed.`));
|
|
134
|
+
console.log(chalk.dim('\nAvailable modules:'));
|
|
135
|
+
if (manifestData.modules && manifestData.modules.length > 0) {
|
|
136
|
+
for (const mod of manifestData.modules) {
|
|
137
|
+
console.log(chalk.dim(` - ${mod.name} (${mod.version || 'unknown'})`));
|
|
138
|
+
}
|
|
139
|
+
} else {
|
|
140
|
+
console.log(chalk.dim(' (no modules installed)'));
|
|
141
|
+
}
|
|
142
|
+
process.exit(0);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Confirm removal unless --yes flag is provided
|
|
147
|
+
if (!options.yes) {
|
|
148
|
+
console.log(chalk.yellow(`\nYou are about to remove module: ${moduleName}`));
|
|
149
|
+
console.log(chalk.dim(`Version: ${existingModule.version || 'unknown'}`));
|
|
150
|
+
if (options.keepData) {
|
|
151
|
+
console.log(chalk.dim('Data and configuration will be preserved.'));
|
|
152
|
+
} else {
|
|
153
|
+
console.log(chalk.dim('All data and configuration will be removed.'));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const shouldContinue = await confirm({
|
|
157
|
+
message: 'Are you sure you want to continue?',
|
|
158
|
+
initialValue: false,
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
if (!shouldContinue || shouldContinue === 'cancel') {
|
|
162
|
+
console.log(chalk.yellow('\nModule removal cancelled.'));
|
|
163
|
+
process.exit(0);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
console.log(chalk.cyan(`\nRemoving module: ${moduleName}`));
|
|
169
|
+
|
|
170
|
+
// Remove the module using installer
|
|
171
|
+
const result = await installer.removeModule(bmadDir, moduleName, {
|
|
172
|
+
keepData: options.keepData,
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
if (result && result.success) {
|
|
176
|
+
console.log(chalk.green('\n✨ Module removed successfully!'));
|
|
177
|
+
console.log(chalk.dim(`Module "${moduleName}" has been removed from your BMAD installation.`));
|
|
178
|
+
if (options.keepData) {
|
|
179
|
+
console.log(chalk.dim('Data and configuration files have been preserved.'));
|
|
180
|
+
}
|
|
181
|
+
process.exit(0);
|
|
182
|
+
} else {
|
|
183
|
+
console.log(chalk.yellow('\n⚠️ Module removal completed with warnings.'));
|
|
184
|
+
if (result && result.message) {
|
|
185
|
+
console.log(chalk.dim(result.message));
|
|
186
|
+
}
|
|
187
|
+
process.exit(0);
|
|
188
|
+
}
|
|
189
|
+
} catch (error) {
|
|
190
|
+
console.error(chalk.red('Failed to remove module:'), error.message);
|
|
191
|
+
if (process.env.BMAD_DEBUG) {
|
|
192
|
+
console.error(chalk.dim(error.stack));
|
|
193
|
+
}
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
// Export the module command in the format expected by bmad-cli.js
|
|
199
|
+
// We need to export it in a way that the CLI loader can handle it specially
|
|
200
|
+
module.exports = {
|
|
201
|
+
command: 'module',
|
|
202
|
+
description: 'Manage BMAD modules',
|
|
203
|
+
options: [],
|
|
204
|
+
// Instead of a simple action, we export the full Command object
|
|
205
|
+
commandObject: moduleCommand,
|
|
206
|
+
action: () => {
|
|
207
|
+
// This will be called if someone runs just 'bmad module' without subcommand
|
|
208
|
+
moduleCommand.outputHelp();
|
|
209
|
+
},
|
|
210
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
4
|
+
const { Manifest } = require('../installers/lib/core/manifest');
|
|
5
|
+
const { UI } = require('../lib/ui');
|
|
6
|
+
|
|
7
|
+
const installer = new Installer();
|
|
8
|
+
const manifest = new Manifest();
|
|
9
|
+
const ui = new UI();
|
|
10
|
+
|
|
11
|
+
module.exports = {
|
|
12
|
+
command: 'status',
|
|
13
|
+
description: 'Display BMAD installation status and module versions',
|
|
14
|
+
options: [],
|
|
15
|
+
action: async (options) => {
|
|
16
|
+
try {
|
|
17
|
+
// Find the bmad directory
|
|
18
|
+
const projectDir = process.cwd();
|
|
19
|
+
const { bmadDir } = await installer.findBmadDir(projectDir);
|
|
20
|
+
|
|
21
|
+
// Check if bmad directory exists
|
|
22
|
+
const fs = require('fs-extra');
|
|
23
|
+
if (!(await fs.pathExists(bmadDir))) {
|
|
24
|
+
console.log(chalk.yellow('No BMAD installation found in the current directory.'));
|
|
25
|
+
console.log(chalk.dim(`Expected location: ${bmadDir}`));
|
|
26
|
+
console.log(chalk.dim('\nRun "bmad install" to set up a new installation.'));
|
|
27
|
+
process.exit(0);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Read manifest
|
|
32
|
+
const manifestData = await manifest._readRaw(bmadDir);
|
|
33
|
+
|
|
34
|
+
if (!manifestData) {
|
|
35
|
+
console.log(chalk.yellow('No BMAD installation manifest found.'));
|
|
36
|
+
console.log(chalk.dim('\nRun "bmad install" to set up a new installation.'));
|
|
37
|
+
process.exit(0);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Get installation info
|
|
42
|
+
const installation = manifestData.installation || {};
|
|
43
|
+
const modules = manifestData.modules || [];
|
|
44
|
+
|
|
45
|
+
// Check for available updates (only for external modules)
|
|
46
|
+
const availableUpdates = await manifest.checkForUpdates(bmadDir);
|
|
47
|
+
|
|
48
|
+
// Display status
|
|
49
|
+
ui.displayStatus({
|
|
50
|
+
installation,
|
|
51
|
+
modules,
|
|
52
|
+
availableUpdates,
|
|
53
|
+
bmadDir,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
process.exit(0);
|
|
57
|
+
} catch (error) {
|
|
58
|
+
console.error(chalk.red('Status check failed:'), error.message);
|
|
59
|
+
if (process.env.BMAD_DEBUG) {
|
|
60
|
+
console.error(chalk.dim(error.stack));
|
|
61
|
+
}
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
};
|