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,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path transformation utilities for IDE installer standardization
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities to convert hierarchical paths to flat naming conventions.
|
|
5
|
+
*
|
|
6
|
+
* DASH-BASED NAMING (new standard):
|
|
7
|
+
* - Agents: bmad-agent-module-name.md (with bmad-agent- prefix)
|
|
8
|
+
* - Workflows/Tasks/Tools: bmad-module-name.md
|
|
9
|
+
*
|
|
10
|
+
* Example outputs:
|
|
11
|
+
* - cis/agents/storymaster.md → bmad-agent-cis-storymaster.md
|
|
12
|
+
* - bmm/workflows/plan-project.md → bmad-bmm-plan-project.md
|
|
13
|
+
* - bmm/tasks/create-story.md → bmad-bmm-create-story.md
|
|
14
|
+
* - core/agents/brainstorming.md → bmad-agent-brainstorming.md (core agents skip module name)
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// Type segments - agents are included in naming, others are filtered out
|
|
18
|
+
const TYPE_SEGMENTS = ['workflows', 'tasks', 'tools'];
|
|
19
|
+
const AGENT_SEGMENT = 'agents';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Convert hierarchical path to flat dash-separated name (NEW STANDARD)
|
|
23
|
+
* Converts: 'bmm', 'agents', 'pm' → 'bmad-agent-bmm-pm.md'
|
|
24
|
+
* Converts: 'bmm', 'workflows', 'correct-course' → 'bmad-bmm-correct-course.md'
|
|
25
|
+
* Converts: 'core', 'agents', 'brainstorming' → 'bmad-agent-brainstorming.md' (core agents skip module name)
|
|
26
|
+
*
|
|
27
|
+
* @param {string} module - Module name (e.g., 'bmm', 'core')
|
|
28
|
+
* @param {string} type - Artifact type ('agents', 'workflows', 'tasks', 'tools')
|
|
29
|
+
* @param {string} name - Artifact name (e.g., 'pm', 'brainstorming')
|
|
30
|
+
* @returns {string} Flat filename like 'bmad-agent-bmm-pm.md' or 'bmad-bmm-correct-course.md'
|
|
31
|
+
*/
|
|
32
|
+
function toDashName(module, type, name) {
|
|
33
|
+
const isAgent = type === AGENT_SEGMENT;
|
|
34
|
+
|
|
35
|
+
// For core module, skip the module name: use 'bmad-agent-name.md' instead of 'bmad-agent-core-name.md'
|
|
36
|
+
if (module === 'core') {
|
|
37
|
+
return isAgent ? `bmad-agent-${name}.md` : `bmad-${name}.md`;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Module artifacts: bmad-module-name.md or bmad-agent-module-name.md
|
|
41
|
+
// eslint-disable-next-line unicorn/prefer-string-replace-all -- regex replace is intentional here
|
|
42
|
+
const dashName = name.replace(/\//g, '-'); // Flatten nested paths
|
|
43
|
+
return isAgent ? `bmad-agent-${module}-${dashName}.md` : `bmad-${module}-${dashName}.md`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Convert relative path to flat dash-separated name
|
|
48
|
+
* Converts: 'bmm/agents/pm.md' → 'bmad-agent-bmm-pm.md'
|
|
49
|
+
* Converts: 'bmm/agents/tech-writer/tech-writer.md' → 'bmad-agent-bmm-tech-writer.md' (uses folder name)
|
|
50
|
+
* Converts: 'bmm/workflows/correct-course.md' → 'bmad-bmm-correct-course.md'
|
|
51
|
+
* Converts: 'core/agents/brainstorming.md' → 'bmad-agent-brainstorming.md' (core agents skip module name)
|
|
52
|
+
*
|
|
53
|
+
* @param {string} relativePath - Path like 'bmm/agents/pm.md'
|
|
54
|
+
* @returns {string} Flat filename like 'bmad-agent-bmm-pm.md' or 'bmad-brainstorming.md'
|
|
55
|
+
*/
|
|
56
|
+
function toDashPath(relativePath) {
|
|
57
|
+
if (!relativePath || typeof relativePath !== 'string') {
|
|
58
|
+
// Return a safe default for invalid input
|
|
59
|
+
return 'bmad-unknown.md';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const withoutExt = relativePath.replace('.md', '');
|
|
63
|
+
const parts = withoutExt.split(/[/\\]/);
|
|
64
|
+
|
|
65
|
+
const module = parts[0];
|
|
66
|
+
const type = parts[1];
|
|
67
|
+
let name;
|
|
68
|
+
|
|
69
|
+
// For agents, if nested in a folder (more than 3 parts), use the folder name only
|
|
70
|
+
// e.g., 'bmm/agents/tech-writer/tech-writer' → 'tech-writer' (not 'tech-writer-tech-writer')
|
|
71
|
+
if (type === 'agents' && parts.length > 3) {
|
|
72
|
+
// Use the folder name (parts[2]) as the name, ignore the file name
|
|
73
|
+
name = parts[2];
|
|
74
|
+
} else {
|
|
75
|
+
// For non-nested or non-agents, join all parts after type
|
|
76
|
+
name = parts.slice(2).join('-');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return toDashName(module, type, name);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Create custom agent dash name
|
|
84
|
+
* Creates: 'bmad-custom-agent-fred-commit-poet.md'
|
|
85
|
+
*
|
|
86
|
+
* @param {string} agentName - Custom agent name
|
|
87
|
+
* @returns {string} Flat filename like 'bmad-custom-agent-fred-commit-poet.md'
|
|
88
|
+
*/
|
|
89
|
+
function customAgentDashName(agentName) {
|
|
90
|
+
return `bmad-custom-agent-${agentName}.md`;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Check if a filename uses dash format
|
|
95
|
+
* @param {string} filename - Filename to check
|
|
96
|
+
* @returns {boolean} True if filename uses dash format
|
|
97
|
+
*/
|
|
98
|
+
function isDashFormat(filename) {
|
|
99
|
+
return filename.startsWith('bmad-') && filename.includes('-');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Extract parts from a dash-formatted filename
|
|
104
|
+
* Parses: 'bmad-agent-bmm-pm.md' → { prefix: 'bmad', module: 'bmm', type: 'agents', name: 'pm' }
|
|
105
|
+
* Parses: 'bmad-bmm-correct-course.md' → { prefix: 'bmad', module: 'bmm', type: 'workflows', name: 'correct-course' }
|
|
106
|
+
* Parses: 'bmad-agent-brainstorming.md' → { prefix: 'bmad', module: 'core', type: 'agents', name: 'brainstorming' } (core agents)
|
|
107
|
+
* Parses: 'bmad-brainstorming.md' → { prefix: 'bmad', module: 'core', type: 'workflows', name: 'brainstorming' } (core workflows)
|
|
108
|
+
*
|
|
109
|
+
* @param {string} filename - Dash-formatted filename
|
|
110
|
+
* @returns {Object|null} Parsed parts or null if invalid format
|
|
111
|
+
*/
|
|
112
|
+
function parseDashName(filename) {
|
|
113
|
+
const withoutExt = filename.replace('.md', '');
|
|
114
|
+
const parts = withoutExt.split('-');
|
|
115
|
+
|
|
116
|
+
if (parts.length < 2 || parts[0] !== 'bmad') {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Check if this is an agent file (has 'agent' as second part)
|
|
121
|
+
const isAgent = parts[1] === 'agent';
|
|
122
|
+
|
|
123
|
+
if (isAgent) {
|
|
124
|
+
// This is an agent file
|
|
125
|
+
// Format: bmad-agent-name (core) or bmad-agent-module-name
|
|
126
|
+
if (parts.length === 3) {
|
|
127
|
+
// Core agent: bmad-agent-name
|
|
128
|
+
return {
|
|
129
|
+
prefix: parts[0],
|
|
130
|
+
module: 'core',
|
|
131
|
+
type: 'agents',
|
|
132
|
+
name: parts[2],
|
|
133
|
+
};
|
|
134
|
+
} else {
|
|
135
|
+
// Module agent: bmad-agent-module-name
|
|
136
|
+
return {
|
|
137
|
+
prefix: parts[0],
|
|
138
|
+
module: parts[2],
|
|
139
|
+
type: 'agents',
|
|
140
|
+
name: parts.slice(3).join('-'),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Not an agent file - must be a workflow/tool/task
|
|
146
|
+
// If only 2 parts (bmad-name), it's a core workflow/tool/task
|
|
147
|
+
if (parts.length === 2) {
|
|
148
|
+
return {
|
|
149
|
+
prefix: parts[0],
|
|
150
|
+
module: 'core',
|
|
151
|
+
type: 'workflows', // Default to workflows for non-agent core items
|
|
152
|
+
name: parts[1],
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Otherwise, it's a module workflow/tool/task (bmad-module-name)
|
|
157
|
+
return {
|
|
158
|
+
prefix: parts[0],
|
|
159
|
+
module: parts[1],
|
|
160
|
+
type: 'workflows', // Default to workflows for non-agent module items
|
|
161
|
+
name: parts.slice(2).join('-'),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// LEGACY FUNCTIONS (underscore format) - kept for backward compatibility
|
|
167
|
+
// ============================================================================
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Convert hierarchical path to flat underscore-separated name (LEGACY)
|
|
171
|
+
* @deprecated Use toDashName instead
|
|
172
|
+
*/
|
|
173
|
+
function toUnderscoreName(module, type, name) {
|
|
174
|
+
const isAgent = type === AGENT_SEGMENT;
|
|
175
|
+
if (module === 'core') {
|
|
176
|
+
return isAgent ? `bmad_agent_${name}.md` : `bmad_${name}.md`;
|
|
177
|
+
}
|
|
178
|
+
return isAgent ? `bmad_${module}_agent_${name}.md` : `bmad_${module}_${name}.md`;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Convert relative path to flat underscore-separated name (LEGACY)
|
|
183
|
+
* @deprecated Use toDashPath instead
|
|
184
|
+
*/
|
|
185
|
+
function toUnderscorePath(relativePath) {
|
|
186
|
+
const withoutExt = relativePath.replace('.md', '');
|
|
187
|
+
const parts = withoutExt.split(/[/\\]/);
|
|
188
|
+
|
|
189
|
+
const module = parts[0];
|
|
190
|
+
const type = parts[1];
|
|
191
|
+
const name = parts.slice(2).join('_');
|
|
192
|
+
|
|
193
|
+
return toUnderscoreName(module, type, name);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Create custom agent underscore name (LEGACY)
|
|
198
|
+
* @deprecated Use customAgentDashName instead
|
|
199
|
+
*/
|
|
200
|
+
function customAgentUnderscoreName(agentName) {
|
|
201
|
+
return `bmad_custom_${agentName}.md`;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Check if a filename uses underscore format (LEGACY)
|
|
206
|
+
* @deprecated Use isDashFormat instead
|
|
207
|
+
*/
|
|
208
|
+
function isUnderscoreFormat(filename) {
|
|
209
|
+
return filename.startsWith('bmad_') && filename.includes('_');
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Extract parts from an underscore-formatted filename (LEGACY)
|
|
214
|
+
* @deprecated Use parseDashName instead
|
|
215
|
+
*/
|
|
216
|
+
function parseUnderscoreName(filename) {
|
|
217
|
+
const withoutExt = filename.replace('.md', '');
|
|
218
|
+
const parts = withoutExt.split('_');
|
|
219
|
+
|
|
220
|
+
if (parts.length < 2 || parts[0] !== 'bmad') {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const agentIndex = parts.indexOf('agent');
|
|
225
|
+
|
|
226
|
+
if (agentIndex !== -1) {
|
|
227
|
+
if (agentIndex === 1) {
|
|
228
|
+
return {
|
|
229
|
+
prefix: parts[0],
|
|
230
|
+
module: 'core',
|
|
231
|
+
type: 'agents',
|
|
232
|
+
name: parts.slice(agentIndex + 1).join('_'),
|
|
233
|
+
};
|
|
234
|
+
} else {
|
|
235
|
+
return {
|
|
236
|
+
prefix: parts[0],
|
|
237
|
+
module: parts[1],
|
|
238
|
+
type: 'agents',
|
|
239
|
+
name: parts.slice(agentIndex + 1).join('_'),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (parts.length === 2) {
|
|
245
|
+
return {
|
|
246
|
+
prefix: parts[0],
|
|
247
|
+
module: 'core',
|
|
248
|
+
type: 'workflows',
|
|
249
|
+
name: parts[1],
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return {
|
|
254
|
+
prefix: parts[0],
|
|
255
|
+
module: parts[1],
|
|
256
|
+
type: 'workflows',
|
|
257
|
+
name: parts.slice(2).join('_'),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Backward compatibility aliases (colon format was same as underscore)
|
|
262
|
+
const toColonName = toUnderscoreName;
|
|
263
|
+
const toColonPath = toUnderscorePath;
|
|
264
|
+
const customAgentColonName = customAgentUnderscoreName;
|
|
265
|
+
const isColonFormat = isUnderscoreFormat;
|
|
266
|
+
const parseColonName = parseUnderscoreName;
|
|
267
|
+
|
|
268
|
+
module.exports = {
|
|
269
|
+
// New standard (dash-based)
|
|
270
|
+
toDashName,
|
|
271
|
+
toDashPath,
|
|
272
|
+
customAgentDashName,
|
|
273
|
+
isDashFormat,
|
|
274
|
+
parseDashName,
|
|
275
|
+
|
|
276
|
+
// Legacy (underscore-based) - kept for backward compatibility
|
|
277
|
+
toUnderscoreName,
|
|
278
|
+
toUnderscorePath,
|
|
279
|
+
customAgentUnderscoreName,
|
|
280
|
+
isUnderscoreFormat,
|
|
281
|
+
parseUnderscoreName,
|
|
282
|
+
|
|
283
|
+
// Backward compatibility aliases
|
|
284
|
+
toColonName,
|
|
285
|
+
toColonPath,
|
|
286
|
+
customAgentColonName,
|
|
287
|
+
isColonFormat,
|
|
288
|
+
parseColonName,
|
|
289
|
+
|
|
290
|
+
TYPE_SEGMENTS,
|
|
291
|
+
AGENT_SEGMENT,
|
|
292
|
+
};
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const csv = require('csv-parse/sync');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { toColonName, toColonPath, toDashPath } = require('./path-utils');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generates command files for standalone tasks and tools
|
|
9
|
+
*/
|
|
10
|
+
class TaskToolCommandGenerator {
|
|
11
|
+
/**
|
|
12
|
+
* Generate task and tool commands from manifest CSVs
|
|
13
|
+
* @param {string} projectDir - Project directory
|
|
14
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
15
|
+
* @param {string} baseCommandsDir - Optional base commands directory (defaults to .claude/commands/bmad)
|
|
16
|
+
*/
|
|
17
|
+
async generateTaskToolCommands(projectDir, bmadDir, baseCommandsDir = null) {
|
|
18
|
+
const tasks = await this.loadTaskManifest(bmadDir);
|
|
19
|
+
const tools = await this.loadToolManifest(bmadDir);
|
|
20
|
+
|
|
21
|
+
// Filter to only standalone items
|
|
22
|
+
const standaloneTasks = tasks ? tasks.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
|
|
23
|
+
const standaloneTools = tools ? tools.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
|
|
24
|
+
|
|
25
|
+
// Base commands directory - use provided or default to Claude Code structure
|
|
26
|
+
const commandsDir = baseCommandsDir || path.join(projectDir, '.claude', 'commands', 'bmad');
|
|
27
|
+
|
|
28
|
+
let generatedCount = 0;
|
|
29
|
+
|
|
30
|
+
// Generate command files for tasks
|
|
31
|
+
for (const task of standaloneTasks) {
|
|
32
|
+
const moduleTasksDir = path.join(commandsDir, task.module, 'tasks');
|
|
33
|
+
await fs.ensureDir(moduleTasksDir);
|
|
34
|
+
|
|
35
|
+
const commandContent = this.generateCommandContent(task, 'task');
|
|
36
|
+
const commandPath = path.join(moduleTasksDir, `${task.name}.md`);
|
|
37
|
+
|
|
38
|
+
await fs.writeFile(commandPath, commandContent);
|
|
39
|
+
generatedCount++;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Generate command files for tools
|
|
43
|
+
for (const tool of standaloneTools) {
|
|
44
|
+
const moduleToolsDir = path.join(commandsDir, tool.module, 'tools');
|
|
45
|
+
await fs.ensureDir(moduleToolsDir);
|
|
46
|
+
|
|
47
|
+
const commandContent = this.generateCommandContent(tool, 'tool');
|
|
48
|
+
const commandPath = path.join(moduleToolsDir, `${tool.name}.md`);
|
|
49
|
+
|
|
50
|
+
await fs.writeFile(commandPath, commandContent);
|
|
51
|
+
generatedCount++;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
generated: generatedCount,
|
|
56
|
+
tasks: standaloneTasks.length,
|
|
57
|
+
tools: standaloneTools.length,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Generate command content for a task or tool
|
|
63
|
+
*/
|
|
64
|
+
generateCommandContent(item, type) {
|
|
65
|
+
const description = item.description || `Execute ${item.displayName || item.name}`;
|
|
66
|
+
|
|
67
|
+
// Convert path to use {project-root} placeholder
|
|
68
|
+
let itemPath = item.path;
|
|
69
|
+
if (itemPath && typeof itemPath === 'string' && itemPath.startsWith('bmad/')) {
|
|
70
|
+
itemPath = `{project-root}/${itemPath}`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return `---
|
|
74
|
+
description: '${description.replaceAll("'", "''")}'
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
# ${item.displayName || item.name}
|
|
78
|
+
|
|
79
|
+
Read the entire ${type} file at: ${itemPath}
|
|
80
|
+
|
|
81
|
+
Follow all instructions in the ${type} file exactly as written.
|
|
82
|
+
`;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Load task manifest CSV
|
|
87
|
+
*/
|
|
88
|
+
async loadTaskManifest(bmadDir) {
|
|
89
|
+
const manifestPath = path.join(bmadDir, '_config', 'task-manifest.csv');
|
|
90
|
+
|
|
91
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const csvContent = await fs.readFile(manifestPath, 'utf8');
|
|
96
|
+
return csv.parse(csvContent, {
|
|
97
|
+
columns: true,
|
|
98
|
+
skip_empty_lines: true,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Load tool manifest CSV
|
|
104
|
+
*/
|
|
105
|
+
async loadToolManifest(bmadDir) {
|
|
106
|
+
const manifestPath = path.join(bmadDir, '_config', 'tool-manifest.csv');
|
|
107
|
+
|
|
108
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const csvContent = await fs.readFile(manifestPath, 'utf8');
|
|
113
|
+
return csv.parse(csvContent, {
|
|
114
|
+
columns: true,
|
|
115
|
+
skip_empty_lines: true,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Generate task and tool commands using underscore format (Windows-compatible)
|
|
121
|
+
* Creates flat files like: bmad_bmm_bmad-help.md
|
|
122
|
+
*
|
|
123
|
+
* @param {string} projectDir - Project directory
|
|
124
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
125
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
126
|
+
* @returns {Object} Generation results
|
|
127
|
+
*/
|
|
128
|
+
async generateColonTaskToolCommands(projectDir, bmadDir, baseCommandsDir) {
|
|
129
|
+
const tasks = await this.loadTaskManifest(bmadDir);
|
|
130
|
+
const tools = await this.loadToolManifest(bmadDir);
|
|
131
|
+
|
|
132
|
+
// Filter to only standalone items
|
|
133
|
+
const standaloneTasks = tasks ? tasks.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
|
|
134
|
+
const standaloneTools = tools ? tools.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
|
|
135
|
+
|
|
136
|
+
let generatedCount = 0;
|
|
137
|
+
|
|
138
|
+
// Generate command files for tasks
|
|
139
|
+
for (const task of standaloneTasks) {
|
|
140
|
+
const commandContent = this.generateCommandContent(task, 'task');
|
|
141
|
+
// Use underscore format: bmad_bmm_name.md
|
|
142
|
+
const flatName = toColonName(task.module, 'tasks', task.name);
|
|
143
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
144
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
145
|
+
await fs.writeFile(commandPath, commandContent);
|
|
146
|
+
generatedCount++;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Generate command files for tools
|
|
150
|
+
for (const tool of standaloneTools) {
|
|
151
|
+
const commandContent = this.generateCommandContent(tool, 'tool');
|
|
152
|
+
// Use underscore format: bmad_bmm_name.md
|
|
153
|
+
const flatName = toColonName(tool.module, 'tools', tool.name);
|
|
154
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
155
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
156
|
+
await fs.writeFile(commandPath, commandContent);
|
|
157
|
+
generatedCount++;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return {
|
|
161
|
+
generated: generatedCount,
|
|
162
|
+
tasks: standaloneTasks.length,
|
|
163
|
+
tools: standaloneTools.length,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Generate task and tool commands using underscore format (Windows-compatible)
|
|
169
|
+
* Creates flat files like: bmad_bmm_bmad-help.md
|
|
170
|
+
*
|
|
171
|
+
* @param {string} projectDir - Project directory
|
|
172
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
173
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
174
|
+
* @returns {Object} Generation results
|
|
175
|
+
*/
|
|
176
|
+
async generateDashTaskToolCommands(projectDir, bmadDir, baseCommandsDir) {
|
|
177
|
+
const tasks = await this.loadTaskManifest(bmadDir);
|
|
178
|
+
const tools = await this.loadToolManifest(bmadDir);
|
|
179
|
+
|
|
180
|
+
// Filter to only standalone items
|
|
181
|
+
const standaloneTasks = tasks ? tasks.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
|
|
182
|
+
const standaloneTools = tools ? tools.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
|
|
183
|
+
|
|
184
|
+
let generatedCount = 0;
|
|
185
|
+
|
|
186
|
+
// Generate command files for tasks
|
|
187
|
+
for (const task of standaloneTasks) {
|
|
188
|
+
const commandContent = this.generateCommandContent(task, 'task');
|
|
189
|
+
// Use underscore format: bmad_bmm_name.md
|
|
190
|
+
const flatName = toDashPath(`${task.module}/tasks/${task.name}.md`);
|
|
191
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
192
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
193
|
+
await fs.writeFile(commandPath, commandContent);
|
|
194
|
+
generatedCount++;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Generate command files for tools
|
|
198
|
+
for (const tool of standaloneTools) {
|
|
199
|
+
const commandContent = this.generateCommandContent(tool, 'tool');
|
|
200
|
+
// Use underscore format: bmad_bmm_name.md
|
|
201
|
+
const flatName = toDashPath(`${tool.module}/tools/${tool.name}.md`);
|
|
202
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
203
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
204
|
+
await fs.writeFile(commandPath, commandContent);
|
|
205
|
+
generatedCount++;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
generated: generatedCount,
|
|
210
|
+
tasks: standaloneTasks.length,
|
|
211
|
+
tools: standaloneTools.length,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Write task/tool artifacts using underscore format (Windows-compatible)
|
|
217
|
+
* Creates flat files like: bmad_bmm_bmad-help.md
|
|
218
|
+
*
|
|
219
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
220
|
+
* @param {Array} artifacts - Task/tool artifacts with relativePath
|
|
221
|
+
* @returns {number} Count of commands written
|
|
222
|
+
*/
|
|
223
|
+
async writeColonArtifacts(baseCommandsDir, artifacts) {
|
|
224
|
+
let writtenCount = 0;
|
|
225
|
+
|
|
226
|
+
for (const artifact of artifacts) {
|
|
227
|
+
if (artifact.type === 'task' || artifact.type === 'tool') {
|
|
228
|
+
const commandContent = this.generateCommandContent(artifact, artifact.type);
|
|
229
|
+
// Use underscore format: bmad_module_name.md
|
|
230
|
+
const flatName = toColonPath(artifact.relativePath);
|
|
231
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
232
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
233
|
+
await fs.writeFile(commandPath, commandContent);
|
|
234
|
+
writtenCount++;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return writtenCount;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Write task/tool artifacts using dash format (NEW STANDARD)
|
|
243
|
+
* Creates flat files like: bmad-bmm-bmad-help.md
|
|
244
|
+
*
|
|
245
|
+
* Note: Tasks/tools do NOT have bmad-agent- prefix - only agents do.
|
|
246
|
+
*
|
|
247
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
248
|
+
* @param {Array} artifacts - Task/tool artifacts with relativePath
|
|
249
|
+
* @returns {number} Count of commands written
|
|
250
|
+
*/
|
|
251
|
+
async writeDashArtifacts(baseCommandsDir, artifacts) {
|
|
252
|
+
let writtenCount = 0;
|
|
253
|
+
|
|
254
|
+
for (const artifact of artifacts) {
|
|
255
|
+
if (artifact.type === 'task' || artifact.type === 'tool') {
|
|
256
|
+
const commandContent = this.generateCommandContent(artifact, artifact.type);
|
|
257
|
+
// Use dash format: bmad-module-name.md
|
|
258
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
259
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
260
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
261
|
+
await fs.writeFile(commandPath, commandContent);
|
|
262
|
+
writtenCount++;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return writtenCount;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
module.exports = { TaskToolCommandGenerator };
|