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,227 @@
|
|
|
1
|
+
# BMAD Platform Codes Configuration
|
|
2
|
+
# Central configuration for all platform/IDE codes used in the BMAD system
|
|
3
|
+
#
|
|
4
|
+
# This file defines:
|
|
5
|
+
# 1. Platform metadata (name, preferred status, category, description)
|
|
6
|
+
# 2. Installer configuration (target directories, templates, artifact types)
|
|
7
|
+
#
|
|
8
|
+
# Format:
|
|
9
|
+
# code: Platform identifier used internally
|
|
10
|
+
# name: Display name shown to users
|
|
11
|
+
# preferred: Whether this platform is shown as a recommended option on install
|
|
12
|
+
# category: Type of platform (ide, cli, tool, service)
|
|
13
|
+
# description: Brief description of the platform
|
|
14
|
+
# installer: Installation configuration (optional - omit for custom installers)
|
|
15
|
+
|
|
16
|
+
platforms:
|
|
17
|
+
antigravity:
|
|
18
|
+
name: "Google Antigravity"
|
|
19
|
+
preferred: false
|
|
20
|
+
category: ide
|
|
21
|
+
description: "Google's AI development environment"
|
|
22
|
+
installer:
|
|
23
|
+
target_dir: .agent/workflows
|
|
24
|
+
template_type: antigravity
|
|
25
|
+
|
|
26
|
+
auggie:
|
|
27
|
+
name: "Auggie"
|
|
28
|
+
preferred: false
|
|
29
|
+
category: cli
|
|
30
|
+
description: "AI development tool"
|
|
31
|
+
installer:
|
|
32
|
+
target_dir: .augment/commands
|
|
33
|
+
template_type: default
|
|
34
|
+
|
|
35
|
+
claude-code:
|
|
36
|
+
name: "Claude Code"
|
|
37
|
+
preferred: true
|
|
38
|
+
category: cli
|
|
39
|
+
description: "Anthropic's official CLI for Claude"
|
|
40
|
+
installer:
|
|
41
|
+
target_dir: .claude/commands
|
|
42
|
+
template_type: default
|
|
43
|
+
|
|
44
|
+
cline:
|
|
45
|
+
name: "Cline"
|
|
46
|
+
preferred: false
|
|
47
|
+
category: ide
|
|
48
|
+
description: "AI coding assistant"
|
|
49
|
+
installer:
|
|
50
|
+
target_dir: .clinerules/workflows
|
|
51
|
+
template_type: windsurf
|
|
52
|
+
|
|
53
|
+
codex:
|
|
54
|
+
name: "Codex"
|
|
55
|
+
preferred: false
|
|
56
|
+
category: cli
|
|
57
|
+
description: "OpenAI Codex integration"
|
|
58
|
+
# No installer config - uses custom codex.js
|
|
59
|
+
|
|
60
|
+
crush:
|
|
61
|
+
name: "Crush"
|
|
62
|
+
preferred: false
|
|
63
|
+
category: ide
|
|
64
|
+
description: "AI development assistant"
|
|
65
|
+
installer:
|
|
66
|
+
target_dir: .crush/commands
|
|
67
|
+
template_type: default
|
|
68
|
+
|
|
69
|
+
cursor:
|
|
70
|
+
name: "Cursor"
|
|
71
|
+
preferred: true
|
|
72
|
+
category: ide
|
|
73
|
+
description: "AI-first code editor"
|
|
74
|
+
installer:
|
|
75
|
+
target_dir: .cursor/commands
|
|
76
|
+
template_type: default
|
|
77
|
+
|
|
78
|
+
gemini:
|
|
79
|
+
name: "Gemini CLI"
|
|
80
|
+
preferred: false
|
|
81
|
+
category: cli
|
|
82
|
+
description: "Google's CLI for Gemini"
|
|
83
|
+
installer:
|
|
84
|
+
target_dir: .gemini/commands
|
|
85
|
+
template_type: gemini
|
|
86
|
+
|
|
87
|
+
github-copilot:
|
|
88
|
+
name: "GitHub Copilot"
|
|
89
|
+
preferred: false
|
|
90
|
+
category: ide
|
|
91
|
+
description: "GitHub's AI pair programmer"
|
|
92
|
+
installer:
|
|
93
|
+
targets:
|
|
94
|
+
- target_dir: .github/agents
|
|
95
|
+
template_type: copilot_agents
|
|
96
|
+
artifact_types: [agents]
|
|
97
|
+
- target_dir: .vscode
|
|
98
|
+
template_type: vscode_settings
|
|
99
|
+
artifact_types: []
|
|
100
|
+
|
|
101
|
+
iflow:
|
|
102
|
+
name: "iFlow"
|
|
103
|
+
preferred: false
|
|
104
|
+
category: ide
|
|
105
|
+
description: "AI workflow automation"
|
|
106
|
+
installer:
|
|
107
|
+
target_dir: .iflow/commands
|
|
108
|
+
template_type: default
|
|
109
|
+
|
|
110
|
+
kilo:
|
|
111
|
+
name: "KiloCoder"
|
|
112
|
+
preferred: false
|
|
113
|
+
category: ide
|
|
114
|
+
description: "AI coding platform"
|
|
115
|
+
# No installer config - uses custom kilo.js (creates .kilocodemodes file)
|
|
116
|
+
|
|
117
|
+
kiro-cli:
|
|
118
|
+
name: "Kiro CLI"
|
|
119
|
+
preferred: false
|
|
120
|
+
category: cli
|
|
121
|
+
description: "Kiro command-line interface"
|
|
122
|
+
# No installer config - uses custom kiro-cli.js (YAML→JSON conversion)
|
|
123
|
+
|
|
124
|
+
opencode:
|
|
125
|
+
name: "OpenCode"
|
|
126
|
+
preferred: false
|
|
127
|
+
category: ide
|
|
128
|
+
description: "OpenCode terminal coding assistant"
|
|
129
|
+
installer:
|
|
130
|
+
target_dir: .opencode/command
|
|
131
|
+
template_type: opencode
|
|
132
|
+
|
|
133
|
+
qwen:
|
|
134
|
+
name: "QwenCoder"
|
|
135
|
+
preferred: false
|
|
136
|
+
category: ide
|
|
137
|
+
description: "Qwen AI coding assistant"
|
|
138
|
+
installer:
|
|
139
|
+
target_dir: .qwen/commands
|
|
140
|
+
template_type: default
|
|
141
|
+
|
|
142
|
+
roo:
|
|
143
|
+
name: "Roo Cline"
|
|
144
|
+
preferred: false
|
|
145
|
+
category: ide
|
|
146
|
+
description: "Enhanced Cline fork"
|
|
147
|
+
installer:
|
|
148
|
+
target_dir: .roo/commands
|
|
149
|
+
template_type: default
|
|
150
|
+
|
|
151
|
+
rovo-dev:
|
|
152
|
+
name: "Rovo Dev"
|
|
153
|
+
preferred: false
|
|
154
|
+
category: ide
|
|
155
|
+
description: "Atlassian's Rovo development environment"
|
|
156
|
+
installer:
|
|
157
|
+
target_dir: .rovodev/workflows
|
|
158
|
+
template_type: rovodev
|
|
159
|
+
|
|
160
|
+
trae:
|
|
161
|
+
name: "Trae"
|
|
162
|
+
preferred: false
|
|
163
|
+
category: ide
|
|
164
|
+
description: "AI coding tool"
|
|
165
|
+
installer:
|
|
166
|
+
target_dir: .trae/rules
|
|
167
|
+
template_type: trae
|
|
168
|
+
|
|
169
|
+
windsurf:
|
|
170
|
+
name: "Windsurf"
|
|
171
|
+
preferred: true
|
|
172
|
+
category: ide
|
|
173
|
+
description: "AI-powered IDE with cascade flows"
|
|
174
|
+
installer:
|
|
175
|
+
target_dir: .windsurf/workflows
|
|
176
|
+
template_type: windsurf
|
|
177
|
+
|
|
178
|
+
# ============================================================================
|
|
179
|
+
# Installer Config Schema
|
|
180
|
+
# ============================================================================
|
|
181
|
+
#
|
|
182
|
+
# installer:
|
|
183
|
+
# target_dir: string # Directory where artifacts are installed
|
|
184
|
+
# template_type: string # Default template type to use
|
|
185
|
+
# header_template: string (optional) # Override for header/frontmatter template
|
|
186
|
+
# body_template: string (optional) # Override for body/content template
|
|
187
|
+
# targets: array (optional) # For multi-target installations
|
|
188
|
+
# - target_dir: string
|
|
189
|
+
# template_type: string
|
|
190
|
+
# artifact_types: [agents, workflows, tasks, tools]
|
|
191
|
+
# artifact_types: array (optional) # Filter which artifacts to install (default: all)
|
|
192
|
+
# skip_existing: boolean (optional) # Skip files that already exist (default: false)
|
|
193
|
+
|
|
194
|
+
# ============================================================================
|
|
195
|
+
# Platform Categories
|
|
196
|
+
# ============================================================================
|
|
197
|
+
|
|
198
|
+
categories:
|
|
199
|
+
ide:
|
|
200
|
+
name: "Integrated Development Environment"
|
|
201
|
+
description: "Full-featured code editors with AI assistance"
|
|
202
|
+
|
|
203
|
+
cli:
|
|
204
|
+
name: "Command Line Interface"
|
|
205
|
+
description: "Terminal-based tools"
|
|
206
|
+
|
|
207
|
+
tool:
|
|
208
|
+
name: "Development Tool"
|
|
209
|
+
description: "Standalone development utilities"
|
|
210
|
+
|
|
211
|
+
service:
|
|
212
|
+
name: "Cloud Service"
|
|
213
|
+
description: "Cloud-based development platforms"
|
|
214
|
+
|
|
215
|
+
extension:
|
|
216
|
+
name: "Editor Extension"
|
|
217
|
+
description: "Plugins for existing editors"
|
|
218
|
+
|
|
219
|
+
# ============================================================================
|
|
220
|
+
# Naming Conventions and Rules
|
|
221
|
+
# ============================================================================
|
|
222
|
+
|
|
223
|
+
conventions:
|
|
224
|
+
code_format: "lowercase-kebab-case"
|
|
225
|
+
name_format: "Title Case"
|
|
226
|
+
max_code_length: 20
|
|
227
|
+
allowed_characters: "a-z0-9-"
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const { toColonPath, toDashPath, customAgentColonName, customAgentDashName } = require('./path-utils');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generates launcher command files for each agent
|
|
8
|
+
* Similar to WorkflowCommandGenerator but for agents
|
|
9
|
+
*/
|
|
10
|
+
class AgentCommandGenerator {
|
|
11
|
+
constructor(bmadFolderName = 'bmad') {
|
|
12
|
+
this.templatePath = path.join(__dirname, '../templates/agent-command-template.md');
|
|
13
|
+
this.bmadFolderName = bmadFolderName;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Collect agent artifacts for IDE installation
|
|
18
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
19
|
+
* @param {Array} selectedModules - Modules to include
|
|
20
|
+
* @returns {Object} Artifacts array with metadata
|
|
21
|
+
*/
|
|
22
|
+
async collectAgentArtifacts(bmadDir, selectedModules = []) {
|
|
23
|
+
const { getAgentsFromBmad } = require('./bmad-artifacts');
|
|
24
|
+
|
|
25
|
+
// Get agents from INSTALLED bmad/ directory
|
|
26
|
+
const agents = await getAgentsFromBmad(bmadDir, selectedModules);
|
|
27
|
+
|
|
28
|
+
const artifacts = [];
|
|
29
|
+
|
|
30
|
+
for (const agent of agents) {
|
|
31
|
+
const launcherContent = await this.generateLauncherContent(agent);
|
|
32
|
+
// Use relativePath if available (for nested agents), otherwise just name with .md
|
|
33
|
+
const agentPathInModule = agent.relativePath || `${agent.name}.md`;
|
|
34
|
+
// Calculate the relative agent path (e.g., bmm/agents/pm.md)
|
|
35
|
+
let agentRelPath = agent.path || '';
|
|
36
|
+
// Normalize path separators for cross-platform compatibility
|
|
37
|
+
agentRelPath = agentRelPath.replaceAll('\\', '/');
|
|
38
|
+
// Remove _bmad/ prefix if present to get relative path from project root
|
|
39
|
+
// Handle both absolute paths (/path/to/_bmad/...) and relative paths (_bmad/...)
|
|
40
|
+
if (agentRelPath.includes('_bmad/')) {
|
|
41
|
+
const parts = agentRelPath.split(/_bmad\//);
|
|
42
|
+
if (parts.length > 1) {
|
|
43
|
+
agentRelPath = parts.slice(1).join('/');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
artifacts.push({
|
|
47
|
+
type: 'agent-launcher',
|
|
48
|
+
name: agent.name,
|
|
49
|
+
description: agent.description || `${agent.name} agent`,
|
|
50
|
+
module: agent.module,
|
|
51
|
+
relativePath: path.join(agent.module, 'agents', agentPathInModule), // For command filename
|
|
52
|
+
agentPath: agentRelPath, // Relative path to actual agent file
|
|
53
|
+
content: launcherContent,
|
|
54
|
+
sourcePath: agent.path,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
artifacts,
|
|
60
|
+
counts: {
|
|
61
|
+
agents: agents.length,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Generate launcher content for an agent
|
|
68
|
+
* @param {Object} agent - Agent metadata
|
|
69
|
+
* @returns {string} Launcher file content
|
|
70
|
+
*/
|
|
71
|
+
async generateLauncherContent(agent) {
|
|
72
|
+
// Load the template
|
|
73
|
+
const template = await fs.readFile(this.templatePath, 'utf8');
|
|
74
|
+
|
|
75
|
+
// Replace template variables
|
|
76
|
+
// Use relativePath if available (for nested agents), otherwise just name with .md
|
|
77
|
+
const agentPathInModule = agent.relativePath || `${agent.name}.md`;
|
|
78
|
+
return template
|
|
79
|
+
.replaceAll('{{name}}', agent.name)
|
|
80
|
+
.replaceAll('{{module}}', agent.module)
|
|
81
|
+
.replaceAll('{{path}}', agentPathInModule)
|
|
82
|
+
.replaceAll('{{description}}', agent.description || `${agent.name} agent`)
|
|
83
|
+
.replaceAll('_bmad', this.bmadFolderName)
|
|
84
|
+
.replaceAll('_bmad', '_bmad');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Write agent launcher artifacts to IDE commands directory
|
|
89
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
90
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
91
|
+
* @returns {number} Count of launchers written
|
|
92
|
+
*/
|
|
93
|
+
async writeAgentLaunchers(baseCommandsDir, artifacts) {
|
|
94
|
+
let writtenCount = 0;
|
|
95
|
+
|
|
96
|
+
for (const artifact of artifacts) {
|
|
97
|
+
if (artifact.type === 'agent-launcher') {
|
|
98
|
+
const moduleAgentsDir = path.join(baseCommandsDir, artifact.module, 'agents');
|
|
99
|
+
await fs.ensureDir(moduleAgentsDir);
|
|
100
|
+
|
|
101
|
+
const launcherPath = path.join(moduleAgentsDir, `${artifact.name}.md`);
|
|
102
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
103
|
+
writtenCount++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return writtenCount;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Write agent launcher artifacts using underscore format (Windows-compatible)
|
|
112
|
+
* Creates flat files like: bmad_bmm_pm.md
|
|
113
|
+
*
|
|
114
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
115
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
116
|
+
* @returns {number} Count of launchers written
|
|
117
|
+
*/
|
|
118
|
+
async writeColonArtifacts(baseCommandsDir, artifacts) {
|
|
119
|
+
let writtenCount = 0;
|
|
120
|
+
|
|
121
|
+
for (const artifact of artifacts) {
|
|
122
|
+
if (artifact.type === 'agent-launcher') {
|
|
123
|
+
// Convert relativePath to underscore format: bmm/agents/pm.md → bmad_bmm_pm.md
|
|
124
|
+
const flatName = toColonPath(artifact.relativePath);
|
|
125
|
+
const launcherPath = path.join(baseCommandsDir, flatName);
|
|
126
|
+
await fs.ensureDir(path.dirname(launcherPath));
|
|
127
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
128
|
+
writtenCount++;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return writtenCount;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Write agent launcher artifacts using dash format (NEW STANDARD)
|
|
137
|
+
* Creates flat files like: bmad-agent-bmm-pm.md
|
|
138
|
+
*
|
|
139
|
+
* The bmad-agent- prefix distinguishes agents from workflows/tasks/tools.
|
|
140
|
+
*
|
|
141
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
142
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
143
|
+
* @returns {number} Count of launchers written
|
|
144
|
+
*/
|
|
145
|
+
async writeDashArtifacts(baseCommandsDir, artifacts) {
|
|
146
|
+
let writtenCount = 0;
|
|
147
|
+
|
|
148
|
+
for (const artifact of artifacts) {
|
|
149
|
+
if (artifact.type === 'agent-launcher') {
|
|
150
|
+
// Convert relativePath to dash format: bmm/agents/pm.md → bmad-agent-bmm-pm.md
|
|
151
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
152
|
+
const launcherPath = path.join(baseCommandsDir, flatName);
|
|
153
|
+
await fs.ensureDir(path.dirname(launcherPath));
|
|
154
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
155
|
+
writtenCount++;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return writtenCount;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Get the custom agent name in underscore format (Windows-compatible)
|
|
164
|
+
* @param {string} agentName - Custom agent name
|
|
165
|
+
* @returns {string} Underscore-formatted filename
|
|
166
|
+
*/
|
|
167
|
+
getCustomAgentColonName(agentName) {
|
|
168
|
+
return customAgentColonName(agentName);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Get the custom agent name in underscore format (Windows-compatible)
|
|
173
|
+
* @param {string} agentName - Custom agent name
|
|
174
|
+
* @returns {string} Underscore-formatted filename
|
|
175
|
+
*/
|
|
176
|
+
getCustomAgentDashName(agentName) {
|
|
177
|
+
return customAgentDashName(agentName);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
module.exports = { AgentCommandGenerator };
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Helpers for gathering BMAD agents/tasks from the installed tree.
|
|
6
|
+
* Shared by installers that need Claude-style exports.
|
|
7
|
+
*/
|
|
8
|
+
async function getAgentsFromBmad(bmadDir, selectedModules = []) {
|
|
9
|
+
const agents = [];
|
|
10
|
+
|
|
11
|
+
// Get core agents
|
|
12
|
+
if (await fs.pathExists(path.join(bmadDir, 'core', 'agents'))) {
|
|
13
|
+
const coreAgents = await getAgentsFromDir(path.join(bmadDir, 'core', 'agents'), 'core');
|
|
14
|
+
agents.push(...coreAgents);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Get module agents
|
|
18
|
+
for (const moduleName of selectedModules) {
|
|
19
|
+
const agentsPath = path.join(bmadDir, moduleName, 'agents');
|
|
20
|
+
|
|
21
|
+
if (await fs.pathExists(agentsPath)) {
|
|
22
|
+
const moduleAgents = await getAgentsFromDir(agentsPath, moduleName);
|
|
23
|
+
agents.push(...moduleAgents);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Get standalone agents from bmad/agents/ directory
|
|
28
|
+
const standaloneAgentsDir = path.join(bmadDir, 'agents');
|
|
29
|
+
if (await fs.pathExists(standaloneAgentsDir)) {
|
|
30
|
+
const agentDirs = await fs.readdir(standaloneAgentsDir, { withFileTypes: true });
|
|
31
|
+
|
|
32
|
+
for (const agentDir of agentDirs) {
|
|
33
|
+
if (!agentDir.isDirectory()) continue;
|
|
34
|
+
|
|
35
|
+
const agentDirPath = path.join(standaloneAgentsDir, agentDir.name);
|
|
36
|
+
const agentFiles = await fs.readdir(agentDirPath);
|
|
37
|
+
|
|
38
|
+
for (const file of agentFiles) {
|
|
39
|
+
if (!file.endsWith('.md')) continue;
|
|
40
|
+
if (file.includes('.customize.')) continue;
|
|
41
|
+
|
|
42
|
+
const filePath = path.join(agentDirPath, file);
|
|
43
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
44
|
+
|
|
45
|
+
if (content.includes('localskip="true"')) continue;
|
|
46
|
+
|
|
47
|
+
agents.push({
|
|
48
|
+
path: filePath,
|
|
49
|
+
name: file.replace('.md', ''),
|
|
50
|
+
module: 'standalone', // Mark as standalone agent
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return agents;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function getTasksFromBmad(bmadDir, selectedModules = []) {
|
|
60
|
+
const tasks = [];
|
|
61
|
+
|
|
62
|
+
if (await fs.pathExists(path.join(bmadDir, 'core', 'tasks'))) {
|
|
63
|
+
const coreTasks = await getTasksFromDir(path.join(bmadDir, 'core', 'tasks'), 'core');
|
|
64
|
+
tasks.push(...coreTasks);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
for (const moduleName of selectedModules) {
|
|
68
|
+
const tasksPath = path.join(bmadDir, moduleName, 'tasks');
|
|
69
|
+
|
|
70
|
+
if (await fs.pathExists(tasksPath)) {
|
|
71
|
+
const moduleTasks = await getTasksFromDir(tasksPath, moduleName);
|
|
72
|
+
tasks.push(...moduleTasks);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return tasks;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function getAgentsFromDir(dirPath, moduleName, relativePath = '') {
|
|
80
|
+
const agents = [];
|
|
81
|
+
|
|
82
|
+
if (!(await fs.pathExists(dirPath))) {
|
|
83
|
+
return agents;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
87
|
+
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
// Skip if entry.name is undefined or not a string
|
|
90
|
+
if (!entry.name || typeof entry.name !== 'string') {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
95
|
+
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
96
|
+
|
|
97
|
+
if (entry.isDirectory()) {
|
|
98
|
+
// Recurse into subdirectories
|
|
99
|
+
const subDirAgents = await getAgentsFromDir(fullPath, moduleName, newRelativePath);
|
|
100
|
+
agents.push(...subDirAgents);
|
|
101
|
+
} else if (entry.name.endsWith('.md')) {
|
|
102
|
+
// Skip README files and other non-agent files
|
|
103
|
+
if (entry.name.toLowerCase() === 'readme.md' || entry.name.toLowerCase().startsWith('readme-')) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (entry.name.includes('.customize.')) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const content = await fs.readFile(fullPath, 'utf8');
|
|
112
|
+
|
|
113
|
+
if (content.includes('localskip="true"')) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Only include files that have agent-specific content (compiled agents have <agent> tag)
|
|
118
|
+
if (!content.includes('<agent')) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
agents.push({
|
|
123
|
+
path: fullPath,
|
|
124
|
+
name: entry.name.replace('.md', ''),
|
|
125
|
+
module: moduleName,
|
|
126
|
+
relativePath: newRelativePath, // Keep the .md extension for the full path
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return agents;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async function getTasksFromDir(dirPath, moduleName) {
|
|
135
|
+
const tasks = [];
|
|
136
|
+
|
|
137
|
+
if (!(await fs.pathExists(dirPath))) {
|
|
138
|
+
return tasks;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const files = await fs.readdir(dirPath);
|
|
142
|
+
|
|
143
|
+
for (const file of files) {
|
|
144
|
+
if (!file.endsWith('.md')) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
tasks.push({
|
|
149
|
+
path: path.join(dirPath, file),
|
|
150
|
+
name: file.replace('.md', ''),
|
|
151
|
+
module: moduleName,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return tasks;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
module.exports = {
|
|
159
|
+
getAgentsFromBmad,
|
|
160
|
+
getTasksFromBmad,
|
|
161
|
+
getAgentsFromDir,
|
|
162
|
+
getTasksFromDir,
|
|
163
|
+
};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const yaml = require('yaml');
|
|
4
|
+
const { glob } = require('glob');
|
|
5
|
+
const { getSourcePath } = require('../../../../lib/project-root');
|
|
6
|
+
|
|
7
|
+
async function loadModuleInjectionConfig(handler, moduleName) {
|
|
8
|
+
const sourceModulesPath = getSourcePath('modules');
|
|
9
|
+
const handlerBaseDir = path.join(sourceModulesPath, moduleName, 'sub-modules', handler);
|
|
10
|
+
const configPath = path.join(handlerBaseDir, 'injections.yaml');
|
|
11
|
+
|
|
12
|
+
if (!(await fs.pathExists(configPath))) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const configContent = await fs.readFile(configPath, 'utf8');
|
|
17
|
+
const config = yaml.parse(configContent) || {};
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
config,
|
|
21
|
+
handlerBaseDir,
|
|
22
|
+
configPath,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function shouldApplyInjection(injection, subagentChoices) {
|
|
27
|
+
if (!subagentChoices || subagentChoices.install === 'none') {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (subagentChoices.install === 'all') {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (subagentChoices.install === 'selective') {
|
|
36
|
+
const selected = subagentChoices.selected || [];
|
|
37
|
+
|
|
38
|
+
if (injection.requires === 'any' && selected.length > 0) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (injection.requires) {
|
|
43
|
+
const required = `${injection.requires}.md`;
|
|
44
|
+
return selected.includes(required);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (injection.point) {
|
|
48
|
+
const selectedNames = selected.map((file) => file.replace('.md', ''));
|
|
49
|
+
return selectedNames.some((name) => injection.point.includes(name));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function filterAgentInstructions(content, selectedFiles) {
|
|
57
|
+
if (!selectedFiles || selectedFiles.length === 0) {
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const selectedAgents = selectedFiles.map((file) => file.replace('.md', ''));
|
|
62
|
+
const lines = content.split('\n');
|
|
63
|
+
const filteredLines = [];
|
|
64
|
+
|
|
65
|
+
for (const line of lines) {
|
|
66
|
+
if (line.includes('<llm') || line.includes('</llm>')) {
|
|
67
|
+
filteredLines.push(line);
|
|
68
|
+
} else if (line.includes('subagent')) {
|
|
69
|
+
let shouldInclude = false;
|
|
70
|
+
for (const agent of selectedAgents) {
|
|
71
|
+
if (line.includes(agent)) {
|
|
72
|
+
shouldInclude = true;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (shouldInclude) {
|
|
78
|
+
filteredLines.push(line);
|
|
79
|
+
}
|
|
80
|
+
} else if (line.includes('When creating PRDs') || line.includes('ACTIVELY delegate')) {
|
|
81
|
+
filteredLines.push(line);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (filteredLines.length > 2) {
|
|
86
|
+
return filteredLines.join('\n');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async function resolveSubagentFiles(handlerBaseDir, subagentConfig, subagentChoices) {
|
|
93
|
+
if (!subagentConfig || !subagentConfig.files) {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (!subagentChoices || subagentChoices.install === 'none') {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
let filesToCopy = subagentConfig.files;
|
|
102
|
+
|
|
103
|
+
if (subagentChoices.install === 'selective') {
|
|
104
|
+
filesToCopy = subagentChoices.selected || [];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const sourceDir = path.join(handlerBaseDir, subagentConfig.source || '');
|
|
108
|
+
const resolved = [];
|
|
109
|
+
|
|
110
|
+
for (const file of filesToCopy) {
|
|
111
|
+
// Use forward slashes for glob pattern (works on both Windows and Unix)
|
|
112
|
+
// Convert backslashes to forward slashes for glob compatibility
|
|
113
|
+
const normalizedSourceDir = sourceDir.replaceAll('\\', '/');
|
|
114
|
+
const pattern = `${normalizedSourceDir}/**/${file}`;
|
|
115
|
+
const matches = await glob(pattern);
|
|
116
|
+
|
|
117
|
+
if (matches.length > 0) {
|
|
118
|
+
const absolutePath = matches[0];
|
|
119
|
+
resolved.push({
|
|
120
|
+
file,
|
|
121
|
+
absolutePath,
|
|
122
|
+
relativePath: path.relative(sourceDir, absolutePath),
|
|
123
|
+
sourceDir,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return resolved;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
module.exports = {
|
|
132
|
+
loadModuleInjectionConfig,
|
|
133
|
+
shouldApplyInjection,
|
|
134
|
+
filterAgentInstructions,
|
|
135
|
+
resolveSubagentFiles,
|
|
136
|
+
};
|