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,293 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const csv = require('csv-parse/sync');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { toColonPath, toDashPath, customAgentColonName, customAgentDashName } = require('./path-utils');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generates command files for each workflow in the manifest
|
|
9
|
+
*/
|
|
10
|
+
class WorkflowCommandGenerator {
|
|
11
|
+
constructor(bmadFolderName = 'bmad') {
|
|
12
|
+
this.templatePath = path.join(__dirname, '../templates/workflow-command-template.md');
|
|
13
|
+
this.bmadFolderName = bmadFolderName;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Generate workflow commands from the manifest CSV
|
|
18
|
+
* @param {string} projectDir - Project directory
|
|
19
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
20
|
+
*/
|
|
21
|
+
async generateWorkflowCommands(projectDir, bmadDir) {
|
|
22
|
+
const workflows = await this.loadWorkflowManifest(bmadDir);
|
|
23
|
+
|
|
24
|
+
if (!workflows) {
|
|
25
|
+
console.log(chalk.yellow('Workflow manifest not found. Skipping command generation.'));
|
|
26
|
+
return { generated: 0 };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// ALL workflows now generate commands - no standalone filtering
|
|
30
|
+
const allWorkflows = workflows;
|
|
31
|
+
|
|
32
|
+
// Base commands directory
|
|
33
|
+
const baseCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
|
|
34
|
+
|
|
35
|
+
let generatedCount = 0;
|
|
36
|
+
|
|
37
|
+
// Generate a command file for each workflow, organized by module
|
|
38
|
+
for (const workflow of allWorkflows) {
|
|
39
|
+
const moduleWorkflowsDir = path.join(baseCommandsDir, workflow.module, 'workflows');
|
|
40
|
+
await fs.ensureDir(moduleWorkflowsDir);
|
|
41
|
+
|
|
42
|
+
const commandContent = await this.generateCommandContent(workflow, bmadDir);
|
|
43
|
+
const commandPath = path.join(moduleWorkflowsDir, `${workflow.name}.md`);
|
|
44
|
+
|
|
45
|
+
await fs.writeFile(commandPath, commandContent);
|
|
46
|
+
generatedCount++;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Also create a workflow launcher README in each module
|
|
50
|
+
const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
|
|
51
|
+
await this.createModuleWorkflowLaunchers(baseCommandsDir, groupedWorkflows);
|
|
52
|
+
|
|
53
|
+
return { generated: generatedCount };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async collectWorkflowArtifacts(bmadDir) {
|
|
57
|
+
const workflows = await this.loadWorkflowManifest(bmadDir);
|
|
58
|
+
|
|
59
|
+
if (!workflows) {
|
|
60
|
+
return { artifacts: [], counts: { commands: 0, launchers: 0 } };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ALL workflows now generate commands - no standalone filtering
|
|
64
|
+
const allWorkflows = workflows;
|
|
65
|
+
|
|
66
|
+
const artifacts = [];
|
|
67
|
+
|
|
68
|
+
for (const workflow of allWorkflows) {
|
|
69
|
+
const commandContent = await this.generateCommandContent(workflow, bmadDir);
|
|
70
|
+
artifacts.push({
|
|
71
|
+
type: 'workflow-command',
|
|
72
|
+
module: workflow.module,
|
|
73
|
+
relativePath: path.join(workflow.module, 'workflows', `${workflow.name}.md`),
|
|
74
|
+
content: commandContent,
|
|
75
|
+
sourcePath: workflow.path,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
|
|
80
|
+
for (const [module, launcherContent] of Object.entries(this.buildModuleWorkflowLaunchers(groupedWorkflows))) {
|
|
81
|
+
artifacts.push({
|
|
82
|
+
type: 'workflow-launcher',
|
|
83
|
+
module,
|
|
84
|
+
relativePath: path.join(module, 'workflows', 'README.md'),
|
|
85
|
+
content: launcherContent,
|
|
86
|
+
sourcePath: null,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
artifacts,
|
|
92
|
+
counts: {
|
|
93
|
+
commands: allWorkflows.length,
|
|
94
|
+
launchers: Object.keys(groupedWorkflows).length,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Generate command content for a workflow
|
|
101
|
+
*/
|
|
102
|
+
async generateCommandContent(workflow, bmadDir) {
|
|
103
|
+
// Determine template based on workflow file type
|
|
104
|
+
const isMarkdownWorkflow = workflow.path.endsWith('workflow.md');
|
|
105
|
+
const templateName = isMarkdownWorkflow ? 'workflow-commander.md' : 'workflow-command-template.md';
|
|
106
|
+
const templatePath = path.join(path.dirname(this.templatePath), templateName);
|
|
107
|
+
|
|
108
|
+
// Load the appropriate template
|
|
109
|
+
const template = await fs.readFile(templatePath, 'utf8');
|
|
110
|
+
|
|
111
|
+
// Convert source path to installed path
|
|
112
|
+
// From: /Users/.../src/bmm/workflows/.../workflow.yaml
|
|
113
|
+
// To: {project-root}/_bmad/bmm/workflows/.../workflow.yaml
|
|
114
|
+
let workflowPath = workflow.path;
|
|
115
|
+
|
|
116
|
+
// Extract the relative path from source
|
|
117
|
+
if (workflowPath.includes('/src/bmm/')) {
|
|
118
|
+
// bmm is directly under src/
|
|
119
|
+
const match = workflowPath.match(/\/src\/bmm\/(.+)/);
|
|
120
|
+
if (match) {
|
|
121
|
+
workflowPath = `${this.bmadFolderName}/bmm/${match[1]}`;
|
|
122
|
+
}
|
|
123
|
+
} else if (workflowPath.includes('/src/core/')) {
|
|
124
|
+
const match = workflowPath.match(/\/src\/core\/(.+)/);
|
|
125
|
+
if (match) {
|
|
126
|
+
workflowPath = `${this.bmadFolderName}/core/${match[1]}`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Replace template variables
|
|
131
|
+
return template
|
|
132
|
+
.replaceAll('{{name}}', workflow.name)
|
|
133
|
+
.replaceAll('{{module}}', workflow.module)
|
|
134
|
+
.replaceAll('{{description}}', workflow.description)
|
|
135
|
+
.replaceAll('{{workflow_path}}', workflowPath)
|
|
136
|
+
.replaceAll('_bmad', this.bmadFolderName)
|
|
137
|
+
.replaceAll('_bmad', '_bmad');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Create workflow launcher files for each module
|
|
142
|
+
*/
|
|
143
|
+
async createModuleWorkflowLaunchers(baseCommandsDir, workflowsByModule) {
|
|
144
|
+
for (const [module, moduleWorkflows] of Object.entries(workflowsByModule)) {
|
|
145
|
+
const content = this.buildLauncherContent(module, moduleWorkflows);
|
|
146
|
+
const moduleWorkflowsDir = path.join(baseCommandsDir, module, 'workflows');
|
|
147
|
+
await fs.ensureDir(moduleWorkflowsDir);
|
|
148
|
+
const launcherPath = path.join(moduleWorkflowsDir, 'README.md');
|
|
149
|
+
await fs.writeFile(launcherPath, content);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
groupWorkflowsByModule(workflows) {
|
|
154
|
+
const workflowsByModule = {};
|
|
155
|
+
|
|
156
|
+
for (const workflow of workflows) {
|
|
157
|
+
if (!workflowsByModule[workflow.module]) {
|
|
158
|
+
workflowsByModule[workflow.module] = [];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
workflowsByModule[workflow.module].push({
|
|
162
|
+
...workflow,
|
|
163
|
+
displayPath: this.transformWorkflowPath(workflow.path),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return workflowsByModule;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
buildModuleWorkflowLaunchers(groupedWorkflows) {
|
|
171
|
+
const launchers = {};
|
|
172
|
+
|
|
173
|
+
for (const [module, moduleWorkflows] of Object.entries(groupedWorkflows)) {
|
|
174
|
+
launchers[module] = this.buildLauncherContent(module, moduleWorkflows);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return launchers;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
buildLauncherContent(module, moduleWorkflows) {
|
|
181
|
+
let content = `# ${module.toUpperCase()} Workflows
|
|
182
|
+
|
|
183
|
+
## Available Workflows in ${module}
|
|
184
|
+
|
|
185
|
+
`;
|
|
186
|
+
|
|
187
|
+
for (const workflow of moduleWorkflows) {
|
|
188
|
+
content += `**${workflow.name}**\n`;
|
|
189
|
+
content += `- Path: \`${workflow.displayPath}\`\n`;
|
|
190
|
+
content += `- ${workflow.description}\n\n`;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
content += `
|
|
194
|
+
## Execution
|
|
195
|
+
|
|
196
|
+
When running any workflow:
|
|
197
|
+
1. LOAD {project-root}/${this.bmadFolderName}/core/tasks/workflow.xml
|
|
198
|
+
2. Pass the workflow path as 'workflow-config' parameter
|
|
199
|
+
3. Follow workflow.xml instructions EXACTLY
|
|
200
|
+
4. Save outputs after EACH section
|
|
201
|
+
|
|
202
|
+
## Modes
|
|
203
|
+
- Normal: Full interaction
|
|
204
|
+
- #yolo: Skip optional steps
|
|
205
|
+
`;
|
|
206
|
+
|
|
207
|
+
return content;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
transformWorkflowPath(workflowPath) {
|
|
211
|
+
let transformed = workflowPath;
|
|
212
|
+
|
|
213
|
+
if (workflowPath.includes('/src/bmm/')) {
|
|
214
|
+
const match = workflowPath.match(/\/src\/bmm\/(.+)/);
|
|
215
|
+
if (match) {
|
|
216
|
+
transformed = `{project-root}/${this.bmadFolderName}/bmm/${match[1]}`;
|
|
217
|
+
} else if (workflowPath.includes('/src/core/')) {
|
|
218
|
+
const match = workflowPath.match(/\/src\/core\/(.+)/);
|
|
219
|
+
if (match) {
|
|
220
|
+
transformed = `{project-root}/${this.bmadFolderName}/core/${match[1]}`;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return transformed;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
async loadWorkflowManifest(bmadDir) {
|
|
229
|
+
const manifestPath = path.join(bmadDir, '_config', 'workflow-manifest.csv');
|
|
230
|
+
|
|
231
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const csvContent = await fs.readFile(manifestPath, 'utf8');
|
|
236
|
+
return csv.parse(csvContent, {
|
|
237
|
+
columns: true,
|
|
238
|
+
skip_empty_lines: true,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Write workflow command artifacts using underscore format (Windows-compatible)
|
|
244
|
+
* Creates flat files like: bmad_bmm_correct-course.md
|
|
245
|
+
*
|
|
246
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
247
|
+
* @param {Array} artifacts - Workflow artifacts
|
|
248
|
+
* @returns {number} Count of commands written
|
|
249
|
+
*/
|
|
250
|
+
async writeColonArtifacts(baseCommandsDir, artifacts) {
|
|
251
|
+
let writtenCount = 0;
|
|
252
|
+
|
|
253
|
+
for (const artifact of artifacts) {
|
|
254
|
+
if (artifact.type === 'workflow-command') {
|
|
255
|
+
// Convert relativePath to underscore format: bmm/workflows/correct-course.md → bmad_bmm_correct-course.md
|
|
256
|
+
const flatName = toColonPath(artifact.relativePath);
|
|
257
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
258
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
259
|
+
await fs.writeFile(commandPath, artifact.content);
|
|
260
|
+
writtenCount++;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return writtenCount;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Write workflow command artifacts using underscore format (Windows-compatible)
|
|
269
|
+
* Creates flat files like: bmad_bmm_correct-course.md
|
|
270
|
+
*
|
|
271
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
272
|
+
* @param {Array} artifacts - Workflow artifacts
|
|
273
|
+
* @returns {number} Count of commands written
|
|
274
|
+
*/
|
|
275
|
+
async writeDashArtifacts(baseCommandsDir, artifacts) {
|
|
276
|
+
let writtenCount = 0;
|
|
277
|
+
|
|
278
|
+
for (const artifact of artifacts) {
|
|
279
|
+
if (artifact.type === 'workflow-command') {
|
|
280
|
+
// Convert relativePath to underscore format: bmm/workflows/correct-course.md → bmad_bmm_correct-course.md
|
|
281
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
282
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
283
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
284
|
+
await fs.writeFile(commandPath, artifact.content);
|
|
285
|
+
writtenCount++;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return writtenCount;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
module.exports = { WorkflowCommandGenerator };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: '{{name}}'
|
|
3
|
+
description: '{{description}}'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
|
+
|
|
8
|
+
<agent-activation CRITICAL="TRUE">
|
|
9
|
+
1. LOAD the FULL agent file from @_bmad/{{module}}/agents/{{path}}
|
|
10
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
|
+
3. Execute ALL activation steps exactly as written in the agent file
|
|
12
|
+
4. Follow the agent's persona and menu system precisely
|
|
13
|
+
5. Stay in character throughout the session
|
|
14
|
+
</agent-activation>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
description = "Activates the {{title}} agent from the BMad Method."
|
|
2
|
+
prompt = """
|
|
3
|
+
CRITICAL: You are now the BMad '{{title}}' agent.
|
|
4
|
+
|
|
5
|
+
PRE-FLIGHT CHECKLIST:
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{_bmad}/{{module}}/config.yaml - store ALL config values in memory for use throughout the session.
|
|
7
|
+
2. [ ] IMMEDIATE ACTION: Read and internalize the full agent definition at @{_bmad}/{{module}}/agents/{{name}}.md.
|
|
8
|
+
3. [ ] CONFIRM: The user's name from config is {user_name}.
|
|
9
|
+
|
|
10
|
+
Only after all checks are complete, greet the user by name and display the menu.
|
|
11
|
+
Acknowledge this checklist is complete in your first response.
|
|
12
|
+
|
|
13
|
+
AGENT DEFINITION: @{_bmad}/{{module}}/agents/{{name}}.md
|
|
14
|
+
"""
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
description = "Executes the {{taskName}} task from the BMad Method."
|
|
2
|
+
prompt = """
|
|
3
|
+
Execute the following BMad Method task workflow:
|
|
4
|
+
|
|
5
|
+
PRE-FLIGHT CHECKLIST:
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{_bmad}/{{module}}/config.yaml.
|
|
7
|
+
2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{_bmad}/{{module}}/tasks/{{filename}}.
|
|
8
|
+
|
|
9
|
+
Follow all instructions and complete the task as defined.
|
|
10
|
+
|
|
11
|
+
TASK DEFINITION: @{_bmad}/{{module}}/tasks/{{filename}}
|
|
12
|
+
"""
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: '{{description}}'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
|
|
6
|
+
|
|
7
|
+
<steps CRITICAL="TRUE">
|
|
8
|
+
1. Always LOAD the FULL @_bmad/core/tasks/workflow.xml
|
|
9
|
+
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config @{{workflow_path}}
|
|
10
|
+
3. Pass the yaml path {{workflow_path}} as 'workflow-config' parameter to the workflow.xml instructions
|
|
11
|
+
4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
|
|
12
|
+
5. Save outputs after EACH section when generating any documents from templates
|
|
13
|
+
</steps>
|
|
@@ -0,0 +1,313 @@
|
|
|
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
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Trae IDE setup handler
|
|
9
|
+
*/
|
|
10
|
+
class TraeSetup extends BaseIdeSetup {
|
|
11
|
+
constructor() {
|
|
12
|
+
super('trae', 'Trae');
|
|
13
|
+
this.configDir = '.trae';
|
|
14
|
+
this.rulesDir = 'rules';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Setup Trae IDE configuration
|
|
19
|
+
* @param {string} projectDir - Project directory
|
|
20
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
21
|
+
* @param {Object} options - Setup options
|
|
22
|
+
*/
|
|
23
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
24
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
25
|
+
|
|
26
|
+
// Create .trae/rules directory
|
|
27
|
+
const traeDir = path.join(projectDir, this.configDir);
|
|
28
|
+
const rulesDir = path.join(traeDir, this.rulesDir);
|
|
29
|
+
|
|
30
|
+
await this.ensureDir(rulesDir);
|
|
31
|
+
|
|
32
|
+
// Clean up any existing BMAD files before reinstalling
|
|
33
|
+
await this.cleanup(projectDir);
|
|
34
|
+
|
|
35
|
+
// Generate agent launchers
|
|
36
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
37
|
+
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
38
|
+
|
|
39
|
+
// Get tasks, tools, and workflows (standalone only)
|
|
40
|
+
const tasks = await this.getTasks(bmadDir, true);
|
|
41
|
+
const tools = await this.getTools(bmadDir, true);
|
|
42
|
+
const workflows = await this.getWorkflows(bmadDir, true);
|
|
43
|
+
|
|
44
|
+
// Process agents as rules with bmad- prefix
|
|
45
|
+
let agentCount = 0;
|
|
46
|
+
for (const artifact of agentArtifacts) {
|
|
47
|
+
const processedContent = await this.createAgentRule(artifact, bmadDir, projectDir);
|
|
48
|
+
|
|
49
|
+
// Use bmad- prefix: bmad-agent-{module}-{name}.md
|
|
50
|
+
const targetPath = path.join(rulesDir, `bmad-agent-${artifact.module}-${artifact.name}.md`);
|
|
51
|
+
await this.writeFile(targetPath, processedContent);
|
|
52
|
+
agentCount++;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Process tasks as rules with bmad- prefix
|
|
56
|
+
let taskCount = 0;
|
|
57
|
+
for (const task of tasks) {
|
|
58
|
+
const content = await this.readFile(task.path);
|
|
59
|
+
const processedContent = this.createTaskRule(task, content);
|
|
60
|
+
|
|
61
|
+
// Use bmad- prefix: bmad-task-{module}-{name}.md
|
|
62
|
+
const targetPath = path.join(rulesDir, `bmad-task-${task.module}-${task.name}.md`);
|
|
63
|
+
await this.writeFile(targetPath, processedContent);
|
|
64
|
+
taskCount++;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Process tools as rules with bmad- prefix
|
|
68
|
+
let toolCount = 0;
|
|
69
|
+
for (const tool of tools) {
|
|
70
|
+
const content = await this.readFile(tool.path);
|
|
71
|
+
const processedContent = this.createToolRule(tool, content);
|
|
72
|
+
|
|
73
|
+
// Use bmad- prefix: bmad-tool-{module}-{name}.md
|
|
74
|
+
const targetPath = path.join(rulesDir, `bmad-tool-${tool.module}-${tool.name}.md`);
|
|
75
|
+
await this.writeFile(targetPath, processedContent);
|
|
76
|
+
toolCount++;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Process workflows as rules with bmad- prefix
|
|
80
|
+
let workflowCount = 0;
|
|
81
|
+
for (const workflow of workflows) {
|
|
82
|
+
const content = await this.readFile(workflow.path);
|
|
83
|
+
const processedContent = this.createWorkflowRule(workflow, content);
|
|
84
|
+
|
|
85
|
+
// Use bmad- prefix: bmad-workflow-{module}-{name}.md
|
|
86
|
+
const targetPath = path.join(rulesDir, `bmad-workflow-${workflow.module}-${workflow.name}.md`);
|
|
87
|
+
await this.writeFile(targetPath, processedContent);
|
|
88
|
+
workflowCount++;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const totalRules = agentCount + taskCount + toolCount + workflowCount;
|
|
92
|
+
|
|
93
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
94
|
+
console.log(chalk.dim(` - ${agentCount} agent rules created`));
|
|
95
|
+
console.log(chalk.dim(` - ${taskCount} task rules created`));
|
|
96
|
+
console.log(chalk.dim(` - ${toolCount} tool rules created`));
|
|
97
|
+
console.log(chalk.dim(` - ${workflowCount} workflow rules created`));
|
|
98
|
+
console.log(chalk.dim(` - Total: ${totalRules} rules`));
|
|
99
|
+
console.log(chalk.dim(` - Rules directory: ${path.relative(projectDir, rulesDir)}`));
|
|
100
|
+
console.log(chalk.dim(` - Agents can be activated with @{agent-name}`));
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
success: true,
|
|
104
|
+
rules: totalRules,
|
|
105
|
+
agents: agentCount,
|
|
106
|
+
tasks: taskCount,
|
|
107
|
+
tools: toolCount,
|
|
108
|
+
workflows: workflowCount,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Create rule content for an agent
|
|
114
|
+
*/
|
|
115
|
+
async createAgentRule(artifact, bmadDir, projectDir) {
|
|
116
|
+
// Strip frontmatter from launcher
|
|
117
|
+
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
|
118
|
+
const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
|
|
119
|
+
|
|
120
|
+
// Extract metadata from launcher content
|
|
121
|
+
const titleMatch = artifact.content.match(/description:\s*"([^"]+)"/);
|
|
122
|
+
const title = titleMatch ? titleMatch[1] : this.formatTitle(artifact.name);
|
|
123
|
+
|
|
124
|
+
// Calculate relative path for reference
|
|
125
|
+
const relativePath = path.relative(projectDir, artifact.sourcePath).replaceAll('\\', '/');
|
|
126
|
+
|
|
127
|
+
let ruleContent = `# ${title} Agent Rule
|
|
128
|
+
|
|
129
|
+
This rule is triggered when the user types \`@${artifact.name}\` and activates the ${title} agent persona.
|
|
130
|
+
|
|
131
|
+
## Agent Activation
|
|
132
|
+
|
|
133
|
+
${contentWithoutFrontmatter}
|
|
134
|
+
|
|
135
|
+
## File Reference
|
|
136
|
+
|
|
137
|
+
The full agent definition is located at: \`${relativePath}\`
|
|
138
|
+
`;
|
|
139
|
+
|
|
140
|
+
return ruleContent;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Create rule content for a task
|
|
145
|
+
*/
|
|
146
|
+
createTaskRule(task, content) {
|
|
147
|
+
// Extract task name from content
|
|
148
|
+
const nameMatch = content.match(/name="([^"]+)"/);
|
|
149
|
+
const taskName = nameMatch ? nameMatch[1] : this.formatTitle(task.name);
|
|
150
|
+
|
|
151
|
+
let ruleContent = `# ${taskName} Task Rule
|
|
152
|
+
|
|
153
|
+
This rule defines the ${taskName} task workflow.
|
|
154
|
+
|
|
155
|
+
## Task Definition
|
|
156
|
+
|
|
157
|
+
When this task is triggered, execute the following workflow:
|
|
158
|
+
|
|
159
|
+
${content}
|
|
160
|
+
|
|
161
|
+
## Usage
|
|
162
|
+
|
|
163
|
+
Reference this task with \`@task-${task.name}\` to execute the defined workflow.
|
|
164
|
+
|
|
165
|
+
## Module
|
|
166
|
+
|
|
167
|
+
Part of the BMAD ${task.module.toUpperCase()} module.
|
|
168
|
+
`;
|
|
169
|
+
|
|
170
|
+
return ruleContent;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Create rule content for a tool
|
|
175
|
+
*/
|
|
176
|
+
createToolRule(tool, content) {
|
|
177
|
+
// Extract tool name from content
|
|
178
|
+
const nameMatch = content.match(/name="([^"]+)"/);
|
|
179
|
+
const toolName = nameMatch ? nameMatch[1] : this.formatTitle(tool.name);
|
|
180
|
+
|
|
181
|
+
let ruleContent = `# ${toolName} Tool Rule
|
|
182
|
+
|
|
183
|
+
This rule defines the ${toolName} tool.
|
|
184
|
+
|
|
185
|
+
## Tool Definition
|
|
186
|
+
|
|
187
|
+
When this tool is triggered, execute the following:
|
|
188
|
+
|
|
189
|
+
${content}
|
|
190
|
+
|
|
191
|
+
## Usage
|
|
192
|
+
|
|
193
|
+
Reference this tool with \`@tool-${tool.name}\` to execute it.
|
|
194
|
+
|
|
195
|
+
## Module
|
|
196
|
+
|
|
197
|
+
Part of the BMAD ${tool.module.toUpperCase()} module.
|
|
198
|
+
`;
|
|
199
|
+
|
|
200
|
+
return ruleContent;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Create rule content for a workflow
|
|
205
|
+
*/
|
|
206
|
+
createWorkflowRule(workflow, content) {
|
|
207
|
+
let ruleContent = `# ${workflow.name} Workflow Rule
|
|
208
|
+
|
|
209
|
+
This rule defines the ${workflow.name} workflow.
|
|
210
|
+
|
|
211
|
+
## Workflow Description
|
|
212
|
+
|
|
213
|
+
${workflow.description || 'No description provided'}
|
|
214
|
+
|
|
215
|
+
## Workflow Definition
|
|
216
|
+
|
|
217
|
+
${content}
|
|
218
|
+
|
|
219
|
+
## Usage
|
|
220
|
+
|
|
221
|
+
Reference this workflow with \`@workflow-${workflow.name}\` to execute the guided workflow.
|
|
222
|
+
|
|
223
|
+
## Module
|
|
224
|
+
|
|
225
|
+
Part of the BMAD ${workflow.module.toUpperCase()} module.
|
|
226
|
+
`;
|
|
227
|
+
|
|
228
|
+
return ruleContent;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Format agent/task name as title
|
|
233
|
+
*/
|
|
234
|
+
formatTitle(name) {
|
|
235
|
+
return name
|
|
236
|
+
.split('-')
|
|
237
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
238
|
+
.join(' ');
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Cleanup Trae configuration - surgically remove only BMAD files
|
|
243
|
+
*/
|
|
244
|
+
async cleanup(projectDir) {
|
|
245
|
+
const fs = require('fs-extra');
|
|
246
|
+
const rulesPath = path.join(projectDir, this.configDir, this.rulesDir);
|
|
247
|
+
|
|
248
|
+
if (await fs.pathExists(rulesPath)) {
|
|
249
|
+
// Remove any bmad* files (cleans up old bmad- and bmad: formats)
|
|
250
|
+
const files = await fs.readdir(rulesPath);
|
|
251
|
+
let removed = 0;
|
|
252
|
+
|
|
253
|
+
for (const file of files) {
|
|
254
|
+
if (file.startsWith('bmad') && file.endsWith('.md')) {
|
|
255
|
+
await fs.remove(path.join(rulesPath, file));
|
|
256
|
+
removed++;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (removed > 0) {
|
|
261
|
+
console.log(chalk.dim(` Cleaned up ${removed} existing BMAD rules`));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Install a custom agent launcher for Trae
|
|
268
|
+
* @param {string} projectDir - Project directory
|
|
269
|
+
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
|
270
|
+
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
|
271
|
+
* @param {Object} metadata - Agent metadata
|
|
272
|
+
* @returns {Object} Installation result
|
|
273
|
+
*/
|
|
274
|
+
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
|
275
|
+
const traeDir = path.join(projectDir, this.configDir);
|
|
276
|
+
const rulesDir = path.join(traeDir, this.rulesDir);
|
|
277
|
+
|
|
278
|
+
// Create .trae/rules directory if it doesn't exist
|
|
279
|
+
await fs.ensureDir(rulesDir);
|
|
280
|
+
|
|
281
|
+
// Create custom agent launcher
|
|
282
|
+
const launcherContent = `# ${agentName} Custom Agent
|
|
283
|
+
|
|
284
|
+
**⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
|
|
285
|
+
|
|
286
|
+
This is a launcher for the custom BMAD agent "${agentName}".
|
|
287
|
+
|
|
288
|
+
## Usage
|
|
289
|
+
1. First run: \`${agentPath}\` to load the complete agent
|
|
290
|
+
2. Then use this rule to activate ${agentName}
|
|
291
|
+
|
|
292
|
+
The agent will follow the persona and instructions from the main agent file.
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
*Generated by BMAD Method*`;
|
|
297
|
+
|
|
298
|
+
const fileName = `bmad-agent-custom-${agentName.toLowerCase()}.md`;
|
|
299
|
+
const launcherPath = path.join(rulesDir, fileName);
|
|
300
|
+
|
|
301
|
+
// Write the launcher file
|
|
302
|
+
await fs.writeFile(launcherPath, launcherContent, 'utf8');
|
|
303
|
+
|
|
304
|
+
return {
|
|
305
|
+
ide: 'trae',
|
|
306
|
+
path: path.relative(projectDir, launcherPath),
|
|
307
|
+
command: agentName,
|
|
308
|
+
type: 'custom-agent-launcher',
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
module.exports = { TraeSetup };
|