observer-ggboy-bmad-method 6.0.0-alpha.23
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/.coderabbit.yaml +40 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- package/.github/FUNDING.yaml +15 -0
- package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/ISSUE_TEMPLATE/issue.md +32 -0
- package/.github/scripts/discord-helpers.sh +34 -0
- package/.github/workflows/bundle-latest.yaml +330 -0
- package/.github/workflows/discord.yaml +90 -0
- package/.github/workflows/docs.yaml +63 -0
- package/.github/workflows/manual-release.yaml +190 -0
- package/.github/workflows/quality.yaml +115 -0
- package/.health-status.json +7 -0
- package/.husky/pre-commit +20 -0
- package/.markdownlint-cli2.yaml +41 -0
- package/.nvmrc +1 -0
- package/.prettierignore +9 -0
- package/.vscode/settings.json +97 -0
- package/CHANGELOG.md +1394 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +167 -0
- package/CONTRIBUTORS.md +32 -0
- package/LICENSE +30 -0
- package/README.md +100 -0
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/Wordmark.png +0 -0
- package/banner-bmad-method.png +0 -0
- package/bmad-method-6.0.0-alpha.23.tgz +0 -0
- package/docs/404.md +9 -0
- package/docs/_README_WORKFLOW_DIAGRAMS.md +40 -0
- package/docs/_STYLE_GUIDE.md +367 -0
- package/docs/_archive/customize-workflows.md +30 -0
- package/docs/_archive/getting-started-bmadv4.md +247 -0
- package/docs/_archive/vendor-workflows.md +52 -0
- package/docs/downloads.md +72 -0
- package/docs/explanation/agents/barry-quick-flow.md +328 -0
- package/docs/explanation/agents/index.md +19 -0
- package/docs/explanation/architecture/four-phases.md +107 -0
- package/docs/explanation/architecture/preventing-agent-conflicts.md +111 -0
- package/docs/explanation/architecture/why-solutioning-matters.md +75 -0
- package/docs/explanation/bmm/index.md +131 -0
- package/docs/explanation/core/index.md +18 -0
- package/docs/explanation/core-concepts/agent-roles.md +179 -0
- package/docs/explanation/core-concepts/index.md +35 -0
- package/docs/explanation/core-concepts/what-are-agents.md +97 -0
- package/docs/explanation/core-concepts/what-are-modules.md +85 -0
- package/docs/explanation/core-concepts/what-are-workflows.md +204 -0
- package/docs/explanation/faq/brownfield-faq.md +73 -0
- package/docs/explanation/faq/getting-started-faq.md +67 -0
- package/docs/explanation/faq/implementation-faq.md +52 -0
- package/docs/explanation/faq/index.md +16 -0
- package/docs/explanation/faq/levels-and-tracks-faq.md +52 -0
- package/docs/explanation/faq/planning-faq.md +41 -0
- package/docs/explanation/faq/tools-faq.md +277 -0
- package/docs/explanation/faq/workflows-faq.md +61 -0
- package/docs/explanation/features/advanced-elicitation.md +95 -0
- package/docs/explanation/features/brainstorming-techniques.md +92 -0
- package/docs/explanation/features/party-mode.md +95 -0
- package/docs/explanation/features/quick-flow.md +149 -0
- package/docs/explanation/features/tea-overview.md +410 -0
- package/docs/explanation/features/web-bundles.md +34 -0
- package/docs/explanation/philosophy/facilitation-over-generation.md +333 -0
- package/docs/explanation/philosophy/testing-as-engineering.md +112 -0
- package/docs/explanation/tea/engagement-models.md +710 -0
- package/docs/explanation/tea/fixture-architecture.md +457 -0
- package/docs/explanation/tea/knowledge-base-system.md +554 -0
- package/docs/explanation/tea/network-first-patterns.md +853 -0
- package/docs/explanation/tea/risk-based-testing.md +586 -0
- package/docs/explanation/tea/test-quality-standards.md +907 -0
- package/docs/how-to/brownfield/add-feature-to-existing.md +74 -0
- package/docs/how-to/brownfield/document-existing-project.md +66 -0
- package/docs/how-to/brownfield/index.md +84 -0
- package/docs/how-to/brownfield/quick-fix-in-brownfield.md +77 -0
- package/docs/how-to/brownfield/use-tea-for-enterprise.md +525 -0
- package/docs/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
- package/docs/how-to/customization/customize-agents.md +212 -0
- package/docs/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
- package/docs/how-to/customization/index.md +23 -0
- package/docs/how-to/customization/integrate-playwright-utils.md +813 -0
- package/docs/how-to/customization/shard-large-documents.md +101 -0
- package/docs/how-to/get-answers-about-bmad.md +102 -0
- package/docs/how-to/installation/index.md +12 -0
- package/docs/how-to/installation/install-bmad.md +111 -0
- package/docs/how-to/installation/install-custom-modules.md +118 -0
- package/docs/how-to/installation/upgrade-to-v6.md +131 -0
- package/docs/how-to/workflows/bmgd-quick-flow.md +156 -0
- package/docs/how-to/workflows/conduct-research.md +97 -0
- package/docs/how-to/workflows/create-architecture.md +119 -0
- package/docs/how-to/workflows/create-epics-and-stories.md +109 -0
- package/docs/how-to/workflows/create-prd.md +91 -0
- package/docs/how-to/workflows/create-product-brief.md +94 -0
- package/docs/how-to/workflows/create-story.md +102 -0
- package/docs/how-to/workflows/create-ux-design.md +100 -0
- package/docs/how-to/workflows/implement-story.md +97 -0
- package/docs/how-to/workflows/quick-spec.md +122 -0
- package/docs/how-to/workflows/run-atdd.md +436 -0
- package/docs/how-to/workflows/run-automate.md +653 -0
- package/docs/how-to/workflows/run-brainstorming-session.md +73 -0
- package/docs/how-to/workflows/run-code-review.md +89 -0
- package/docs/how-to/workflows/run-implementation-readiness.md +125 -0
- package/docs/how-to/workflows/run-nfr-assess.md +679 -0
- package/docs/how-to/workflows/run-sprint-planning.md +94 -0
- package/docs/how-to/workflows/run-test-design.md +135 -0
- package/docs/how-to/workflows/run-test-review.md +605 -0
- package/docs/how-to/workflows/run-trace.md +883 -0
- package/docs/how-to/workflows/setup-ci.md +712 -0
- package/docs/how-to/workflows/setup-party-mode.md +89 -0
- package/docs/how-to/workflows/setup-test-framework.md +98 -0
- package/docs/index.md +63 -0
- package/docs/reference/agents/index.md +109 -0
- package/docs/reference/configuration/core-tasks.md +67 -0
- package/docs/reference/configuration/global-config.md +28 -0
- package/docs/reference/glossary/index.md +159 -0
- package/docs/reference/tea/commands.md +276 -0
- package/docs/reference/tea/configuration.md +678 -0
- package/docs/reference/tea/knowledge-base.md +340 -0
- package/docs/reference/workflows/core-workflows.md +32 -0
- package/docs/reference/workflows/document-project.md +73 -0
- package/docs/reference/workflows/index.md +12 -0
- package/docs/tutorials/getting-started/getting-started-bmadv6.md +246 -0
- package/docs/tutorials/getting-started/images/workflow-method-greenfield.excalidraw +5034 -0
- package/docs/tutorials/getting-started/images/workflow-method-greenfield.svg +4 -0
- package/docs/tutorials/getting-started/images/workflow-overview.jpg +0 -0
- package/docs/tutorials/getting-started/tea-lite-quickstart.md +444 -0
- package/docs/tutorials/getting-started/workflow-overview.jpg +0 -0
- package/eslint.config.mjs +152 -0
- package/package.json +117 -0
- package/prettier.config.mjs +32 -0
- package/src/bmm/_module-installer/installer.js +48 -0
- package/src/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
- package/src/bmm/_module-installer/platform-specifics/windsurf.js +32 -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/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/data/project-context-template.md +26 -0
- package/src/bmm/module-help.csv +32 -0
- package/src/bmm/module.yaml +44 -0
- package/src/bmm/sub-modules/claude-code/config.yaml +4 -0
- package/src/bmm/sub-modules/claude-code/injections.yaml +242 -0
- package/src/bmm/sub-modules/claude-code/readme.md +87 -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-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/2-plan-workflows/prd/data/domain-complexity.csv +13 -0
- package/src/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md +197 -0
- package/src/bmm/workflows/2-plan-workflows/prd/data/project-types.csv +11 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md +153 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md +213 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md +207 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md +124 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md +247 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md +249 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md +253 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md +168 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md +218 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md +10 -0
- package/src/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md +433 -0
- package/src/bmm/workflows/2-plan-workflows/prd/workflow.md +150 -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 +27 -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/quick-dev/data/project-levels.yaml +59 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +156 -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 +113 -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 +140 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -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 +191 -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 +79 -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/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/test/README.md +295 -0
- package/test/adversarial-review-tests/README.md +56 -0
- package/test/adversarial-review-tests/sample-content.md +46 -0
- package/test/adversarial-review-tests/test-cases.yaml +103 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
- package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
- package/test/test-agent-schema.js +387 -0
- package/test/test-cli-integration.sh +159 -0
- package/test/test-installation-components.js +214 -0
- package/test/unit-test-schema.js +133 -0
- package/tools/bmad-npx-wrapper.js +38 -0
- package/tools/build-docs.js +577 -0
- package/tools/cli/README.md +7 -0
- package/tools/cli/bmad-cli.js +58 -0
- package/tools/cli/commands/install.js +87 -0
- package/tools/cli/commands/status.js +65 -0
- package/tools/cli/external-official-modules.yaml +56 -0
- package/tools/cli/installers/install-messages.yaml +58 -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 +2826 -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/STANDARDIZATION_PLAN.md +208 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +655 -0
- package/tools/cli/installers/lib/ide/antigravity.js +474 -0
- package/tools/cli/installers/lib/ide/auggie.js +244 -0
- package/tools/cli/installers/lib/ide/claude-code.js +506 -0
- package/tools/cli/installers/lib/ide/cline.js +272 -0
- package/tools/cli/installers/lib/ide/codex.js +412 -0
- package/tools/cli/installers/lib/ide/crush.js +149 -0
- package/tools/cli/installers/lib/ide/cursor.js +160 -0
- package/tools/cli/installers/lib/ide/gemini.js +301 -0
- package/tools/cli/installers/lib/ide/github-copilot.js +383 -0
- package/tools/cli/installers/lib/ide/iflow.js +191 -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 +244 -0
- package/tools/cli/installers/lib/ide/opencode.js +257 -0
- package/tools/cli/installers/lib/ide/qwen.js +372 -0
- package/tools/cli/installers/lib/ide/roo.js +273 -0
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +165 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +158 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
- package/tools/cli/installers/lib/ide/shared/path-utils.js +165 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +268 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +293 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -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/ide/trae.js +313 -0
- package/tools/cli/installers/lib/ide/windsurf.js +258 -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/installer.js +716 -0
- package/tools/cli/lib/agent/template-engine.js +152 -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/file-ops.js +204 -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/ui.js +1716 -0
- package/tools/cli/lib/xml-handler.js +177 -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/index.md +2 -0
- package/tools/fix-doc-links.js +288 -0
- package/tools/flattener/aggregate.js +76 -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/ignoreRules.js +172 -0
- package/tools/flattener/main.js +483 -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/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/validate-agent-schema.js +110 -0
- package/tools/validate-doc-links.js +363 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/website/README.md +76 -0
- package/website/astro.config.mjs +228 -0
- package/website/public/favicon.ico +0 -0
- package/website/public/img/bmad-dark.png +0 -0
- package/website/public/img/bmad-light.png +0 -0
- package/website/public/img/logo.svg +4 -0
- package/website/public/robots.txt +37 -0
- package/website/src/components/Banner.astro +59 -0
- package/website/src/components/Header.astro +121 -0
- package/website/src/components/MobileMenuFooter.astro +53 -0
- package/website/src/content/config.ts +6 -0
- package/website/src/lib/site-url.js +25 -0
- package/website/src/rehype-markdown-links.js +102 -0
- package/website/src/styles/custom.css +485 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
6
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
7
|
+
const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
|
|
8
|
+
const { customAgentColonName } = require('./shared/path-utils');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Crush IDE setup handler
|
|
12
|
+
* Creates commands in .crush/commands/ directory structure using flat colon naming
|
|
13
|
+
*/
|
|
14
|
+
class CrushSetup extends BaseIdeSetup {
|
|
15
|
+
constructor() {
|
|
16
|
+
super('crush', 'Crush');
|
|
17
|
+
this.configDir = '.crush';
|
|
18
|
+
this.commandsDir = 'commands';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Setup Crush IDE configuration
|
|
23
|
+
* @param {string} projectDir - Project directory
|
|
24
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
25
|
+
* @param {Object} options - Setup options
|
|
26
|
+
*/
|
|
27
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
28
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
29
|
+
|
|
30
|
+
// Clean up old BMAD installation first
|
|
31
|
+
await this.cleanup(projectDir);
|
|
32
|
+
|
|
33
|
+
// Create .crush/commands directory
|
|
34
|
+
const crushDir = path.join(projectDir, this.configDir);
|
|
35
|
+
const commandsDir = path.join(crushDir, this.commandsDir);
|
|
36
|
+
await this.ensureDir(commandsDir);
|
|
37
|
+
|
|
38
|
+
// Use underscore format: files written directly to commands dir (no bmad subfolder)
|
|
39
|
+
// Creates: .crush/commands/bmad_bmm_pm.md
|
|
40
|
+
|
|
41
|
+
// Generate agent launchers
|
|
42
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
43
|
+
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
44
|
+
|
|
45
|
+
// Write agent launcher files using flat underscore naming
|
|
46
|
+
// Creates files like: bmad_bmm_pm.md
|
|
47
|
+
const agentCount = await agentGen.writeColonArtifacts(commandsDir, agentArtifacts);
|
|
48
|
+
|
|
49
|
+
// Get ALL workflows using the new workflow command generator
|
|
50
|
+
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
51
|
+
const { artifacts: workflowArtifacts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
52
|
+
|
|
53
|
+
// Write workflow-command artifacts using flat underscore naming
|
|
54
|
+
// Creates files like: bmad_bmm_correct-course.md
|
|
55
|
+
const workflowCount = await workflowGenerator.writeColonArtifacts(commandsDir, workflowArtifacts);
|
|
56
|
+
|
|
57
|
+
// Generate task and tool commands using flat underscore naming
|
|
58
|
+
const taskToolGen = new TaskToolCommandGenerator();
|
|
59
|
+
const taskToolResult = await taskToolGen.generateColonTaskToolCommands(projectDir, bmadDir, commandsDir);
|
|
60
|
+
|
|
61
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
62
|
+
console.log(chalk.dim(` - ${agentCount} agent commands created`));
|
|
63
|
+
console.log(chalk.dim(` - ${taskToolResult.tasks} task commands created`));
|
|
64
|
+
console.log(chalk.dim(` - ${taskToolResult.tools} tool commands created`));
|
|
65
|
+
console.log(chalk.dim(` - ${workflowCount} workflow commands created`));
|
|
66
|
+
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
|
67
|
+
console.log(chalk.dim('\n Commands can be accessed via Crush command palette'));
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
success: true,
|
|
71
|
+
agents: agentCount,
|
|
72
|
+
tasks: taskToolResult.tasks || 0,
|
|
73
|
+
tools: taskToolResult.tools || 0,
|
|
74
|
+
workflows: workflowCount,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Cleanup Crush configuration
|
|
80
|
+
*/
|
|
81
|
+
async cleanup(projectDir) {
|
|
82
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
83
|
+
|
|
84
|
+
// Remove any bmad* files from the commands directory (cleans up old bmad: and bmad- formats)
|
|
85
|
+
if (await fs.pathExists(commandsDir)) {
|
|
86
|
+
const entries = await fs.readdir(commandsDir);
|
|
87
|
+
for (const entry of entries) {
|
|
88
|
+
if (entry.startsWith('bmad')) {
|
|
89
|
+
await fs.remove(path.join(commandsDir, entry));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Also remove legacy bmad folder if it exists
|
|
94
|
+
const bmadFolder = path.join(commandsDir, 'bmad');
|
|
95
|
+
if (await fs.pathExists(bmadFolder)) {
|
|
96
|
+
await fs.remove(bmadFolder);
|
|
97
|
+
console.log(chalk.dim(`Removed BMAD commands from Crush`));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Install a custom agent launcher for Crush
|
|
103
|
+
* @param {string} projectDir - Project directory
|
|
104
|
+
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
|
105
|
+
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
|
106
|
+
* @param {Object} metadata - Agent metadata
|
|
107
|
+
* @returns {Object} Installation result
|
|
108
|
+
*/
|
|
109
|
+
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
|
110
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
111
|
+
|
|
112
|
+
// Create .crush/commands directory if it doesn't exist
|
|
113
|
+
await fs.ensureDir(commandsDir);
|
|
114
|
+
|
|
115
|
+
// Create custom agent launcher
|
|
116
|
+
const launcherContent = `# ${agentName} Custom Agent
|
|
117
|
+
|
|
118
|
+
**⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
|
|
119
|
+
|
|
120
|
+
This is a launcher for the custom BMAD agent "${agentName}".
|
|
121
|
+
|
|
122
|
+
## Usage
|
|
123
|
+
1. First run: \`${agentPath}\` to load the complete agent
|
|
124
|
+
2. Then use this command to activate ${agentName}
|
|
125
|
+
|
|
126
|
+
The agent will follow the persona and instructions from the main agent file.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
*Generated by BMAD Method*`;
|
|
131
|
+
|
|
132
|
+
// Use underscore format: bmad_custom_fred-commit-poet.md
|
|
133
|
+
// Written directly to commands dir (no bmad subfolder)
|
|
134
|
+
const launcherName = customAgentColonName(agentName);
|
|
135
|
+
const launcherPath = path.join(commandsDir, launcherName);
|
|
136
|
+
|
|
137
|
+
// Write the launcher file
|
|
138
|
+
await fs.writeFile(launcherPath, launcherContent, 'utf8');
|
|
139
|
+
|
|
140
|
+
return {
|
|
141
|
+
ide: 'crush',
|
|
142
|
+
path: path.relative(projectDir, launcherPath),
|
|
143
|
+
command: launcherName.replace('.md', ''),
|
|
144
|
+
type: 'custom-agent-launcher',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
module.exports = { CrushSetup };
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
5
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
6
|
+
const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
|
|
7
|
+
const { customAgentColonName } = require('./shared/path-utils');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Cursor IDE setup handler
|
|
11
|
+
*/
|
|
12
|
+
class CursorSetup extends BaseIdeSetup {
|
|
13
|
+
constructor() {
|
|
14
|
+
super('cursor', 'Cursor', true); // preferred IDE
|
|
15
|
+
this.configDir = '.cursor';
|
|
16
|
+
this.rulesDir = 'rules';
|
|
17
|
+
this.commandsDir = 'commands';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Cleanup old BMAD installation before reinstalling
|
|
22
|
+
* @param {string} projectDir - Project directory
|
|
23
|
+
*/
|
|
24
|
+
async cleanup(projectDir) {
|
|
25
|
+
const fs = require('fs-extra');
|
|
26
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
27
|
+
|
|
28
|
+
// Remove any bmad* files from the commands directory (cleans up old bmad: and bmad- formats)
|
|
29
|
+
if (await fs.pathExists(commandsDir)) {
|
|
30
|
+
const entries = await fs.readdir(commandsDir);
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
if (entry.startsWith('bmad')) {
|
|
33
|
+
await fs.remove(path.join(commandsDir, entry));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Also remove legacy bmad folder if it exists
|
|
38
|
+
const bmadFolder = path.join(commandsDir, 'bmad');
|
|
39
|
+
if (await fs.pathExists(bmadFolder)) {
|
|
40
|
+
await fs.remove(bmadFolder);
|
|
41
|
+
console.log(chalk.dim(` Removed old BMAD commands from ${this.name}`));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Setup Cursor IDE configuration
|
|
47
|
+
* @param {string} projectDir - Project directory
|
|
48
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
49
|
+
* @param {Object} options - Setup options
|
|
50
|
+
*/
|
|
51
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
52
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
53
|
+
|
|
54
|
+
// Clean up old BMAD installation first
|
|
55
|
+
await this.cleanup(projectDir);
|
|
56
|
+
|
|
57
|
+
// Create .cursor/commands directory structure
|
|
58
|
+
const cursorDir = path.join(projectDir, this.configDir);
|
|
59
|
+
const commandsDir = path.join(cursorDir, this.commandsDir);
|
|
60
|
+
await this.ensureDir(commandsDir);
|
|
61
|
+
|
|
62
|
+
// Use underscore format: files written directly to commands dir (no bmad subfolder)
|
|
63
|
+
// Creates: .cursor/commands/bmad_bmm_pm.md
|
|
64
|
+
|
|
65
|
+
// Generate agent launchers using AgentCommandGenerator
|
|
66
|
+
// This creates small launcher files that reference the actual agents in _bmad/
|
|
67
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
68
|
+
const { artifacts: agentArtifacts, counts: agentCounts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
69
|
+
|
|
70
|
+
// Write agent launcher files using flat underscore naming
|
|
71
|
+
// Creates files like: bmad_bmm_pm.md
|
|
72
|
+
const agentCount = await agentGen.writeColonArtifacts(commandsDir, agentArtifacts);
|
|
73
|
+
|
|
74
|
+
// Generate workflow commands from manifest (if it exists)
|
|
75
|
+
const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
76
|
+
const { artifacts: workflowArtifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir);
|
|
77
|
+
|
|
78
|
+
// Write workflow-command artifacts using flat underscore naming
|
|
79
|
+
// Creates files like: bmad_bmm_correct-course.md
|
|
80
|
+
const workflowCommandCount = await workflowGen.writeColonArtifacts(commandsDir, workflowArtifacts);
|
|
81
|
+
|
|
82
|
+
// Generate task and tool commands from manifests (if they exist)
|
|
83
|
+
const taskToolGen = new TaskToolCommandGenerator();
|
|
84
|
+
const taskToolResult = await taskToolGen.generateColonTaskToolCommands(projectDir, bmadDir, commandsDir);
|
|
85
|
+
|
|
86
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
87
|
+
console.log(chalk.dim(` - ${agentCount} agents installed`));
|
|
88
|
+
if (workflowCommandCount > 0) {
|
|
89
|
+
console.log(chalk.dim(` - ${workflowCommandCount} workflow commands generated`));
|
|
90
|
+
}
|
|
91
|
+
if (taskToolResult.generated > 0) {
|
|
92
|
+
console.log(
|
|
93
|
+
chalk.dim(
|
|
94
|
+
` - ${taskToolResult.generated} task/tool commands generated (${taskToolResult.tasks} tasks, ${taskToolResult.tools} tools)`,
|
|
95
|
+
),
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
success: true,
|
|
102
|
+
agents: agentCount,
|
|
103
|
+
tasks: taskToolResult.tasks || 0,
|
|
104
|
+
tools: taskToolResult.tools || 0,
|
|
105
|
+
workflows: workflowCommandCount,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Install a custom agent launcher for Cursor
|
|
111
|
+
* @param {string} projectDir - Project directory
|
|
112
|
+
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
|
113
|
+
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
|
114
|
+
* @param {Object} metadata - Agent metadata
|
|
115
|
+
* @returns {Object|null} Info about created command
|
|
116
|
+
*/
|
|
117
|
+
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
|
118
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
119
|
+
|
|
120
|
+
if (!(await this.exists(path.join(projectDir, this.configDir)))) {
|
|
121
|
+
return null; // IDE not configured for this project
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
await this.ensureDir(commandsDir);
|
|
125
|
+
|
|
126
|
+
const launcherContent = `You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
127
|
+
|
|
128
|
+
<agent-activation CRITICAL="TRUE">
|
|
129
|
+
1. LOAD the FULL agent file from @${agentPath}
|
|
130
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
131
|
+
3. FOLLOW every step in the <activation> section precisely
|
|
132
|
+
4. DISPLAY the welcome/greeting as instructed
|
|
133
|
+
5. PRESENT the numbered menu
|
|
134
|
+
6. WAIT for user input before proceeding
|
|
135
|
+
</agent-activation>
|
|
136
|
+
`;
|
|
137
|
+
|
|
138
|
+
// Cursor uses YAML frontmatter matching Claude Code format
|
|
139
|
+
const commandContent = `---
|
|
140
|
+
name: '${agentName}'
|
|
141
|
+
description: '${agentName} agent'
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
${launcherContent}
|
|
145
|
+
`;
|
|
146
|
+
|
|
147
|
+
// Use underscore format: bmad_custom_fred-commit-poet.md
|
|
148
|
+
// Written directly to commands dir (no bmad subfolder)
|
|
149
|
+
const launcherName = customAgentColonName(agentName);
|
|
150
|
+
const launcherPath = path.join(commandsDir, launcherName);
|
|
151
|
+
await this.writeFile(launcherPath, commandContent);
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
path: launcherPath,
|
|
155
|
+
command: `/${launcherName.replace('.md', '')}`,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
module.exports = { CursorSetup };
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const yaml = require('yaml');
|
|
4
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
5
|
+
const chalk = require('chalk');
|
|
6
|
+
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
7
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Gemini CLI setup handler
|
|
11
|
+
* Creates TOML files in .gemini/commands/ structure
|
|
12
|
+
*/
|
|
13
|
+
class GeminiSetup extends BaseIdeSetup {
|
|
14
|
+
constructor() {
|
|
15
|
+
super('gemini', 'Gemini CLI', false);
|
|
16
|
+
this.configDir = '.gemini';
|
|
17
|
+
this.commandsDir = 'commands';
|
|
18
|
+
this.agentTemplatePath = path.join(__dirname, 'templates', 'gemini-agent-command.toml');
|
|
19
|
+
this.taskTemplatePath = path.join(__dirname, 'templates', 'gemini-task-command.toml');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Load config values from bmad installation
|
|
24
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
25
|
+
* @returns {Object} Config values
|
|
26
|
+
*/
|
|
27
|
+
async loadConfigValues(bmadDir) {
|
|
28
|
+
const configValues = {
|
|
29
|
+
user_name: 'User', // Default fallback
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// Try to load core config.yaml
|
|
33
|
+
const coreConfigPath = path.join(bmadDir, 'core', 'config.yaml');
|
|
34
|
+
if (await fs.pathExists(coreConfigPath)) {
|
|
35
|
+
try {
|
|
36
|
+
const configContent = await fs.readFile(coreConfigPath, 'utf8');
|
|
37
|
+
const config = yaml.parse(configContent);
|
|
38
|
+
|
|
39
|
+
if (config.user_name) {
|
|
40
|
+
configValues.user_name = config.user_name;
|
|
41
|
+
}
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.warn(chalk.yellow(` Warning: Could not load config values: ${error.message}`));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return configValues;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Setup Gemini CLI configuration
|
|
52
|
+
* @param {string} projectDir - Project directory
|
|
53
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
54
|
+
* @param {Object} options - Setup options
|
|
55
|
+
*/
|
|
56
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
57
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
58
|
+
|
|
59
|
+
// Create .gemini/commands directory (flat structure with bmad- prefix)
|
|
60
|
+
const geminiDir = path.join(projectDir, this.configDir);
|
|
61
|
+
const commandsDir = path.join(geminiDir, this.commandsDir);
|
|
62
|
+
|
|
63
|
+
await this.ensureDir(commandsDir);
|
|
64
|
+
|
|
65
|
+
// Clean up any existing BMAD files before reinstalling
|
|
66
|
+
await this.cleanup(projectDir);
|
|
67
|
+
|
|
68
|
+
// Generate agent launchers
|
|
69
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
70
|
+
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
71
|
+
|
|
72
|
+
// Get tasks and workflows (ALL workflows now generate commands)
|
|
73
|
+
const tasks = await this.getTasks(bmadDir);
|
|
74
|
+
|
|
75
|
+
// Get ALL workflows using the new workflow command generator
|
|
76
|
+
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
77
|
+
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
78
|
+
|
|
79
|
+
// Install agents as TOML files with bmad- prefix (flat structure)
|
|
80
|
+
let agentCount = 0;
|
|
81
|
+
for (const artifact of agentArtifacts) {
|
|
82
|
+
const tomlContent = await this.createAgentLauncherToml(artifact);
|
|
83
|
+
|
|
84
|
+
// Flat structure: bmad-agent-{module}-{name}.toml
|
|
85
|
+
const tomlPath = path.join(commandsDir, `bmad-agent-${artifact.module}-${artifact.name}.toml`);
|
|
86
|
+
await this.writeFile(tomlPath, tomlContent);
|
|
87
|
+
agentCount++;
|
|
88
|
+
|
|
89
|
+
console.log(chalk.green(` ✓ Added agent: /bmad_agents_${artifact.module}_${artifact.name}`));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Install tasks as TOML files with bmad- prefix (flat structure)
|
|
93
|
+
let taskCount = 0;
|
|
94
|
+
for (const task of tasks) {
|
|
95
|
+
const content = await this.readFile(task.path);
|
|
96
|
+
const tomlContent = await this.createTaskToml(task, content);
|
|
97
|
+
|
|
98
|
+
// Flat structure: bmad-task-{module}-{name}.toml
|
|
99
|
+
const tomlPath = path.join(commandsDir, `bmad-task-${task.module}-${task.name}.toml`);
|
|
100
|
+
await this.writeFile(tomlPath, tomlContent);
|
|
101
|
+
taskCount++;
|
|
102
|
+
|
|
103
|
+
console.log(chalk.green(` ✓ Added task: /bmad_tasks_${task.module}_${task.name}`));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Install workflows as TOML files with bmad- prefix (flat structure)
|
|
107
|
+
let workflowCount = 0;
|
|
108
|
+
for (const artifact of workflowArtifacts) {
|
|
109
|
+
if (artifact.type === 'workflow-command') {
|
|
110
|
+
// Create TOML wrapper around workflow command content
|
|
111
|
+
const tomlContent = await this.createWorkflowToml(artifact);
|
|
112
|
+
|
|
113
|
+
// Flat structure: bmad-workflow-{module}-{name}.toml
|
|
114
|
+
const workflowName = path.basename(artifact.relativePath, '.md');
|
|
115
|
+
const tomlPath = path.join(commandsDir, `bmad-workflow-${artifact.module}-${workflowName}.toml`);
|
|
116
|
+
await this.writeFile(tomlPath, tomlContent);
|
|
117
|
+
workflowCount++;
|
|
118
|
+
|
|
119
|
+
console.log(chalk.green(` ✓ Added workflow: /bmad_workflows_${artifact.module}_${workflowName}`));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
124
|
+
console.log(chalk.dim(` - ${agentCount} agents configured`));
|
|
125
|
+
console.log(chalk.dim(` - ${taskCount} tasks configured`));
|
|
126
|
+
console.log(chalk.dim(` - ${workflowCount} workflows configured`));
|
|
127
|
+
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
|
128
|
+
console.log(chalk.dim(` - Agent activation: /bmad_agents_{agent-name}`));
|
|
129
|
+
console.log(chalk.dim(` - Task activation: /bmad_tasks_{task-name}`));
|
|
130
|
+
console.log(chalk.dim(` - Workflow activation: /bmad_workflows_{workflow-name}`));
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
success: true,
|
|
134
|
+
agents: agentCount,
|
|
135
|
+
tasks: taskCount,
|
|
136
|
+
workflows: workflowCount,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Create agent launcher TOML content from artifact
|
|
142
|
+
*/
|
|
143
|
+
async createAgentLauncherToml(artifact) {
|
|
144
|
+
// Strip frontmatter from launcher content
|
|
145
|
+
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
|
146
|
+
const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
|
|
147
|
+
|
|
148
|
+
// Extract title from launcher frontmatter
|
|
149
|
+
const titleMatch = artifact.content.match(/description:\s*"([^"]+)"/);
|
|
150
|
+
const title = titleMatch ? titleMatch[1] : this.formatTitle(artifact.name);
|
|
151
|
+
|
|
152
|
+
// Create TOML wrapper around launcher content (without frontmatter)
|
|
153
|
+
const description = `BMAD ${artifact.module.toUpperCase()} Agent: ${title}`;
|
|
154
|
+
|
|
155
|
+
return `description = "${description}"
|
|
156
|
+
prompt = """
|
|
157
|
+
${contentWithoutFrontmatter}
|
|
158
|
+
"""
|
|
159
|
+
`;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Create agent TOML content using template
|
|
164
|
+
*/
|
|
165
|
+
async createAgentToml(agent, content) {
|
|
166
|
+
// Extract metadata
|
|
167
|
+
const titleMatch = content.match(/title="([^"]+)"/);
|
|
168
|
+
const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
|
|
169
|
+
|
|
170
|
+
// Load template
|
|
171
|
+
const template = await fs.readFile(this.agentTemplatePath, 'utf8');
|
|
172
|
+
|
|
173
|
+
// Replace template variables
|
|
174
|
+
// Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
|
|
175
|
+
const tomlContent = template
|
|
176
|
+
.replaceAll('{{title}}', title)
|
|
177
|
+
.replaceAll('{_bmad}', '_bmad')
|
|
178
|
+
.replaceAll('{_bmad}', this.bmadFolderName)
|
|
179
|
+
.replaceAll('{{module}}', agent.module)
|
|
180
|
+
.replaceAll('{{name}}', agent.name);
|
|
181
|
+
|
|
182
|
+
return tomlContent;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Create task TOML content using template
|
|
187
|
+
*/
|
|
188
|
+
async createTaskToml(task, content) {
|
|
189
|
+
// Extract task name from XML if available
|
|
190
|
+
const nameMatch = content.match(/<name>([^<]+)<\/name>/);
|
|
191
|
+
const taskName = nameMatch ? nameMatch[1] : this.formatTitle(task.name);
|
|
192
|
+
|
|
193
|
+
// Load template
|
|
194
|
+
const template = await fs.readFile(this.taskTemplatePath, 'utf8');
|
|
195
|
+
|
|
196
|
+
// Replace template variables
|
|
197
|
+
const tomlContent = template
|
|
198
|
+
.replaceAll('{{taskName}}', taskName)
|
|
199
|
+
.replaceAll('{_bmad}', '_bmad')
|
|
200
|
+
.replaceAll('{_bmad}', this.bmadFolderName)
|
|
201
|
+
.replaceAll('{{module}}', task.module)
|
|
202
|
+
.replaceAll('{{filename}}', task.filename);
|
|
203
|
+
|
|
204
|
+
return tomlContent;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Create workflow TOML content from artifact
|
|
209
|
+
*/
|
|
210
|
+
async createWorkflowToml(artifact) {
|
|
211
|
+
// Extract description from artifact content
|
|
212
|
+
const descriptionMatch = artifact.content.match(/description:\s*"([^"]+)"/);
|
|
213
|
+
const description = descriptionMatch
|
|
214
|
+
? descriptionMatch[1]
|
|
215
|
+
: `BMAD ${artifact.module.toUpperCase()} Workflow: ${path.basename(artifact.relativePath, '.md')}`;
|
|
216
|
+
|
|
217
|
+
// Strip frontmatter from command content
|
|
218
|
+
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
|
219
|
+
const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
|
|
220
|
+
|
|
221
|
+
return `description = "${description}"
|
|
222
|
+
prompt = """
|
|
223
|
+
${contentWithoutFrontmatter}
|
|
224
|
+
"""
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Cleanup Gemini configuration - surgically remove only BMAD files
|
|
230
|
+
*/
|
|
231
|
+
async cleanup(projectDir) {
|
|
232
|
+
const fs = require('fs-extra');
|
|
233
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
234
|
+
|
|
235
|
+
if (await fs.pathExists(commandsDir)) {
|
|
236
|
+
// Remove any bmad* files (cleans up old bmad- and bmad: formats)
|
|
237
|
+
const files = await fs.readdir(commandsDir);
|
|
238
|
+
let removed = 0;
|
|
239
|
+
|
|
240
|
+
for (const file of files) {
|
|
241
|
+
if (file.startsWith('bmad') && file.endsWith('.toml')) {
|
|
242
|
+
await fs.remove(path.join(commandsDir, file));
|
|
243
|
+
removed++;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (removed > 0) {
|
|
248
|
+
console.log(chalk.dim(` Cleaned up ${removed} existing BMAD files`));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Install a custom agent launcher for Gemini
|
|
255
|
+
* @param {string} projectDir - Project directory
|
|
256
|
+
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
|
257
|
+
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
|
258
|
+
* @param {Object} metadata - Agent metadata
|
|
259
|
+
* @returns {Object} Installation result
|
|
260
|
+
*/
|
|
261
|
+
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
|
262
|
+
const geminiDir = path.join(projectDir, this.configDir);
|
|
263
|
+
const commandsDir = path.join(geminiDir, this.commandsDir);
|
|
264
|
+
|
|
265
|
+
// Create .gemini/commands directory if it doesn't exist
|
|
266
|
+
await fs.ensureDir(commandsDir);
|
|
267
|
+
|
|
268
|
+
// Create custom agent launcher in TOML format
|
|
269
|
+
const launcherContent = `description = "Custom BMAD Agent: ${agentName}"
|
|
270
|
+
prompt = """
|
|
271
|
+
**⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
|
|
272
|
+
|
|
273
|
+
This is a launcher for the custom BMAD agent "${agentName}".
|
|
274
|
+
|
|
275
|
+
## Usage
|
|
276
|
+
1. First run: \`${agentPath}\` to load the complete agent
|
|
277
|
+
2. Then use this command to activate ${agentName}
|
|
278
|
+
|
|
279
|
+
The agent will follow the persona and instructions from the main agent file.
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
*Generated by BMAD Method*
|
|
284
|
+
"""`;
|
|
285
|
+
|
|
286
|
+
const fileName = `bmad-custom-${agentName.toLowerCase()}.toml`;
|
|
287
|
+
const launcherPath = path.join(commandsDir, fileName);
|
|
288
|
+
|
|
289
|
+
// Write the launcher file
|
|
290
|
+
await fs.writeFile(launcherPath, launcherContent, 'utf8');
|
|
291
|
+
|
|
292
|
+
return {
|
|
293
|
+
ide: 'gemini',
|
|
294
|
+
path: path.relative(projectDir, launcherPath),
|
|
295
|
+
command: agentName,
|
|
296
|
+
type: 'custom-agent-launcher',
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
module.exports = { GeminiSetup };
|