bmad-fh 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/.githooks/post-checkout +129 -0
- package/.githooks/pre-commit +63 -0
- package/.githooks/pre-push +135 -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/publish-multi-artifact.yaml +50 -0
- package/.github/workflows/quality.yaml +115 -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 +306 -0
- package/CONTRIBUTORS.md +32 -0
- package/LICENSE +30 -0
- package/README.md +126 -0
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/Wordmark.png +0 -0
- package/banner-bmad-method.png +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 +526 -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 +98 -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/migration-guide.md +365 -0
- package/docs/multi-scope-guide.md +379 -0
- package/docs/plans/multi-scope-parallel-artifacts-plan.md +695 -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 +254 -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 +41 -0
- package/src/bmm/agents/architect.agent.yaml +33 -0
- package/src/bmm/agents/dev.agent.yaml +38 -0
- package/src/bmm/agents/pm.agent.yaml +51 -0
- package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
- package/src/bmm/agents/sm.agent.yaml +47 -0
- package/src/bmm/agents/tea.agent.yaml +68 -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 +49 -0
- package/src/bmm/agents/ux-designer.agent.yaml +30 -0
- package/src/bmm/data/README.md +29 -0
- package/src/bmm/data/project-context-template.md +40 -0
- package/src/bmm/module.yaml +64 -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/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 +34 -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 +194 -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 +228 -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 +180 -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 +232 -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 +133 -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 +352 -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 +145 -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/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 +52 -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/generate-project-context/project-context-template.md +21 -0
- package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
- package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
- package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
- package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
- package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +364 -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 +248 -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 +321 -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 +722 -0
- package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +445 -0
- package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
- package/src/bmm/workflows/testarch/test-design/checklist.md +235 -0
- package/src/bmm/workflows/testarch/test-design/instructions.md +788 -0
- package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
- package/src/bmm/workflows/testarch/test-design/workflow.yaml +56 -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 +655 -0
- package/src/bmm/workflows/testarch/trace/instructions.md +1047 -0
- package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
- package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
- package/src/bmm/workflows/workflow-status/init/instructions.md +346 -0
- package/src/bmm/workflows/workflow-status/init/workflow.yaml +30 -0
- package/src/bmm/workflows/workflow-status/instructions.md +397 -0
- package/src/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +103 -0
- package/src/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +100 -0
- package/src/bmm/workflows/workflow-status/paths/method-brownfield.yaml +103 -0
- package/src/bmm/workflows/workflow-status/paths/method-greenfield.yaml +100 -0
- package/src/bmm/workflows/workflow-status/project-levels.yaml +59 -0
- package/src/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -0
- package/src/bmm/workflows/workflow-status/workflow.yaml +32 -0
- package/src/core/_module-installer/installer.js +60 -0
- package/src/core/agents/bmad-master.agent.yaml +30 -0
- package/src/core/lib/scope/artifact-resolver.js +298 -0
- package/src/core/lib/scope/event-logger.js +411 -0
- package/src/core/lib/scope/index.js +30 -0
- package/src/core/lib/scope/scope-context.js +307 -0
- package/src/core/lib/scope/scope-initializer.js +458 -0
- package/src/core/lib/scope/scope-manager.js +512 -0
- package/src/core/lib/scope/scope-migrator.js +442 -0
- package/src/core/lib/scope/scope-sync.js +489 -0
- package/src/core/lib/scope/scope-validator.js +299 -0
- package/src/core/lib/scope/state-lock.js +342 -0
- package/src/core/module.yaml +53 -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 +91 -0
- package/src/core/tasks/editorial-review-structure.xml +198 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/review-adversarial-general.xml +46 -0
- package/src/core/tasks/shard-doc.xml +109 -0
- package/src/core/tasks/workflow.xml +277 -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 +28 -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 +19 -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/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/test-scope-e2e.js +450 -0
- package/test/test-scope-system.js +787 -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/scope.js +474 -0
- package/tools/cli/external-official-modules.yaml +41 -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 +2585 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +963 -0
- package/tools/cli/installers/lib/core/manifest.js +590 -0
- package/tools/cli/installers/lib/custom/handler.js +363 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +654 -0
- package/tools/cli/installers/lib/ide/antigravity.js +486 -0
- package/tools/cli/installers/lib/ide/auggie.js +244 -0
- package/tools/cli/installers/lib/ide/claude-code.js +487 -0
- package/tools/cli/installers/lib/ide/cline.js +269 -0
- package/tools/cli/installers/lib/ide/codex.js +375 -0
- package/tools/cli/installers/lib/ide/crush.js +300 -0
- package/tools/cli/installers/lib/ide/cursor.js +169 -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 +270 -0
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +96 -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/task-tool-command-generator.js +119 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +242 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +29 -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 +30 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +45 -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 +133 -0
- package/tools/cli/installers/lib/modules/manager.js +1362 -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 +1591 -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/cli/scripts/migrate-workflows.js +281 -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 +493 -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,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,30 @@
|
|
|
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>
|
|
14
|
+
|
|
15
|
+
<scope-resolution>
|
|
16
|
+
## Multi-Scope Support
|
|
17
|
+
|
|
18
|
+
This workflow supports multi-scope parallel artifacts. Scope resolution order:
|
|
19
|
+
|
|
20
|
+
1. **--scope flag**: If provided (e.g., `/{{name}} --scope auth`), use that scope
|
|
21
|
+
2. **Session context**: Check for `.bmad-scope` file in project root
|
|
22
|
+
3. **Environment variable**: Check `BMAD_SCOPE` env var
|
|
23
|
+
4. **Prompt user**: If workflow requires scope and none found, prompt to select/create
|
|
24
|
+
|
|
25
|
+
When a scope is active:
|
|
26
|
+
- Artifacts are isolated to `_bmad-output/{scope}/`
|
|
27
|
+
- Cross-scope reads are allowed, writes are blocked
|
|
28
|
+
- Use `bmad scope sync-up` to promote artifacts to shared layer
|
|
29
|
+
- Check for pending dependency updates at workflow start
|
|
30
|
+
</scope-resolution>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: '{{description}}'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS IN ORDER:
|
|
6
|
+
|
|
7
|
+
<scope-resolution CRITICAL="true">
|
|
8
|
+
## Step 0: Resolve Scope Context BEFORE Workflow Execution
|
|
9
|
+
|
|
10
|
+
The workflow file will instruct you to load config.yaml. BEFORE following those instructions:
|
|
11
|
+
|
|
12
|
+
### 0a. Check for Active Scope
|
|
13
|
+
1. Check for `.bmad-scope` file in {project-root}
|
|
14
|
+
2. If exists, read the `active_scope` value and store as {scope}
|
|
15
|
+
3. If `.bmad-scope` does not exist, skip to Step 1 (backward compatible, no scope)
|
|
16
|
+
|
|
17
|
+
### 0b. Override Config Paths (CRITICAL - if scope is set)
|
|
18
|
+
After loading config.yaml but BEFORE using any paths, you MUST override these variables:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
{scope_path} = {output_folder}/{scope}
|
|
22
|
+
{planning_artifacts} = {scope_path}/planning-artifacts
|
|
23
|
+
{implementation_artifacts} = {scope_path}/implementation-artifacts
|
|
24
|
+
{scope_tests} = {scope_path}/tests
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Example:** If config.yaml has `output_folder: "_bmad-output"` and scope is "auth":
|
|
28
|
+
- {scope_path} = `_bmad-output/auth`
|
|
29
|
+
- {planning_artifacts} = `_bmad-output/auth/planning-artifacts`
|
|
30
|
+
- {implementation_artifacts} = `_bmad-output/auth/implementation-artifacts`
|
|
31
|
+
|
|
32
|
+
**WARNING:** Config.yaml contains pre-resolved static paths. You MUST override them with the scope-aware paths above. DO NOT use the config.yaml values directly for these variables when a scope is active.
|
|
33
|
+
|
|
34
|
+
### 0c. Load Scope Context
|
|
35
|
+
If scope is set:
|
|
36
|
+
- Load global context: `{output_folder}/_shared/project-context.md`
|
|
37
|
+
- Load scope context if exists: `{scope_path}/project-context.md`
|
|
38
|
+
- Merge: scope-specific content extends/overrides global
|
|
39
|
+
</scope-resolution>
|
|
40
|
+
|
|
41
|
+
## Step 1: Execute Workflow
|
|
42
|
+
|
|
43
|
+
NOW: LOAD the FULL @{{workflow_path}}, READ its entire contents and follow its directions exactly!
|
|
44
|
+
|
|
45
|
+
When the workflow instructs you to use `{planning_artifacts}` or `{implementation_artifacts}`, use YOUR OVERRIDDEN VALUES from Step 0b, not the static config.yaml values.
|
|
@@ -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
|
+
// Only remove files that start with bmad- prefix
|
|
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 };
|
|
@@ -0,0 +1,258 @@
|
|
|
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
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Windsurf IDE setup handler
|
|
8
|
+
*/
|
|
9
|
+
class WindsurfSetup extends BaseIdeSetup {
|
|
10
|
+
constructor() {
|
|
11
|
+
super('windsurf', 'Windsurf', true); // preferred IDE
|
|
12
|
+
this.configDir = '.windsurf';
|
|
13
|
+
this.workflowsDir = 'workflows';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Setup Windsurf IDE configuration
|
|
18
|
+
* @param {string} projectDir - Project directory
|
|
19
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
20
|
+
* @param {Object} options - Setup options
|
|
21
|
+
*/
|
|
22
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
23
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
24
|
+
|
|
25
|
+
// Create .windsurf/workflows/bmad directory structure
|
|
26
|
+
const windsurfDir = path.join(projectDir, this.configDir);
|
|
27
|
+
const workflowsDir = path.join(windsurfDir, this.workflowsDir);
|
|
28
|
+
const bmadWorkflowsDir = path.join(workflowsDir, 'bmad');
|
|
29
|
+
|
|
30
|
+
await this.ensureDir(bmadWorkflowsDir);
|
|
31
|
+
|
|
32
|
+
// Clean up any existing BMAD workflows 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
|
+
// Convert artifacts to agent format for module organization
|
|
40
|
+
const agents = agentArtifacts.map((a) => ({ module: a.module, name: a.name }));
|
|
41
|
+
|
|
42
|
+
// Get tasks, tools, and workflows (standalone only)
|
|
43
|
+
const tasks = await this.getTasks(bmadDir, true);
|
|
44
|
+
const tools = await this.getTools(bmadDir, true);
|
|
45
|
+
const workflows = await this.getWorkflows(bmadDir, true);
|
|
46
|
+
|
|
47
|
+
// Create directories for each module under bmad/
|
|
48
|
+
const modules = new Set();
|
|
49
|
+
for (const item of [...agents, ...tasks, ...tools, ...workflows]) modules.add(item.module);
|
|
50
|
+
|
|
51
|
+
for (const module of modules) {
|
|
52
|
+
await this.ensureDir(path.join(bmadWorkflowsDir, module));
|
|
53
|
+
await this.ensureDir(path.join(bmadWorkflowsDir, module, 'agents'));
|
|
54
|
+
await this.ensureDir(path.join(bmadWorkflowsDir, module, 'tasks'));
|
|
55
|
+
await this.ensureDir(path.join(bmadWorkflowsDir, module, 'tools'));
|
|
56
|
+
await this.ensureDir(path.join(bmadWorkflowsDir, module, 'workflows'));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Process agent launchers as workflows with organized structure
|
|
60
|
+
let agentCount = 0;
|
|
61
|
+
for (const artifact of agentArtifacts) {
|
|
62
|
+
const processedContent = this.createWorkflowContent({ module: artifact.module, name: artifact.name }, artifact.content);
|
|
63
|
+
|
|
64
|
+
// Organized path: bmad/module/agents/agent-name.md
|
|
65
|
+
const targetPath = path.join(bmadWorkflowsDir, artifact.module, 'agents', `${artifact.name}.md`);
|
|
66
|
+
await this.writeFile(targetPath, processedContent);
|
|
67
|
+
agentCount++;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Process tasks as workflows with organized structure
|
|
71
|
+
let taskCount = 0;
|
|
72
|
+
for (const task of tasks) {
|
|
73
|
+
const content = await this.readFile(task.path);
|
|
74
|
+
const processedContent = this.createTaskWorkflowContent(task, content);
|
|
75
|
+
|
|
76
|
+
// Organized path: bmad/module/tasks/task-name.md
|
|
77
|
+
const targetPath = path.join(bmadWorkflowsDir, task.module, 'tasks', `${task.name}.md`);
|
|
78
|
+
await this.writeFile(targetPath, processedContent);
|
|
79
|
+
taskCount++;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Process tools as workflows with organized structure
|
|
83
|
+
let toolCount = 0;
|
|
84
|
+
for (const tool of tools) {
|
|
85
|
+
const content = await this.readFile(tool.path);
|
|
86
|
+
const processedContent = this.createToolWorkflowContent(tool, content);
|
|
87
|
+
|
|
88
|
+
// Organized path: bmad/module/tools/tool-name.md
|
|
89
|
+
const targetPath = path.join(bmadWorkflowsDir, tool.module, 'tools', `${tool.name}.md`);
|
|
90
|
+
await this.writeFile(targetPath, processedContent);
|
|
91
|
+
toolCount++;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Process workflows with organized structure
|
|
95
|
+
let workflowCount = 0;
|
|
96
|
+
for (const workflow of workflows) {
|
|
97
|
+
const content = await this.readFile(workflow.path);
|
|
98
|
+
const processedContent = this.createWorkflowWorkflowContent(workflow, content);
|
|
99
|
+
|
|
100
|
+
// Organized path: bmad/module/workflows/workflow-name.md
|
|
101
|
+
const targetPath = path.join(bmadWorkflowsDir, workflow.module, 'workflows', `${workflow.name}.md`);
|
|
102
|
+
await this.writeFile(targetPath, processedContent);
|
|
103
|
+
workflowCount++;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
107
|
+
console.log(chalk.dim(` - ${agentCount} agents installed`));
|
|
108
|
+
console.log(chalk.dim(` - ${taskCount} tasks installed`));
|
|
109
|
+
console.log(chalk.dim(` - ${toolCount} tools installed`));
|
|
110
|
+
console.log(chalk.dim(` - ${workflowCount} workflows installed`));
|
|
111
|
+
console.log(chalk.dim(` - Organized in modules: ${[...modules].join(', ')}`));
|
|
112
|
+
console.log(chalk.dim(` - Workflows directory: ${path.relative(projectDir, workflowsDir)}`));
|
|
113
|
+
|
|
114
|
+
// Provide additional configuration hints
|
|
115
|
+
if (options.showHints !== false) {
|
|
116
|
+
console.log(chalk.dim('\n Windsurf workflow settings:'));
|
|
117
|
+
console.log(chalk.dim(' - auto_execution_mode: 3 (recommended for agents)'));
|
|
118
|
+
console.log(chalk.dim(' - auto_execution_mode: 2 (recommended for tasks/tools)'));
|
|
119
|
+
console.log(chalk.dim(' - auto_execution_mode: 1 (recommended for workflows)'));
|
|
120
|
+
console.log(chalk.dim(' - Workflows can be triggered via the Windsurf menu'));
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
agents: agentCount,
|
|
126
|
+
tasks: taskCount,
|
|
127
|
+
tools: toolCount,
|
|
128
|
+
workflows: workflowCount,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Create workflow content for an agent
|
|
134
|
+
*/
|
|
135
|
+
createWorkflowContent(agent, content) {
|
|
136
|
+
// Strip existing frontmatter from launcher
|
|
137
|
+
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
|
138
|
+
const contentWithoutFrontmatter = content.replace(frontmatterRegex, '');
|
|
139
|
+
|
|
140
|
+
// Create simple Windsurf frontmatter matching original format
|
|
141
|
+
let workflowContent = `---
|
|
142
|
+
description: ${agent.name}
|
|
143
|
+
auto_execution_mode: 3
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
${contentWithoutFrontmatter}`;
|
|
147
|
+
|
|
148
|
+
return workflowContent;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Create workflow content for a task
|
|
153
|
+
*/
|
|
154
|
+
createTaskWorkflowContent(task, content) {
|
|
155
|
+
// Create simple Windsurf frontmatter matching original format
|
|
156
|
+
let workflowContent = `---
|
|
157
|
+
description: task-${task.name}
|
|
158
|
+
auto_execution_mode: 2
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
${content}`;
|
|
162
|
+
|
|
163
|
+
return workflowContent;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Create workflow content for a tool
|
|
168
|
+
*/
|
|
169
|
+
createToolWorkflowContent(tool, content) {
|
|
170
|
+
// Create simple Windsurf frontmatter matching original format
|
|
171
|
+
let workflowContent = `---
|
|
172
|
+
description: tool-${tool.name}
|
|
173
|
+
auto_execution_mode: 2
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
${content}`;
|
|
177
|
+
|
|
178
|
+
return workflowContent;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Create workflow content for a workflow
|
|
183
|
+
*/
|
|
184
|
+
createWorkflowWorkflowContent(workflow, content) {
|
|
185
|
+
// Create simple Windsurf frontmatter matching original format
|
|
186
|
+
let workflowContent = `---
|
|
187
|
+
description: ${workflow.name}
|
|
188
|
+
auto_execution_mode: 1
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
${content}`;
|
|
192
|
+
|
|
193
|
+
return workflowContent;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Cleanup Windsurf configuration - surgically remove only BMAD files
|
|
198
|
+
*/
|
|
199
|
+
async cleanup(projectDir) {
|
|
200
|
+
const fs = require('fs-extra');
|
|
201
|
+
const bmadPath = path.join(projectDir, this.configDir, this.workflowsDir, 'bmad');
|
|
202
|
+
|
|
203
|
+
if (await fs.pathExists(bmadPath)) {
|
|
204
|
+
// Remove the entire bmad folder - this is our territory
|
|
205
|
+
await fs.remove(bmadPath);
|
|
206
|
+
console.log(chalk.dim(` Cleaned up existing BMAD workflows`));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Install a custom agent launcher for Windsurf
|
|
212
|
+
* @param {string} projectDir - Project directory
|
|
213
|
+
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
|
214
|
+
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
|
215
|
+
* @param {Object} metadata - Agent metadata
|
|
216
|
+
* @returns {Object|null} Info about created command
|
|
217
|
+
*/
|
|
218
|
+
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
|
219
|
+
const fs = require('fs-extra');
|
|
220
|
+
const customAgentsDir = path.join(projectDir, this.configDir, this.workflowsDir, 'bmad', 'custom', 'agents');
|
|
221
|
+
|
|
222
|
+
if (!(await this.exists(path.join(projectDir, this.configDir)))) {
|
|
223
|
+
return null; // IDE not configured for this project
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
await this.ensureDir(customAgentsDir);
|
|
227
|
+
|
|
228
|
+
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.
|
|
229
|
+
|
|
230
|
+
<agent-activation CRITICAL="TRUE">
|
|
231
|
+
1. LOAD the FULL agent file from @${agentPath}
|
|
232
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
233
|
+
3. FOLLOW every step in the <activation> section precisely
|
|
234
|
+
4. DISPLAY the welcome/greeting as instructed
|
|
235
|
+
5. PRESENT the numbered menu
|
|
236
|
+
6. WAIT for user input before proceeding
|
|
237
|
+
</agent-activation>
|
|
238
|
+
`;
|
|
239
|
+
|
|
240
|
+
// Windsurf uses workflow format with frontmatter
|
|
241
|
+
const workflowContent = `---
|
|
242
|
+
description: ${metadata.title || agentName}
|
|
243
|
+
auto_execution_mode: 3
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
${launcherContent}`;
|
|
247
|
+
|
|
248
|
+
const launcherPath = path.join(customAgentsDir, `${agentName}.md`);
|
|
249
|
+
await fs.writeFile(launcherPath, workflowContent);
|
|
250
|
+
|
|
251
|
+
return {
|
|
252
|
+
path: launcherPath,
|
|
253
|
+
command: `bmad/custom/agents/${agentName}`,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
module.exports = { WindsurfSetup };
|