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,363 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const yaml = require('yaml');
|
|
5
|
+
const { FileOps } = require('../../../lib/file-ops');
|
|
6
|
+
const { XmlHandler } = require('../../../lib/xml-handler');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Handler for custom content (custom.yaml)
|
|
10
|
+
* Installs custom agents and workflows without requiring a full module structure
|
|
11
|
+
*/
|
|
12
|
+
class CustomHandler {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.fileOps = new FileOps();
|
|
15
|
+
this.xmlHandler = new XmlHandler();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Find all custom.yaml files in the project
|
|
20
|
+
* @param {string} projectRoot - Project root directory
|
|
21
|
+
* @returns {Array} List of custom content paths
|
|
22
|
+
*/
|
|
23
|
+
async findCustomContent(projectRoot) {
|
|
24
|
+
const customPaths = [];
|
|
25
|
+
|
|
26
|
+
// Helper function to recursively scan directories
|
|
27
|
+
async function scanDirectory(dir, excludePaths = []) {
|
|
28
|
+
try {
|
|
29
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
30
|
+
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
const fullPath = path.join(dir, entry.name);
|
|
33
|
+
|
|
34
|
+
// Skip hidden directories and common exclusions
|
|
35
|
+
if (
|
|
36
|
+
entry.name.startsWith('.') ||
|
|
37
|
+
entry.name === 'node_modules' ||
|
|
38
|
+
entry.name === 'dist' ||
|
|
39
|
+
entry.name === 'build' ||
|
|
40
|
+
entry.name === '.git' ||
|
|
41
|
+
entry.name === 'bmad'
|
|
42
|
+
) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Skip excluded paths
|
|
47
|
+
if (excludePaths.some((exclude) => fullPath.startsWith(exclude))) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (entry.isDirectory()) {
|
|
52
|
+
// Recursively scan subdirectories
|
|
53
|
+
await scanDirectory(fullPath, excludePaths);
|
|
54
|
+
} else if (entry.name === 'custom.yaml') {
|
|
55
|
+
// Found a custom.yaml file
|
|
56
|
+
customPaths.push(fullPath);
|
|
57
|
+
} else if (
|
|
58
|
+
entry.name === 'module.yaml' && // Check if this is a custom module (either in _module-installer or in root directory)
|
|
59
|
+
// Skip if it's in src/modules (those are standard modules)
|
|
60
|
+
!fullPath.includes(path.join('src', 'modules'))
|
|
61
|
+
) {
|
|
62
|
+
customPaths.push(fullPath);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
} catch {
|
|
66
|
+
// Ignore errors (e.g., permission denied)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Scan the entire project, but exclude source directories
|
|
71
|
+
await scanDirectory(projectRoot, [path.join(projectRoot, 'src'), path.join(projectRoot, 'tools'), path.join(projectRoot, 'test')]);
|
|
72
|
+
|
|
73
|
+
return customPaths;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Get custom content info from a custom.yaml or module.yaml file
|
|
78
|
+
* @param {string} configPath - Path to config file
|
|
79
|
+
* @param {string} projectRoot - Project root directory for calculating relative paths
|
|
80
|
+
* @returns {Object|null} Custom content info
|
|
81
|
+
*/
|
|
82
|
+
async getCustomInfo(configPath, projectRoot = null) {
|
|
83
|
+
try {
|
|
84
|
+
const configContent = await fs.readFile(configPath, 'utf8');
|
|
85
|
+
|
|
86
|
+
// Try to parse YAML with error handling
|
|
87
|
+
let config;
|
|
88
|
+
try {
|
|
89
|
+
config = yaml.parse(configContent);
|
|
90
|
+
} catch (parseError) {
|
|
91
|
+
console.warn(chalk.yellow(`Warning: YAML parse error in ${configPath}:`, parseError.message));
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Check if this is an module.yaml (module) or custom.yaml (custom content)
|
|
96
|
+
const isInstallConfig = configPath.endsWith('module.yaml');
|
|
97
|
+
const configDir = path.dirname(configPath);
|
|
98
|
+
|
|
99
|
+
// Use provided projectRoot or fall back to process.cwd()
|
|
100
|
+
const basePath = projectRoot || process.cwd();
|
|
101
|
+
const relativePath = path.relative(basePath, configDir);
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
id: config.code || 'unknown-code',
|
|
105
|
+
name: config.name,
|
|
106
|
+
description: config.description || '',
|
|
107
|
+
path: configDir,
|
|
108
|
+
relativePath: relativePath,
|
|
109
|
+
defaultSelected: config.default_selected === true,
|
|
110
|
+
config: config,
|
|
111
|
+
isInstallConfig: isInstallConfig, // Track which type this is
|
|
112
|
+
};
|
|
113
|
+
} catch (error) {
|
|
114
|
+
console.warn(chalk.yellow(`Warning: Failed to read ${configPath}:`, error.message));
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Install custom content
|
|
121
|
+
* @param {string} customPath - Path to custom content directory
|
|
122
|
+
* @param {string} bmadDir - Target bmad directory
|
|
123
|
+
* @param {Object} config - Configuration from custom.yaml
|
|
124
|
+
* @param {Function} fileTrackingCallback - Optional callback to track installed files
|
|
125
|
+
* @returns {Object} Installation result
|
|
126
|
+
*/
|
|
127
|
+
async install(customPath, bmadDir, config, fileTrackingCallback = null) {
|
|
128
|
+
const results = {
|
|
129
|
+
agentsInstalled: 0,
|
|
130
|
+
workflowsInstalled: 0,
|
|
131
|
+
filesCopied: 0,
|
|
132
|
+
preserved: 0,
|
|
133
|
+
errors: [],
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
try {
|
|
137
|
+
// Create custom directories in bmad
|
|
138
|
+
const bmadCustomDir = path.join(bmadDir, 'custom');
|
|
139
|
+
const bmadAgentsDir = path.join(bmadCustomDir, 'agents');
|
|
140
|
+
const bmadWorkflowsDir = path.join(bmadCustomDir, 'workflows');
|
|
141
|
+
|
|
142
|
+
await fs.ensureDir(bmadCustomDir);
|
|
143
|
+
await fs.ensureDir(bmadAgentsDir);
|
|
144
|
+
await fs.ensureDir(bmadWorkflowsDir);
|
|
145
|
+
|
|
146
|
+
// Process agents - compile and copy agents
|
|
147
|
+
const agentsDir = path.join(customPath, 'agents');
|
|
148
|
+
if (await fs.pathExists(agentsDir)) {
|
|
149
|
+
await this.compileAndCopyAgents(agentsDir, bmadAgentsDir, bmadDir, config, fileTrackingCallback, results);
|
|
150
|
+
|
|
151
|
+
// Count agent files
|
|
152
|
+
const agentFiles = await this.findFilesRecursively(agentsDir, ['.agent.yaml', '.md']);
|
|
153
|
+
results.agentsInstalled = agentFiles.length;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Process workflows - copy entire workflows directory structure
|
|
157
|
+
const workflowsDir = path.join(customPath, 'workflows');
|
|
158
|
+
if (await fs.pathExists(workflowsDir)) {
|
|
159
|
+
await this.copyDirectory(workflowsDir, bmadWorkflowsDir, results, fileTrackingCallback, config);
|
|
160
|
+
|
|
161
|
+
// Count workflow files
|
|
162
|
+
const workflowFiles = await this.findFilesRecursively(workflowsDir, ['.md']);
|
|
163
|
+
results.workflowsInstalled = workflowFiles.length;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Process any additional files at root
|
|
167
|
+
const entries = await fs.readdir(customPath, { withFileTypes: true });
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
if (entry.isFile() && entry.name !== 'custom.yaml' && !entry.name.startsWith('.') && !entry.name.endsWith('.md')) {
|
|
170
|
+
// Skip .md files at root as they're likely docs
|
|
171
|
+
const sourcePath = path.join(customPath, entry.name);
|
|
172
|
+
const targetPath = path.join(bmadCustomDir, entry.name);
|
|
173
|
+
|
|
174
|
+
try {
|
|
175
|
+
// Check if file already exists
|
|
176
|
+
if (await fs.pathExists(targetPath)) {
|
|
177
|
+
// File already exists, preserve it
|
|
178
|
+
results.preserved = (results.preserved || 0) + 1;
|
|
179
|
+
} else {
|
|
180
|
+
await fs.copy(sourcePath, targetPath);
|
|
181
|
+
results.filesCopied++;
|
|
182
|
+
|
|
183
|
+
if (fileTrackingCallback) {
|
|
184
|
+
fileTrackingCallback(targetPath);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
} catch (error) {
|
|
188
|
+
results.errors.push(`Failed to copy file ${entry.name}: ${error.message}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
} catch (error) {
|
|
193
|
+
results.errors.push(`Installation failed: ${error.message}`);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return results;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Find all files with specific extensions recursively
|
|
201
|
+
* @param {string} dir - Directory to search
|
|
202
|
+
* @param {Array} extensions - File extensions to match
|
|
203
|
+
* @returns {Array} List of matching files
|
|
204
|
+
*/
|
|
205
|
+
async findFilesRecursively(dir, extensions) {
|
|
206
|
+
const files = [];
|
|
207
|
+
|
|
208
|
+
async function search(currentDir) {
|
|
209
|
+
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
210
|
+
|
|
211
|
+
for (const entry of entries) {
|
|
212
|
+
const fullPath = path.join(currentDir, entry.name);
|
|
213
|
+
|
|
214
|
+
if (entry.isDirectory()) {
|
|
215
|
+
await search(fullPath);
|
|
216
|
+
} else if (extensions.some((ext) => entry.name.endsWith(ext))) {
|
|
217
|
+
files.push(fullPath);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
await search(dir);
|
|
223
|
+
return files;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Recursively copy a directory
|
|
228
|
+
* @param {string} sourceDir - Source directory
|
|
229
|
+
* @param {string} targetDir - Target directory
|
|
230
|
+
* @param {Object} results - Results object to update
|
|
231
|
+
* @param {Function} fileTrackingCallback - Optional callback
|
|
232
|
+
* @param {Object} config - Configuration for placeholder replacement
|
|
233
|
+
*/
|
|
234
|
+
async copyDirectory(sourceDir, targetDir, results, fileTrackingCallback, config) {
|
|
235
|
+
await fs.ensureDir(targetDir);
|
|
236
|
+
const entries = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
237
|
+
|
|
238
|
+
for (const entry of entries) {
|
|
239
|
+
const sourcePath = path.join(sourceDir, entry.name);
|
|
240
|
+
const targetPath = path.join(targetDir, entry.name);
|
|
241
|
+
|
|
242
|
+
if (entry.isDirectory()) {
|
|
243
|
+
await this.copyDirectory(sourcePath, targetPath, results, fileTrackingCallback, config);
|
|
244
|
+
} else {
|
|
245
|
+
try {
|
|
246
|
+
// Check if file already exists
|
|
247
|
+
if (await fs.pathExists(targetPath)) {
|
|
248
|
+
// File already exists, preserve it
|
|
249
|
+
results.preserved = (results.preserved || 0) + 1;
|
|
250
|
+
} else {
|
|
251
|
+
// Copy with placeholder replacement for text files
|
|
252
|
+
const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json'];
|
|
253
|
+
if (textExtensions.some((ext) => entry.name.endsWith(ext))) {
|
|
254
|
+
// Read source content
|
|
255
|
+
let content = await fs.readFile(sourcePath, 'utf8');
|
|
256
|
+
|
|
257
|
+
// Replace placeholders
|
|
258
|
+
content = content.replaceAll('{user_name}', config.user_name || 'User');
|
|
259
|
+
content = content.replaceAll('{communication_language}', config.communication_language || 'English');
|
|
260
|
+
content = content.replaceAll('{output_folder}', config.output_folder || 'docs');
|
|
261
|
+
|
|
262
|
+
// Write to target
|
|
263
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
264
|
+
await fs.writeFile(targetPath, content, 'utf8');
|
|
265
|
+
} else {
|
|
266
|
+
// Copy binary files as-is
|
|
267
|
+
await fs.copy(sourcePath, targetPath);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
results.filesCopied++;
|
|
271
|
+
if (fileTrackingCallback) {
|
|
272
|
+
fileTrackingCallback(targetPath);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (entry.name.endsWith('.md')) {
|
|
277
|
+
results.workflowsInstalled++;
|
|
278
|
+
}
|
|
279
|
+
} catch (error) {
|
|
280
|
+
results.errors.push(`Failed to copy ${entry.name}: ${error.message}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Compile .agent.yaml files to .md format and handle sidecars
|
|
288
|
+
* @param {string} sourceAgentsPath - Source agents directory
|
|
289
|
+
* @param {string} targetAgentsPath - Target agents directory
|
|
290
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
291
|
+
* @param {Object} config - Configuration for placeholder replacement
|
|
292
|
+
* @param {Function} fileTrackingCallback - Optional callback to track installed files
|
|
293
|
+
* @param {Object} results - Results object to update
|
|
294
|
+
*/
|
|
295
|
+
async compileAndCopyAgents(sourceAgentsPath, targetAgentsPath, bmadDir, config, fileTrackingCallback, results) {
|
|
296
|
+
// Get all .agent.yaml files recursively
|
|
297
|
+
const agentFiles = await this.findFilesRecursively(sourceAgentsPath, ['.agent.yaml']);
|
|
298
|
+
|
|
299
|
+
for (const agentFile of agentFiles) {
|
|
300
|
+
const relativePath = path.relative(sourceAgentsPath, agentFile);
|
|
301
|
+
const targetDir = path.join(targetAgentsPath, path.dirname(relativePath));
|
|
302
|
+
|
|
303
|
+
await fs.ensureDir(targetDir);
|
|
304
|
+
|
|
305
|
+
const agentName = path.basename(agentFile, '.agent.yaml');
|
|
306
|
+
const targetMdPath = path.join(targetDir, `${agentName}.md`);
|
|
307
|
+
// Use the actual bmadDir if available (for when installing to temp dir)
|
|
308
|
+
const actualBmadDir = config._bmadDir || bmadDir;
|
|
309
|
+
const customizePath = path.join(actualBmadDir, '_config', 'agents', `custom-${agentName}.customize.yaml`);
|
|
310
|
+
|
|
311
|
+
// Read and compile the YAML
|
|
312
|
+
try {
|
|
313
|
+
const yamlContent = await fs.readFile(agentFile, 'utf8');
|
|
314
|
+
const { compileAgent } = require('../../../lib/agent/compiler');
|
|
315
|
+
|
|
316
|
+
// Create customize template if it doesn't exist
|
|
317
|
+
if (!(await fs.pathExists(customizePath))) {
|
|
318
|
+
const { getSourcePath } = require('../../../lib/project-root');
|
|
319
|
+
const genericTemplatePath = getSourcePath('utility', 'agent-components', 'agent.customize.template.yaml');
|
|
320
|
+
if (await fs.pathExists(genericTemplatePath)) {
|
|
321
|
+
let templateContent = await fs.readFile(genericTemplatePath, 'utf8');
|
|
322
|
+
await fs.writeFile(customizePath, templateContent, 'utf8');
|
|
323
|
+
// Only show customize creation in verbose mode
|
|
324
|
+
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
325
|
+
console.log(chalk.dim(` Created customize: custom-${agentName}.customize.yaml`));
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Compile the agent
|
|
331
|
+
const { xml } = compileAgent(yamlContent, {}, agentName, relativePath, { config });
|
|
332
|
+
|
|
333
|
+
// Replace placeholders in the compiled content
|
|
334
|
+
let processedXml = xml;
|
|
335
|
+
processedXml = processedXml.replaceAll('{user_name}', config.user_name || 'User');
|
|
336
|
+
processedXml = processedXml.replaceAll('{communication_language}', config.communication_language || 'English');
|
|
337
|
+
processedXml = processedXml.replaceAll('{output_folder}', config.output_folder || 'docs');
|
|
338
|
+
|
|
339
|
+
// Write the compiled MD file
|
|
340
|
+
await fs.writeFile(targetMdPath, processedXml, 'utf8');
|
|
341
|
+
|
|
342
|
+
// Track the file
|
|
343
|
+
if (fileTrackingCallback) {
|
|
344
|
+
fileTrackingCallback(targetMdPath);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Only show compilation details in verbose mode
|
|
348
|
+
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
349
|
+
console.log(
|
|
350
|
+
chalk.dim(
|
|
351
|
+
` Compiled agent: ${agentName} -> ${path.relative(targetAgentsPath, targetMdPath)}${hasSidecar ? ' (with sidecar)' : ''}`,
|
|
352
|
+
),
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
} catch (error) {
|
|
356
|
+
console.warn(chalk.yellow(` Failed to compile agent ${agentName}:`, error.message));
|
|
357
|
+
results.errors.push(`Failed to compile agent ${agentName}: ${error.message}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
module.exports = { CustomHandler };
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# IDE Installer Standardization Plan
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Standardize IDE installers to use **flat file naming** with **underscores** (Windows-compatible) and centralize duplicated code in shared utilities.
|
|
6
|
+
|
|
7
|
+
**Key Rule: All IDEs use underscore format for Windows compatibility (colons don't work on Windows).**
|
|
8
|
+
|
|
9
|
+
## Current State Analysis
|
|
10
|
+
|
|
11
|
+
### File Structure Patterns
|
|
12
|
+
|
|
13
|
+
| IDE | Current Pattern | Path Format |
|
|
14
|
+
|-----|-----------------|-------------|
|
|
15
|
+
| **claude-code** | Hierarchical | `.claude/commands/bmad/{module}/agents/{name}.md` |
|
|
16
|
+
| **cursor** | Hierarchical | `.cursor/commands/bmad/{module}/agents/{name}.md` |
|
|
17
|
+
| **crush** | Hierarchical | `.crush/commands/bmad/{module}/agents/{name}.md` |
|
|
18
|
+
| **antigravity** | Flattened (underscores) | `.agent/workflows/bmad_module_agents_name.md` |
|
|
19
|
+
| **codex** | Flattened (underscores) | `~/.codex/prompts/bmad_module_agents_name.md` |
|
|
20
|
+
| **cline** | Flattened (underscores) | `.clinerules/workflows/bmad_module_type_name.md` |
|
|
21
|
+
| **roo** | Flattened (underscores) | `.roo/commands/bmad_module_agent_name.md` |
|
|
22
|
+
| **auggie** | Hybrid | `.augment/commands/bmad/agents/{module}-{name}.md` |
|
|
23
|
+
| **iflow** | Hybrid | `.iflow/commands/bmad/agents/{module}-{name}.md` |
|
|
24
|
+
| **trae** | Different (rules) | `.trae/rules/bmad-agent-{module}-{name}.md` |
|
|
25
|
+
| **github-copilot** | Different (agents) | `.github/agents/bmd-custom-{module}-{name}.agent.md` |
|
|
26
|
+
|
|
27
|
+
### Shared Generators (in `/shared`)
|
|
28
|
+
|
|
29
|
+
1. `agent-command-generator.js` - generates agent launchers
|
|
30
|
+
2. `task-tool-command-generator.js` - generates task/tool commands
|
|
31
|
+
3. `workflow-command-generator.js` - generates workflow commands
|
|
32
|
+
|
|
33
|
+
All currently create artifacts with **nested relative paths** like `{module}/agents/{name}.md`
|
|
34
|
+
|
|
35
|
+
### Code Duplication Issues
|
|
36
|
+
|
|
37
|
+
1. **Flattening logic** duplicated in multiple IDEs
|
|
38
|
+
2. **Agent launcher content creation** duplicated
|
|
39
|
+
3. **Path transformation** duplicated
|
|
40
|
+
|
|
41
|
+
## Target Standardization
|
|
42
|
+
|
|
43
|
+
### For All IDEs (underscore format - Windows-compatible)
|
|
44
|
+
|
|
45
|
+
**IDEs affected:** claude-code, cursor, crush, antigravity, codex, cline, roo
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Format: bmad_{module}_{type}_{name}.md
|
|
49
|
+
|
|
50
|
+
Examples:
|
|
51
|
+
- Agent: bmad_bmm_agents_pm.md
|
|
52
|
+
- Agent: bmad_core_agents_dev.md
|
|
53
|
+
- Workflow: bmad_bmm_workflows_correct-course.md
|
|
54
|
+
- Task: bmad_bmm_tasks_bmad-help.md
|
|
55
|
+
- Tool: bmad_core_tools_code-review.md
|
|
56
|
+
- Custom: bmad_custom_agents_fred-commit-poet.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Note:** Type segments (agents, workflows, tasks, tools) are filtered out from names:
|
|
60
|
+
- `bmm/agents/pm.md` → `bmad_bmm_pm.md` (not `bmad_bmm_agents_pm.md`)
|
|
61
|
+
|
|
62
|
+
### For Hybrid IDEs (keep as-is)
|
|
63
|
+
|
|
64
|
+
**IDEs affected:** auggie, iflow
|
|
65
|
+
|
|
66
|
+
These use `{module}-{name}.md` format within subdirectories - keep as-is.
|
|
67
|
+
|
|
68
|
+
### Skip (drastically different)
|
|
69
|
+
|
|
70
|
+
**IDEs affected:** trae, github-copilot
|
|
71
|
+
|
|
72
|
+
## Implementation Plan
|
|
73
|
+
|
|
74
|
+
### Phase 1: Create Shared Utility
|
|
75
|
+
|
|
76
|
+
**File:** `shared/path-utils.js`
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
/**
|
|
80
|
+
* Convert hierarchical path to flat underscore-separated name (Windows-compatible)
|
|
81
|
+
* @param {string} module - Module name (e.g., 'bmm', 'core')
|
|
82
|
+
* @param {string} type - Artifact type ('agents', 'workflows', 'tasks', 'tools') - filtered out
|
|
83
|
+
* @param {string} name - Artifact name (e.g., 'pm', 'correct-course')
|
|
84
|
+
* @returns {string} Flat filename like 'bmad_bmm_pm.md'
|
|
85
|
+
*/
|
|
86
|
+
function toUnderscoreName(module, type, name) {
|
|
87
|
+
return `bmad_${module}_${name}.md`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Convert relative path to flat underscore-separated name (Windows-compatible)
|
|
92
|
+
* @param {string} relativePath - Path like 'bmm/agents/pm.md'
|
|
93
|
+
* @returns {string} Flat filename like 'bmad_bmm_pm.md'
|
|
94
|
+
*/
|
|
95
|
+
function toUnderscorePath(relativePath) {
|
|
96
|
+
const withoutExt = relativePath.replace('.md', '');
|
|
97
|
+
const parts = withoutExt.split(/[\/\\]/);
|
|
98
|
+
// Filter out type segments (agents, workflows, tasks, tools)
|
|
99
|
+
const filtered = parts.filter((p) => !TYPE_SEGMENTS.includes(p));
|
|
100
|
+
return `bmad_${filtered.join('_')}.md`;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Create custom agent underscore name
|
|
105
|
+
* @param {string} agentName - Custom agent name
|
|
106
|
+
* @returns {string} Flat filename like 'bmad_custom_fred-commit-poet.md'
|
|
107
|
+
*/
|
|
108
|
+
function customAgentUnderscoreName(agentName) {
|
|
109
|
+
return `bmad_custom_${agentName}.md`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Backward compatibility aliases
|
|
113
|
+
const toColonName = toUnderscoreName;
|
|
114
|
+
const toColonPath = toUnderscorePath;
|
|
115
|
+
const toDashPath = toUnderscorePath;
|
|
116
|
+
const customAgentColonName = customAgentUnderscoreName;
|
|
117
|
+
const customAgentDashName = customAgentUnderscoreName;
|
|
118
|
+
|
|
119
|
+
module.exports = {
|
|
120
|
+
toUnderscoreName,
|
|
121
|
+
toUnderscorePath,
|
|
122
|
+
customAgentUnderscoreName,
|
|
123
|
+
// Backward compatibility
|
|
124
|
+
toColonName,
|
|
125
|
+
toColonPath,
|
|
126
|
+
toDashPath,
|
|
127
|
+
customAgentColonName,
|
|
128
|
+
customAgentDashName,
|
|
129
|
+
};
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Phase 2: Update Shared Generators
|
|
133
|
+
|
|
134
|
+
**Files to modify:**
|
|
135
|
+
- `shared/agent-command-generator.js`
|
|
136
|
+
- `shared/task-tool-command-generator.js`
|
|
137
|
+
- `shared/workflow-command-generator.js`
|
|
138
|
+
|
|
139
|
+
**Changes:**
|
|
140
|
+
1. Import path utilities
|
|
141
|
+
2. Change `relativePath` to use flat format
|
|
142
|
+
3. Add method `writeColonArtifacts()` for folder-based IDEs (uses underscore)
|
|
143
|
+
4. Add method `writeDashArtifacts()` for flat IDEs (uses underscore)
|
|
144
|
+
|
|
145
|
+
### Phase 3: Update All IDEs
|
|
146
|
+
|
|
147
|
+
**Files to modify:**
|
|
148
|
+
- `claude-code.js`
|
|
149
|
+
- `cursor.js`
|
|
150
|
+
- `crush.js`
|
|
151
|
+
- `antigravity.js`
|
|
152
|
+
- `codex.js`
|
|
153
|
+
- `cline.js`
|
|
154
|
+
- `roo.js`
|
|
155
|
+
|
|
156
|
+
**Changes:**
|
|
157
|
+
1. Import utilities from path-utils
|
|
158
|
+
2. Change from hierarchical to flat underscore naming
|
|
159
|
+
3. Update cleanup to handle flat structure (`startsWith('bmad')`)
|
|
160
|
+
|
|
161
|
+
### Phase 4: Update Base Class
|
|
162
|
+
|
|
163
|
+
**File:** `_base-ide.js`
|
|
164
|
+
|
|
165
|
+
**Changes:**
|
|
166
|
+
1. Mark `flattenFilename()` as `@deprecated`
|
|
167
|
+
2. Add comment pointing to new path-utils
|
|
168
|
+
|
|
169
|
+
## Migration Checklist
|
|
170
|
+
|
|
171
|
+
### New Files
|
|
172
|
+
- [x] Create `shared/path-utils.js`
|
|
173
|
+
|
|
174
|
+
### All IDEs (convert to underscore format)
|
|
175
|
+
- [x] Update `shared/agent-command-generator.js` - update for underscore
|
|
176
|
+
- [x] Update `shared/task-tool-command-generator.js` - update for underscore
|
|
177
|
+
- [x] Update `shared/workflow-command-generator.js` - update for underscore
|
|
178
|
+
- [x] Update `claude-code.js` - convert to underscore format
|
|
179
|
+
- [x] Update `cursor.js` - convert to underscore format
|
|
180
|
+
- [x] Update `crush.js` - convert to underscore format
|
|
181
|
+
- [ ] Update `antigravity.js` - use underscore format
|
|
182
|
+
- [ ] Update `codex.js` - use underscore format
|
|
183
|
+
- [ ] Update `cline.js` - use underscore format
|
|
184
|
+
- [ ] Update `roo.js` - use underscore format
|
|
185
|
+
|
|
186
|
+
### CSV Command Files
|
|
187
|
+
- [x] Update `src/core/module-help.csv` - change colons to underscores
|
|
188
|
+
- [x] Update `src/bmm/module-help.csv` - change colons to underscores
|
|
189
|
+
|
|
190
|
+
### Base Class
|
|
191
|
+
- [ ] Update `_base-ide.js` - add deprecation notice
|
|
192
|
+
|
|
193
|
+
### Testing
|
|
194
|
+
- [ ] Test claude-code installation
|
|
195
|
+
- [ ] Test cursor installation
|
|
196
|
+
- [ ] Test crush installation
|
|
197
|
+
- [ ] Test antigravity installation
|
|
198
|
+
- [ ] Test codex installation
|
|
199
|
+
- [ ] Test cline installation
|
|
200
|
+
- [ ] Test roo installation
|
|
201
|
+
|
|
202
|
+
## Notes
|
|
203
|
+
|
|
204
|
+
1. **Filter type segments**: agents, workflows, tasks, tools are filtered out from flat names
|
|
205
|
+
2. **Underscore format**: Universal underscore format for Windows compatibility
|
|
206
|
+
3. **Custom agents**: Follow the same pattern as regular agents
|
|
207
|
+
4. **Backward compatibility**: Old function names kept as aliases
|
|
208
|
+
5. **Cleanup**: Will remove old `bmad:` format files on next install
|