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,506 @@
|
|
|
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 { getProjectRoot, getSourcePath, getModulePath } = require('../../../lib/project-root');
|
|
6
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
7
|
+
const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
|
|
8
|
+
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
9
|
+
const {
|
|
10
|
+
loadModuleInjectionConfig,
|
|
11
|
+
shouldApplyInjection,
|
|
12
|
+
filterAgentInstructions,
|
|
13
|
+
resolveSubagentFiles,
|
|
14
|
+
} = require('./shared/module-injections');
|
|
15
|
+
const { getAgentsFromBmad, getAgentsFromDir } = require('./shared/bmad-artifacts');
|
|
16
|
+
const { customAgentColonName } = require('./shared/path-utils');
|
|
17
|
+
const prompts = require('../../../lib/prompts');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Claude Code IDE setup handler
|
|
21
|
+
*/
|
|
22
|
+
class ClaudeCodeSetup extends BaseIdeSetup {
|
|
23
|
+
constructor() {
|
|
24
|
+
super('claude-code', 'Claude Code', true); // preferred IDE
|
|
25
|
+
this.configDir = '.claude';
|
|
26
|
+
this.commandsDir = 'commands';
|
|
27
|
+
this.agentsDir = 'agents';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Prompt for subagent installation location
|
|
32
|
+
* @returns {Promise<string>} Selected location ('project' or 'user')
|
|
33
|
+
*/
|
|
34
|
+
async promptInstallLocation() {
|
|
35
|
+
return prompts.select({
|
|
36
|
+
message: 'Where would you like to install Claude Code subagents?',
|
|
37
|
+
choices: [
|
|
38
|
+
{ name: 'Project level (.claude/agents/)', value: 'project' },
|
|
39
|
+
{ name: 'User level (~/.claude/agents/)', value: 'user' },
|
|
40
|
+
],
|
|
41
|
+
default: 'project',
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// /**
|
|
46
|
+
// * Collect configuration choices before installation
|
|
47
|
+
// * @param {Object} options - Configuration options
|
|
48
|
+
// * @returns {Object} Collected configuration
|
|
49
|
+
// */
|
|
50
|
+
// async collectConfiguration(options = {}) {
|
|
51
|
+
// const config = {
|
|
52
|
+
// subagentChoices: null,
|
|
53
|
+
// installLocation: null,
|
|
54
|
+
// };
|
|
55
|
+
|
|
56
|
+
// const sourceModulesPath = getSourcePath('modules');
|
|
57
|
+
// const modules = options.selectedModules || [];
|
|
58
|
+
|
|
59
|
+
// for (const moduleName of modules) {
|
|
60
|
+
// // Check for Claude Code sub-module injection config in SOURCE directory
|
|
61
|
+
// const injectionConfigPath = path.join(sourceModulesPath, moduleName, 'sub-modules', 'claude-code', 'injections.yaml');
|
|
62
|
+
|
|
63
|
+
// if (await this.exists(injectionConfigPath)) {
|
|
64
|
+
// const yaml = require('yaml');
|
|
65
|
+
|
|
66
|
+
// try {
|
|
67
|
+
// // Load injection configuration
|
|
68
|
+
// const configContent = await fs.readFile(injectionConfigPath, 'utf8');
|
|
69
|
+
// const injectionConfig = yaml.parse(configContent);
|
|
70
|
+
|
|
71
|
+
// // Ask about subagents if they exist and we haven't asked yet
|
|
72
|
+
// if (injectionConfig.subagents && !config.subagentChoices) {
|
|
73
|
+
// config.subagentChoices = await this.promptSubagentInstallation(injectionConfig.subagents);
|
|
74
|
+
|
|
75
|
+
// if (config.subagentChoices.install !== 'none') {
|
|
76
|
+
// config.installLocation = await this.promptInstallLocation();
|
|
77
|
+
// }
|
|
78
|
+
// }
|
|
79
|
+
// } catch (error) {
|
|
80
|
+
// console.log(chalk.yellow(` Warning: Failed to process ${moduleName} features: ${error.message}`));
|
|
81
|
+
// }
|
|
82
|
+
// }
|
|
83
|
+
// }
|
|
84
|
+
|
|
85
|
+
// return config;
|
|
86
|
+
// }
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Cleanup old BMAD installation before reinstalling
|
|
90
|
+
* @param {string} projectDir - Project directory
|
|
91
|
+
*/
|
|
92
|
+
async cleanup(projectDir) {
|
|
93
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
94
|
+
|
|
95
|
+
// Remove any bmad* files from the commands directory (cleans up old bmad: and bmad- formats)
|
|
96
|
+
if (await fs.pathExists(commandsDir)) {
|
|
97
|
+
const entries = await fs.readdir(commandsDir);
|
|
98
|
+
let removedCount = 0;
|
|
99
|
+
for (const entry of entries) {
|
|
100
|
+
if (entry.startsWith('bmad')) {
|
|
101
|
+
await fs.remove(path.join(commandsDir, entry));
|
|
102
|
+
removedCount++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Also remove legacy bmad folder if it exists
|
|
106
|
+
const bmadFolder = path.join(commandsDir, 'bmad');
|
|
107
|
+
if (await fs.pathExists(bmadFolder)) {
|
|
108
|
+
await fs.remove(bmadFolder);
|
|
109
|
+
console.log(chalk.dim(` Removed old BMAD commands from ${this.name}`));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Clean up legacy folder structure (module/type/name.md) if it exists
|
|
116
|
+
* This can be called after migration to remove old nested directories
|
|
117
|
+
* @param {string} projectDir - Project directory
|
|
118
|
+
*/
|
|
119
|
+
async cleanupLegacyFolders(projectDir) {
|
|
120
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
121
|
+
|
|
122
|
+
if (!(await fs.pathExists(commandsDir))) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Remove legacy bmad folder if it exists
|
|
127
|
+
const bmadFolder = path.join(commandsDir, 'bmad');
|
|
128
|
+
if (await fs.pathExists(bmadFolder)) {
|
|
129
|
+
await fs.remove(bmadFolder);
|
|
130
|
+
console.log(chalk.dim(` Removed legacy bmad folder from ${this.name}`));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Setup Claude Code IDE configuration
|
|
136
|
+
* @param {string} projectDir - Project directory
|
|
137
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
138
|
+
* @param {Object} options - Setup options
|
|
139
|
+
*/
|
|
140
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
141
|
+
// Store project directory for use in processContent
|
|
142
|
+
this.projectDir = projectDir;
|
|
143
|
+
|
|
144
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
145
|
+
|
|
146
|
+
// Clean up old BMAD installation first
|
|
147
|
+
await this.cleanup(projectDir);
|
|
148
|
+
|
|
149
|
+
// Create .claude/commands directory structure
|
|
150
|
+
const claudeDir = path.join(projectDir, this.configDir);
|
|
151
|
+
const commandsDir = path.join(claudeDir, this.commandsDir);
|
|
152
|
+
await this.ensureDir(commandsDir);
|
|
153
|
+
|
|
154
|
+
// Use underscore format: files written directly to commands dir (no bmad subfolder)
|
|
155
|
+
// Creates: .claude/commands/bmad_bmm_pm.md
|
|
156
|
+
|
|
157
|
+
// Generate agent launchers using AgentCommandGenerator
|
|
158
|
+
// This creates small launcher files that reference the actual agents in _bmad/
|
|
159
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
160
|
+
const { artifacts: agentArtifacts, counts: agentCounts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
161
|
+
|
|
162
|
+
// Write agent launcher files using flat underscore naming
|
|
163
|
+
// Creates files like: bmad_bmm_pm.md
|
|
164
|
+
const agentCount = await agentGen.writeColonArtifacts(commandsDir, agentArtifacts);
|
|
165
|
+
|
|
166
|
+
// Process Claude Code specific injections for installed modules
|
|
167
|
+
// Use pre-collected configuration if available, or skip if already configured
|
|
168
|
+
if (options.preCollectedConfig && options.preCollectedConfig._alreadyConfigured) {
|
|
169
|
+
// IDE is already configured from previous installation, skip prompting
|
|
170
|
+
// Just process with default/existing configuration
|
|
171
|
+
await this.processModuleInjectionsWithConfig(projectDir, bmadDir, options, {});
|
|
172
|
+
} else if (options.preCollectedConfig) {
|
|
173
|
+
await this.processModuleInjectionsWithConfig(projectDir, bmadDir, options, options.preCollectedConfig);
|
|
174
|
+
} else {
|
|
175
|
+
await this.processModuleInjections(projectDir, bmadDir, options);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Skip CLAUDE.md creation - let user manage their own CLAUDE.md file
|
|
179
|
+
// await this.createClaudeConfig(projectDir, modules);
|
|
180
|
+
|
|
181
|
+
// Generate workflow commands from manifest (if it exists)
|
|
182
|
+
const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
183
|
+
const { artifacts: workflowArtifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir);
|
|
184
|
+
|
|
185
|
+
// Write workflow-command artifacts using flat underscore naming
|
|
186
|
+
// Creates files like: bmad_bmm_correct-course.md
|
|
187
|
+
const workflowCommandCount = await workflowGen.writeColonArtifacts(commandsDir, workflowArtifacts);
|
|
188
|
+
|
|
189
|
+
// Generate task and tool commands from manifests (if they exist)
|
|
190
|
+
const taskToolGen = new TaskToolCommandGenerator();
|
|
191
|
+
const taskToolResult = await taskToolGen.generateColonTaskToolCommands(projectDir, bmadDir, commandsDir);
|
|
192
|
+
|
|
193
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
194
|
+
console.log(chalk.dim(` - ${agentCount} agents installed`));
|
|
195
|
+
if (workflowCommandCount > 0) {
|
|
196
|
+
console.log(chalk.dim(` - ${workflowCommandCount} workflow commands generated`));
|
|
197
|
+
}
|
|
198
|
+
if (taskToolResult.generated > 0) {
|
|
199
|
+
console.log(
|
|
200
|
+
chalk.dim(
|
|
201
|
+
` - ${taskToolResult.generated} task/tool commands generated (${taskToolResult.tasks} tasks, ${taskToolResult.tools} tools)`,
|
|
202
|
+
),
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
|
206
|
+
|
|
207
|
+
return {
|
|
208
|
+
success: true,
|
|
209
|
+
agents: agentCount,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Method removed - CLAUDE.md file management left to user
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Read and process file content
|
|
217
|
+
*/
|
|
218
|
+
async readAndProcess(filePath, metadata) {
|
|
219
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
220
|
+
return this.processContent(content, metadata);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Override processContent to keep {project-root} placeholder
|
|
225
|
+
*/
|
|
226
|
+
processContent(content, metadata = {}) {
|
|
227
|
+
// Use the base class method WITHOUT projectDir to preserve {project-root} placeholder
|
|
228
|
+
return super.processContent(content, metadata);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Get agents from source modules (not installed location)
|
|
233
|
+
*/
|
|
234
|
+
async getAgentsFromSource(sourceDir, selectedModules) {
|
|
235
|
+
const agents = [];
|
|
236
|
+
|
|
237
|
+
// Add core agents
|
|
238
|
+
const corePath = getModulePath('core');
|
|
239
|
+
if (await fs.pathExists(path.join(corePath, 'agents'))) {
|
|
240
|
+
const coreAgents = await getAgentsFromDir(path.join(corePath, 'agents'), 'core');
|
|
241
|
+
agents.push(...coreAgents);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Add module agents
|
|
245
|
+
for (const moduleName of selectedModules) {
|
|
246
|
+
const modulePath = path.join(sourceDir, moduleName);
|
|
247
|
+
const agentsPath = path.join(modulePath, 'agents');
|
|
248
|
+
|
|
249
|
+
if (await fs.pathExists(agentsPath)) {
|
|
250
|
+
const moduleAgents = await getAgentsFromDir(agentsPath, moduleName);
|
|
251
|
+
agents.push(...moduleAgents);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return agents;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Process module injections with pre-collected configuration
|
|
260
|
+
*/
|
|
261
|
+
async processModuleInjectionsWithConfig(projectDir, bmadDir, options, preCollectedConfig) {
|
|
262
|
+
// Get list of installed modules
|
|
263
|
+
const modules = options.selectedModules || [];
|
|
264
|
+
const { subagentChoices, installLocation } = preCollectedConfig;
|
|
265
|
+
|
|
266
|
+
// Get the actual source directory (not the installation directory)
|
|
267
|
+
await this.processModuleInjectionsInternal({
|
|
268
|
+
projectDir,
|
|
269
|
+
modules,
|
|
270
|
+
handler: 'claude-code',
|
|
271
|
+
subagentChoices,
|
|
272
|
+
installLocation,
|
|
273
|
+
interactive: false,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Process Claude Code specific injections for installed modules
|
|
279
|
+
* Looks for injections.yaml in each module's claude-code sub-module
|
|
280
|
+
*/
|
|
281
|
+
async processModuleInjections(projectDir, bmadDir, options) {
|
|
282
|
+
// Get list of installed modules
|
|
283
|
+
const modules = options.selectedModules || [];
|
|
284
|
+
let subagentChoices = null;
|
|
285
|
+
let installLocation = null;
|
|
286
|
+
|
|
287
|
+
// Get the actual source directory (not the installation directory)
|
|
288
|
+
const { subagentChoices: updatedChoices, installLocation: updatedLocation } = await this.processModuleInjectionsInternal({
|
|
289
|
+
projectDir,
|
|
290
|
+
modules,
|
|
291
|
+
handler: 'claude-code',
|
|
292
|
+
subagentChoices,
|
|
293
|
+
installLocation,
|
|
294
|
+
interactive: true,
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
if (updatedChoices) {
|
|
298
|
+
subagentChoices = updatedChoices;
|
|
299
|
+
}
|
|
300
|
+
if (updatedLocation) {
|
|
301
|
+
installLocation = updatedLocation;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
async processModuleInjectionsInternal({ projectDir, modules, handler, subagentChoices, installLocation, interactive = false }) {
|
|
306
|
+
let choices = subagentChoices;
|
|
307
|
+
let location = installLocation;
|
|
308
|
+
|
|
309
|
+
for (const moduleName of modules) {
|
|
310
|
+
const configData = await loadModuleInjectionConfig(handler, moduleName);
|
|
311
|
+
|
|
312
|
+
if (!configData) {
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const { config, handlerBaseDir } = configData;
|
|
317
|
+
|
|
318
|
+
if (interactive) {
|
|
319
|
+
console.log(chalk.cyan(`\nConfiguring ${moduleName} ${handler.replace('-', ' ')} features...`));
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
if (interactive && config.subagents && !choices) {
|
|
323
|
+
// choices = await this.promptSubagentInstallation(config.subagents);
|
|
324
|
+
// if (choices.install !== 'none') {
|
|
325
|
+
// location = await this.promptInstallLocation();
|
|
326
|
+
// }
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (config.injections && choices && choices.install !== 'none') {
|
|
330
|
+
for (const injection of config.injections) {
|
|
331
|
+
if (shouldApplyInjection(injection, choices)) {
|
|
332
|
+
await this.injectContent(projectDir, injection, choices);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if (config.subagents && choices && choices.install !== 'none') {
|
|
338
|
+
await this.copySelectedSubagents(projectDir, handlerBaseDir, config.subagents, choices, location || 'project');
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return { subagentChoices: choices, installLocation: location };
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Prompt user for subagent installation preferences
|
|
347
|
+
*/
|
|
348
|
+
async promptSubagentInstallation(subagentConfig) {
|
|
349
|
+
// First ask if they want to install subagents
|
|
350
|
+
const install = await prompts.select({
|
|
351
|
+
message: 'Would you like to install Claude Code subagents for enhanced functionality?',
|
|
352
|
+
choices: [
|
|
353
|
+
{ name: 'Yes, install all subagents', value: 'all' },
|
|
354
|
+
{ name: 'Yes, let me choose specific subagents', value: 'selective' },
|
|
355
|
+
{ name: 'No, skip subagent installation', value: 'none' },
|
|
356
|
+
],
|
|
357
|
+
default: 'all',
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
if (install === 'selective') {
|
|
361
|
+
// Show list of available subagents with descriptions
|
|
362
|
+
const subagentInfo = {
|
|
363
|
+
'market-researcher.md': 'Market research and competitive analysis',
|
|
364
|
+
'requirements-analyst.md': 'Requirements extraction and validation',
|
|
365
|
+
'technical-evaluator.md': 'Technology stack evaluation',
|
|
366
|
+
'epic-optimizer.md': 'Epic and story breakdown optimization',
|
|
367
|
+
'document-reviewer.md': 'Document quality review',
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
const selected = await prompts.multiselect({
|
|
371
|
+
message: `Select subagents to install ${chalk.dim('(↑/↓ navigates multiselect, SPACE toggles, A to toggles All, ENTER confirm)')}:`,
|
|
372
|
+
options: subagentConfig.files.map((file) => ({
|
|
373
|
+
label: `${file.replace('.md', '')} - ${subagentInfo[file] || 'Specialized assistant'}`,
|
|
374
|
+
value: file,
|
|
375
|
+
})),
|
|
376
|
+
initialValues: subagentConfig.files,
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
return { install: 'selective', selected };
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return { install };
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Inject content at specified point in file
|
|
387
|
+
*/
|
|
388
|
+
async injectContent(projectDir, injection, subagentChoices = null) {
|
|
389
|
+
const targetPath = path.join(projectDir, injection.file);
|
|
390
|
+
|
|
391
|
+
if (await this.exists(targetPath)) {
|
|
392
|
+
let content = await fs.readFile(targetPath, 'utf8');
|
|
393
|
+
const marker = `<!-- IDE-INJECT-POINT: ${injection.point} -->`;
|
|
394
|
+
|
|
395
|
+
if (content.includes(marker)) {
|
|
396
|
+
let injectionContent = injection.content;
|
|
397
|
+
|
|
398
|
+
// Filter content if selective subagents chosen
|
|
399
|
+
if (subagentChoices && subagentChoices.install === 'selective' && injection.point === 'pm-agent-instructions') {
|
|
400
|
+
injectionContent = filterAgentInstructions(injection.content, subagentChoices.selected);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
content = content.replace(marker, injectionContent);
|
|
404
|
+
await fs.writeFile(targetPath, content);
|
|
405
|
+
console.log(chalk.dim(` Injected: ${injection.point} → ${injection.file}`));
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Copy selected subagents to appropriate Claude agents directory
|
|
412
|
+
*/
|
|
413
|
+
async copySelectedSubagents(projectDir, handlerBaseDir, subagentConfig, choices, location) {
|
|
414
|
+
const os = require('node:os');
|
|
415
|
+
|
|
416
|
+
// Determine target directory based on user choice
|
|
417
|
+
let targetDir;
|
|
418
|
+
if (location === 'user') {
|
|
419
|
+
targetDir = path.join(os.homedir(), '.claude', 'agents');
|
|
420
|
+
console.log(chalk.dim(` Installing subagents globally to: ~/.claude/agents/`));
|
|
421
|
+
} else {
|
|
422
|
+
targetDir = path.join(projectDir, '.claude', 'agents');
|
|
423
|
+
console.log(chalk.dim(` Installing subagents to project: .claude/agents/`));
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Ensure target directory exists
|
|
427
|
+
await this.ensureDir(targetDir);
|
|
428
|
+
|
|
429
|
+
const resolvedFiles = await resolveSubagentFiles(handlerBaseDir, subagentConfig, choices);
|
|
430
|
+
|
|
431
|
+
let copiedCount = 0;
|
|
432
|
+
for (const resolved of resolvedFiles) {
|
|
433
|
+
try {
|
|
434
|
+
const sourcePath = resolved.absolutePath;
|
|
435
|
+
|
|
436
|
+
const subFolder = path.dirname(resolved.relativePath);
|
|
437
|
+
let targetPath;
|
|
438
|
+
if (subFolder && subFolder !== '.') {
|
|
439
|
+
const targetSubDir = path.join(targetDir, subFolder);
|
|
440
|
+
await this.ensureDir(targetSubDir);
|
|
441
|
+
targetPath = path.join(targetSubDir, path.basename(resolved.file));
|
|
442
|
+
} else {
|
|
443
|
+
targetPath = path.join(targetDir, path.basename(resolved.file));
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
await fs.copyFile(sourcePath, targetPath);
|
|
447
|
+
console.log(chalk.green(` ✓ Installed: ${subFolder === '.' ? '' : `${subFolder}/`}${path.basename(resolved.file, '.md')}`));
|
|
448
|
+
copiedCount++;
|
|
449
|
+
} catch (error) {
|
|
450
|
+
console.log(chalk.yellow(` ⚠ Error copying ${resolved.file}: ${error.message}`));
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
if (copiedCount > 0) {
|
|
455
|
+
console.log(chalk.dim(` Total subagents installed: ${copiedCount}`));
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Install a custom agent launcher for Claude Code
|
|
461
|
+
* @param {string} projectDir - Project directory
|
|
462
|
+
* @param {string} agentName - Agent name (e.g., "fred-commit-poet")
|
|
463
|
+
* @param {string} agentPath - Path to compiled agent (relative to project root)
|
|
464
|
+
* @param {Object} metadata - Agent metadata
|
|
465
|
+
* @returns {Object|null} Info about created command
|
|
466
|
+
*/
|
|
467
|
+
async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
|
|
468
|
+
const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
|
|
469
|
+
|
|
470
|
+
if (!(await this.exists(path.join(projectDir, this.configDir)))) {
|
|
471
|
+
return null; // IDE not configured for this project
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
await this.ensureDir(commandsDir);
|
|
475
|
+
|
|
476
|
+
const launcherContent = `---
|
|
477
|
+
name: '${agentName}'
|
|
478
|
+
description: '${agentName} agent'
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
482
|
+
|
|
483
|
+
<agent-activation CRITICAL="TRUE">
|
|
484
|
+
1. LOAD the FULL agent file from @${agentPath}
|
|
485
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
486
|
+
3. FOLLOW every step in the <activation> section precisely
|
|
487
|
+
4. DISPLAY the welcome/greeting as instructed
|
|
488
|
+
5. PRESENT the numbered menu
|
|
489
|
+
6. WAIT for user input before proceeding
|
|
490
|
+
</agent-activation>
|
|
491
|
+
`;
|
|
492
|
+
|
|
493
|
+
// Use underscore format: bmad_custom_fred-commit-poet.md
|
|
494
|
+
// Written directly to commands dir (no bmad subfolder)
|
|
495
|
+
const launcherName = customAgentColonName(agentName);
|
|
496
|
+
const launcherPath = path.join(commandsDir, launcherName);
|
|
497
|
+
await this.writeFile(launcherPath, launcherContent);
|
|
498
|
+
|
|
499
|
+
return {
|
|
500
|
+
path: launcherPath,
|
|
501
|
+
command: `/${launcherName.replace('.md', '')}`,
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
module.exports = { ClaudeCodeSetup };
|