bmad-method 5.1.2 → 6.0.0-alpha.0
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/.github/FUNDING.yaml +2 -2
- package/.github/ISSUE_TEMPLATE/config.yaml +1 -0
- package/.github/ISSUE_TEMPLATE/idea_submission.md +109 -0
- package/.github/workflows/discord.yaml +1 -10
- package/.github/workflows/format-check.yaml +3 -2
- package/.github/workflows/manual-release.yaml +2 -2
- package/.nvmrc +1 -0
- package/.vscode/settings.json +34 -9
- package/CHANGELOG.md +211 -577
- package/CONTRIBUTING.md +130 -60
- package/LICENSE +6 -1
- package/docs/codebase-flattener.md +19 -0
- package/docs/ide-info/auggie.md +31 -0
- package/docs/ide-info/claude-code.md +25 -0
- package/docs/ide-info/cline.md +31 -0
- package/docs/ide-info/codex.md +32 -0
- package/docs/ide-info/crush.md +30 -0
- package/docs/ide-info/cursor.md +25 -0
- package/docs/ide-info/gemini.md +25 -0
- package/docs/ide-info/github-copilot.md +26 -0
- package/docs/ide-info/iflow.md +33 -0
- package/docs/ide-info/kilo.md +24 -0
- package/docs/ide-info/qwen.md +25 -0
- package/docs/ide-info/roo.md +27 -0
- package/docs/ide-info/trae.md +25 -0
- package/docs/ide-info/windsurf.md +22 -0
- package/docs/installers-bundlers/ide-injections.md +196 -0
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +355 -0
- package/docs/installers-bundlers/web-bundler-usage.md +54 -0
- package/eslint.config.mjs +17 -7
- package/package.json +26 -35
- package/prettier.config.mjs +1 -1
- package/readme.md +216 -0
- package/src/core/_module-installer/install-menu-config.yaml +24 -0
- package/src/core/_module-installer/installer.js +68 -0
- package/src/core/agents/bmad-master.md +27 -0
- package/src/core/agents/bmad-web-orchestrator.md +71 -0
- package/src/core/tasks/adv-elicit-methods.csv +39 -0
- package/src/core/tasks/adv-elicit.md +109 -0
- package/src/core/tasks/index-docs.md +69 -0
- package/src/core/tasks/shard-doc.md +57 -0
- package/src/core/tasks/validate-workflow.md +92 -0
- package/src/core/tasks/workflow.md +141 -0
- package/src/core/workflows/bmad-init/instructions.md +79 -0
- package/src/core/workflows/bmad-init/workflow.yaml +24 -0
- package/src/core/workflows/party-mode/instructions.md +181 -0
- package/src/core/workflows/party-mode/workflow.yaml +24 -0
- package/src/modules/bmb/_module-installer/install-menu-config.yaml +16 -0
- package/src/modules/bmb/agents/bmad-builder.md +30 -0
- package/src/modules/bmb/workflows/convert-legacy/README.md +262 -0
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +204 -0
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +328 -0
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +35 -0
- package/src/modules/bmb/workflows/create-agent/README.md +268 -0
- package/src/modules/bmb/workflows/create-agent/agent-architecture.md +412 -0
- package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +757 -0
- package/src/modules/bmb/workflows/create-agent/agent-types.md +177 -0
- package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +174 -0
- package/src/modules/bmb/workflows/create-agent/checklist.md +134 -0
- package/src/modules/bmb/workflows/create-agent/communication-styles.md +240 -0
- package/src/modules/bmb/workflows/create-agent/instructions.md +340 -0
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +39 -0
- package/src/modules/bmb/workflows/create-module/README.md +218 -0
- package/src/modules/bmb/workflows/create-module/brainstorm-context.md +137 -0
- package/src/modules/bmb/workflows/create-module/checklist.md +245 -0
- package/src/modules/bmb/workflows/create-module/installer-templates/install-module-config.yaml +132 -0
- package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +231 -0
- package/src/modules/bmb/workflows/create-module/instructions.md +509 -0
- package/src/modules/bmb/workflows/create-module/module-structure.md +310 -0
- package/src/modules/bmb/workflows/create-module/workflow.yaml +47 -0
- package/src/modules/bmb/workflows/create-workflow/README.md +216 -0
- package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +197 -0
- package/src/modules/bmb/workflows/create-workflow/checklist.md +72 -0
- package/src/modules/bmb/workflows/create-workflow/instructions.md +267 -0
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +456 -0
- package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +24 -0
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +12 -0
- package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +9 -0
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +35 -0
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +42 -0
- package/src/modules/bmb/workflows/edit-workflow/README.md +63 -0
- package/src/modules/bmb/workflows/edit-workflow/checklist.md +70 -0
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +170 -0
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +34 -0
- package/src/modules/bmb/workflows/module-brief/README.md +264 -0
- package/src/modules/bmb/workflows/module-brief/checklist.md +116 -0
- package/src/modules/bmb/workflows/module-brief/instructions.md +265 -0
- package/src/modules/bmb/workflows/module-brief/template.md +275 -0
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +30 -0
- package/src/modules/bmb/workflows/redoc/README.md +87 -0
- package/src/modules/bmb/workflows/redoc/checklist.md +99 -0
- package/src/modules/bmb/workflows/redoc/instructions.md +255 -0
- package/src/modules/bmb/workflows/redoc/workflow.yaml +33 -0
- package/src/modules/bmm/_module-installer/assets/bmm-kb.md +1 -0
- package/src/modules/bmm/_module-installer/assets/technical-decisions-template.md +30 -0
- package/src/modules/bmm/_module-installer/install-menu-config.yaml +49 -0
- package/src/modules/bmm/_module-installer/installer.js +131 -0
- package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
- package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +32 -0
- package/src/modules/bmm/agents/analyst.md +26 -0
- package/src/modules/bmm/agents/architect.md +29 -0
- package/src/modules/bmm/agents/dev.md +61 -0
- package/src/modules/bmm/agents/game-architect.md +26 -0
- package/src/modules/bmm/agents/game-designer.md +27 -0
- package/src/modules/bmm/agents/game-dev.md +28 -0
- package/src/modules/bmm/agents/pm.md +26 -0
- package/src/modules/bmm/agents/po.md +25 -0
- package/src/modules/bmm/agents/sm.md +29 -0
- package/src/modules/bmm/agents/tea.md +32 -0
- package/src/modules/bmm/agents/ux-expert.md +24 -0
- package/src/modules/bmm/sub-modules/claude-code/config.yaml +5 -0
- package/src/modules/bmm/sub-modules/claude-code/injections.yaml +242 -0
- package/src/modules/bmm/sub-modules/claude-code/readme.md +87 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/api-documenter.md +85 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/codebase-analyzer.md +64 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/data-analyst.md +84 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/dependency-mapper.md +67 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/document-reviewer.md +85 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/epic-optimizer.md +66 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/market-researcher.md +34 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/pattern-detector.md +67 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/requirements-analyst.md +61 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/tech-debt-auditor.md +89 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/technical-decisions-curator.md +146 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/technical-evaluator.md +51 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/test-coverage-analyzer.md +91 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/trend-spotter.md +99 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/user-journey-mapper.md +101 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/user-researcher.md +56 -0
- package/src/modules/bmm/tasks/daily-standup.md +91 -0
- package/src/modules/bmm/tasks/retrospective.md +110 -0
- package/src/modules/bmm/teams/team-all.yaml +7 -0
- package/src/modules/bmm/teams/team-dev.yaml +14 -0
- package/src/modules/bmm/teams/team-gamedev.yaml +9 -0
- package/src/modules/bmm/testarch/atdd.md +40 -0
- package/src/modules/bmm/testarch/automate.md +38 -0
- package/src/modules/bmm/testarch/ci.md +39 -0
- package/src/modules/bmm/testarch/framework.md +41 -0
- package/src/modules/bmm/testarch/nfr-assess.md +38 -0
- package/src/modules/bmm/testarch/risk-profile.md +38 -0
- package/src/modules/bmm/testarch/tea-commands.csv +11 -0
- package/src/modules/bmm/testarch/tea-gate.md +38 -0
- package/src/modules/bmm/testarch/tea-knowledge.md +275 -0
- package/src/modules/bmm/testarch/test-design.md +39 -0
- package/{bmad-core/data → src/modules/bmm/testarch}/test-levels-framework.md +2 -0
- package/{bmad-core/data → src/modules/bmm/testarch}/test-priorities-matrix.md +2 -0
- package/src/modules/bmm/testarch/trace-requirements.md +38 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-brain-methods.csv +26 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-context.md +115 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +47 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/workflow.yaml +22 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +38 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +25 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +21 -0
- package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +221 -0
- package/src/modules/bmm/workflows/1-analysis/game-brief/checklist.md +128 -0
- package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +517 -0
- package/src/modules/bmm/workflows/1-analysis/game-brief/template.md +205 -0
- package/src/modules/bmm/workflows/1-analysis/game-brief/workflow.yaml +34 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +180 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +115 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +353 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +165 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +33 -0
- package/src/modules/bmm/workflows/1-analysis/research/README.md +454 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +202 -0
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +114 -0
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +259 -0
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-data-analyst.md +190 -0
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +337 -0
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +107 -0
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-user-researcher.md +329 -0
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +370 -0
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +553 -0
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +91 -0
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +442 -0
- package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +94 -0
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +311 -0
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +210 -0
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +149 -0
- package/src/modules/bmm/workflows/2-plan/README.md +203 -0
- package/src/modules/bmm/workflows/2-plan/checklist.md +369 -0
- package/src/modules/bmm/workflows/2-plan/gdd/README.md +222 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/action-platformer.md +45 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/adventure.md +84 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/card-game.md +76 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/fighting.md +89 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/horror.md +86 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/idle-incremental.md +78 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/metroidvania.md +87 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/moba.md +74 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/party-game.md +79 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/puzzle.md +58 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/racing.md +88 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/rhythm.md +79 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/roguelike.md +69 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/rpg.md +70 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/sandbox.md +79 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/shooter.md +62 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/simulation.md +73 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/sports.md +75 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/strategy.md +71 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/survival.md +79 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/text-based.md +91 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/tower-defense.md +79 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/turn-based-tactics.md +88 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types/visual-novel.md +89 -0
- package/src/modules/bmm/workflows/2-plan/gdd/game-types.csv +25 -0
- package/src/modules/bmm/workflows/2-plan/gdd/gdd-template.md +159 -0
- package/src/modules/bmm/workflows/2-plan/gdd/instructions-gdd.md +480 -0
- package/src/modules/bmm/workflows/2-plan/instructions-router.md +222 -0
- package/src/modules/bmm/workflows/2-plan/narrative/instructions-narrative.md +517 -0
- package/src/modules/bmm/workflows/2-plan/narrative/narrative-template.md +195 -0
- package/src/modules/bmm/workflows/2-plan/prd/analysis-template.md +53 -0
- package/src/modules/bmm/workflows/2-plan/prd/epics-template.md +18 -0
- package/src/modules/bmm/workflows/2-plan/prd/instructions-lg.md +267 -0
- package/src/modules/bmm/workflows/2-plan/prd/instructions-med.md +251 -0
- package/src/modules/bmm/workflows/2-plan/prd/prd-template.md +73 -0
- package/src/modules/bmm/workflows/2-plan/tech-spec/instructions-sm.md +137 -0
- package/src/modules/bmm/workflows/2-plan/tech-spec/tech-spec-template.md +59 -0
- package/src/modules/bmm/workflows/2-plan/ux/instructions-ux.md +360 -0
- package/src/modules/bmm/workflows/2-plan/ux/ux-spec-template.md +162 -0
- package/src/modules/bmm/workflows/2-plan/workflow.yaml +60 -0
- package/src/modules/bmm/workflows/3-solutioning/ADR-template.md +74 -0
- package/src/modules/bmm/workflows/3-solutioning/README.md +565 -0
- package/src/modules/bmm/workflows/3-solutioning/checklist.md +170 -0
- package/src/modules/bmm/workflows/3-solutioning/instructions.md +661 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/backend-questions.md +490 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/cli-questions.md +337 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/data-questions.md +472 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/desktop-questions.md +299 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/embedded-questions.md +118 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/extension-questions.md +374 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/game-questions.md +133 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/infra-questions.md +484 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/library-questions.md +146 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/mobile-questions.md +110 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/project-types.csv +12 -0
- package/src/modules/bmm/workflows/3-solutioning/project-types/web-questions.md +136 -0
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/README.md +195 -0
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/checklist.md +17 -0
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/instructions.md +73 -0
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/template.md +76 -0
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/workflow.yaml +51 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/backend-service-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/cli-tool-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/data-pipeline-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/desktop-app-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/embedded-firmware-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-architecture.md +244 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-godot-guide.md +428 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-unity-guide.md +333 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-web-guide.md +528 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/infrastructure-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/library-package-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/mobile-app-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/registry.csv +172 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/web-api-architecture.md +66 -0
- package/src/modules/bmm/workflows/3-solutioning/templates/web-fullstack-architecture.md +277 -0
- package/src/modules/bmm/workflows/3-solutioning/workflow.yaml +65 -0
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +279 -0
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +190 -0
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +35 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/README.md +42 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +39 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +81 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/template.md +57 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +72 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/README.md +84 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +38 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +87 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +53 -0
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +391 -0
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +41 -0
- package/src/modules/bmm/workflows/4-implementation/review-story/README.md +72 -0
- package/src/modules/bmm/workflows/4-implementation/review-story/backlog_template.md +12 -0
- package/src/modules/bmm/workflows/4-implementation/review-story/checklist.md +22 -0
- package/src/modules/bmm/workflows/4-implementation/review-story/instructions.md +176 -0
- package/src/modules/bmm/workflows/4-implementation/review-story/workflow.yaml +99 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/README.md +234 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +16 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +34 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +76 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +56 -0
- package/src/modules/cis/_module-installer/install-menu-config.yaml +14 -0
- package/src/modules/cis/_module-installer/installer.js +92 -0
- package/src/modules/cis/agents/README.md +104 -0
- package/src/modules/cis/agents/brainstorming-coach.md +24 -0
- package/src/modules/cis/agents/creative-problem-solver.md +24 -0
- package/src/modules/cis/agents/design-thinking-coach.md +24 -0
- package/src/modules/cis/agents/innovation-strategist.md +24 -0
- package/src/modules/cis/agents/storyteller.md +24 -0
- package/src/modules/cis/readme.md +86 -0
- package/src/modules/cis/teams/creative-squad.yaml +6 -0
- package/src/modules/cis/workflows/README.md +67 -0
- package/src/modules/cis/workflows/brainstorming/README.md +271 -0
- package/src/modules/cis/workflows/brainstorming/brain-methods.csv +36 -0
- package/src/modules/cis/workflows/brainstorming/instructions.md +310 -0
- package/src/modules/cis/workflows/brainstorming/template.md +102 -0
- package/src/modules/cis/workflows/brainstorming/workflow.yaml +30 -0
- package/src/modules/cis/workflows/design-thinking/README.md +56 -0
- package/src/modules/cis/workflows/design-thinking/design-methods.csv +31 -0
- package/src/modules/cis/workflows/design-thinking/instructions.md +200 -0
- package/src/modules/cis/workflows/design-thinking/template.md +111 -0
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +29 -0
- package/src/modules/cis/workflows/innovation-strategy/README.md +56 -0
- package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +31 -0
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +274 -0
- package/src/modules/cis/workflows/innovation-strategy/template.md +189 -0
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +29 -0
- package/src/modules/cis/workflows/problem-solving/README.md +56 -0
- package/src/modules/cis/workflows/problem-solving/instructions.md +250 -0
- package/src/modules/cis/workflows/problem-solving/solving-methods.csv +31 -0
- package/src/modules/cis/workflows/problem-solving/template.md +165 -0
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +29 -0
- package/src/modules/cis/workflows/storytelling/README.md +58 -0
- package/src/modules/cis/workflows/storytelling/instructions.md +275 -0
- package/src/modules/cis/workflows/storytelling/story-types.csv +26 -0
- package/src/modules/cis/workflows/storytelling/template.md +113 -0
- package/src/modules/cis/workflows/storytelling/workflow.yaml +29 -0
- package/src/utility/models/agent-activation-ide.xml +51 -0
- package/src/utility/models/agent-config-template.md +23 -0
- package/tools/cli/bmad-cli.js +42 -0
- package/tools/cli/bundlers/bundle-web.js +157 -0
- package/tools/cli/bundlers/test-analyst.js +28 -0
- package/tools/cli/bundlers/test-bundler.js +118 -0
- package/tools/cli/bundlers/web-bundler.js +880 -0
- package/tools/cli/commands/install.js +41 -0
- package/tools/cli/commands/list.js +28 -0
- package/tools/cli/commands/status.js +47 -0
- package/tools/cli/commands/uninstall.js +44 -0
- package/tools/cli/commands/update.js +28 -0
- package/tools/cli/installers/lib/core/config-collector.js +383 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +721 -0
- package/tools/cli/installers/lib/core/detector.js +208 -0
- package/tools/cli/installers/lib/core/installer.js +1070 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +385 -0
- package/tools/cli/installers/lib/core/manifest.js +484 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +281 -0
- package/tools/cli/installers/lib/ide/auggie.js +271 -0
- package/tools/cli/installers/lib/ide/claude-code.js +625 -0
- package/tools/cli/installers/lib/ide/cline.js +301 -0
- package/tools/cli/installers/lib/ide/codex.js +267 -0
- package/tools/cli/installers/lib/ide/crush.js +204 -0
- package/tools/cli/installers/lib/ide/cursor.js +224 -0
- package/tools/cli/installers/lib/ide/gemini.js +160 -0
- package/tools/cli/installers/lib/ide/github-copilot.js +289 -0
- package/tools/cli/installers/lib/ide/iflow.js +142 -0
- package/tools/cli/installers/lib/ide/kilo.js +171 -0
- package/tools/cli/installers/lib/ide/manager.js +203 -0
- package/tools/cli/installers/lib/ide/qwen.js +188 -0
- package/tools/cli/installers/lib/ide/roo.js +288 -0
- package/tools/cli/installers/lib/ide/trae.js +182 -0
- package/tools/cli/installers/lib/ide/windsurf.js +149 -0
- package/tools/cli/installers/lib/ide/workflow-command-generator.js +162 -0
- package/tools/cli/installers/lib/ide/workflow-command-template.md +11 -0
- package/tools/cli/installers/lib/modules/manager.js +452 -0
- package/tools/cli/lib/agent-party-generator.js +206 -0
- package/tools/cli/lib/cli-utils.js +208 -0
- package/tools/cli/lib/config.js +210 -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 +71 -0
- package/tools/cli/lib/replace-project-root.js +239 -0
- package/tools/cli/lib/ui.js +516 -0
- package/tools/cli/lib/xml-handler.js +183 -0
- package/tools/cli/lib/xml-to-markdown.js +82 -0
- package/tools/{yaml-format.js → cli/lib/yaml-format.js} +3 -10
- package/tools/cli/regenerate-manifests.js +28 -0
- package/tools/flattener/ignoreRules.js +2 -6
- package/tools/flattener/main.js +31 -121
- package/tools/flattener/projectRoot.js +3 -8
- package/tools/flattener/stats.helpers.js +8 -35
- package/tools/flattener/stats.js +1 -6
- package/tools/flattener/test-matrix.js +1 -5
- package/tools/platform-codes.yaml +127 -0
- package/tools/test-agents/captain-kirk-commander.md +110 -0
- package/tools/test-agents/data-operations-android.md +123 -0
- package/tools/test-agents/geordi-chief-engineer.md +135 -0
- package/tools/test-agents/isabella-martinez-ethicist.md +109 -0
- package/tools/test-agents/marcus-thompson-security.md +109 -0
- package/tools/test-agents/maya-patel-pragmatist.md +82 -0
- package/tools/test-agents/picard-diplomat-captain.md +134 -0
- package/tools/test-agents/spock-science-officer.md +124 -0
- package/tools/test-agents/william-smithers-technocrat.md +71 -0
- package/tools/test-agents/zara-chen-designer.md +94 -0
- package/tools/validate-bundles.js +87 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -22
- package/README.md +0 -221
- package/bmad-core/agent-teams/team-all.yaml +0 -14
- package/bmad-core/agent-teams/team-fullstack.yaml +0 -18
- package/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
- package/bmad-core/agent-teams/team-no-ui.yaml +0 -13
- package/bmad-core/agents/analyst.md +0 -81
- package/bmad-core/agents/architect.md +0 -83
- package/bmad-core/agents/bmad-master.md +0 -107
- package/bmad-core/agents/bmad-orchestrator.md +0 -149
- package/bmad-core/agents/dev.md +0 -75
- package/bmad-core/agents/pm.md +0 -81
- package/bmad-core/agents/po.md +0 -76
- package/bmad-core/agents/qa.md +0 -88
- package/bmad-core/agents/sm.md +0 -62
- package/bmad-core/agents/ux-expert.md +0 -66
- package/bmad-core/checklists/architect-checklist.md +0 -438
- package/bmad-core/checklists/change-checklist.md +0 -182
- package/bmad-core/checklists/pm-checklist.md +0 -370
- package/bmad-core/checklists/po-master-checklist.md +0 -432
- package/bmad-core/checklists/story-dod-checklist.md +0 -94
- package/bmad-core/checklists/story-draft-checklist.md +0 -153
- package/bmad-core/core-config.yaml +0 -20
- package/bmad-core/data/bmad-kb.md +0 -806
- package/bmad-core/data/brainstorming-techniques.md +0 -36
- package/bmad-core/data/elicitation-methods.md +0 -154
- package/bmad-core/data/technical-preferences.md +0 -3
- package/bmad-core/tasks/advanced-elicitation.md +0 -117
- package/bmad-core/tasks/brownfield-create-epic.md +0 -160
- package/bmad-core/tasks/brownfield-create-story.md +0 -147
- package/bmad-core/tasks/correct-course.md +0 -70
- package/bmad-core/tasks/create-brownfield-story.md +0 -312
- package/bmad-core/tasks/create-deep-research-prompt.md +0 -278
- package/bmad-core/tasks/create-next-story.md +0 -112
- package/bmad-core/tasks/document-project.md +0 -343
- package/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
- package/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
- package/bmad-core/tasks/index-docs.md +0 -173
- package/bmad-core/tasks/kb-mode-interaction.md +0 -75
- package/bmad-core/tasks/nfr-assess.md +0 -343
- package/bmad-core/tasks/qa-gate.md +0 -159
- package/bmad-core/tasks/review-story.md +0 -314
- package/bmad-core/tasks/risk-profile.md +0 -353
- package/bmad-core/tasks/shard-doc.md +0 -185
- package/bmad-core/tasks/test-design.md +0 -174
- package/bmad-core/tasks/trace-requirements.md +0 -264
- package/bmad-core/tasks/validate-next-story.md +0 -134
- package/bmad-core/templates/architecture-tmpl.yaml +0 -650
- package/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
- package/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
- package/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
- package/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -306
- package/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -218
- package/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
- package/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -823
- package/bmad-core/templates/market-research-tmpl.yaml +0 -252
- package/bmad-core/templates/prd-tmpl.yaml +0 -202
- package/bmad-core/templates/project-brief-tmpl.yaml +0 -221
- package/bmad-core/templates/qa-gate-tmpl.yaml +0 -102
- package/bmad-core/templates/story-tmpl.yaml +0 -137
- package/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
- package/bmad-core/workflows/brownfield-service.yaml +0 -187
- package/bmad-core/workflows/brownfield-ui.yaml +0 -197
- package/bmad-core/workflows/greenfield-fullstack.yaml +0 -240
- package/bmad-core/workflows/greenfield-service.yaml +0 -206
- package/bmad-core/workflows/greenfield-ui.yaml +0 -235
- package/common/tasks/create-doc.md +0 -101
- package/common/tasks/execute-checklist.md +0 -86
- package/common/utils/bmad-doc-template.md +0 -325
- package/common/utils/workflow-management.md +0 -69
- package/dist/agents/analyst.txt +0 -2889
- package/dist/agents/architect.txt +0 -3552
- package/dist/agents/bmad-master.txt +0 -8769
- package/dist/agents/bmad-orchestrator.txt +0 -1513
- package/dist/agents/dev.txt +0 -414
- package/dist/agents/pm.txt +0 -2204
- package/dist/agents/po.txt +0 -1346
- package/dist/agents/qa.txt +0 -1987
- package/dist/agents/sm.txt +0 -658
- package/dist/agents/ux-expert.txt +0 -694
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2371
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1620
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -815
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -10952
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +0 -4012
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +0 -3698
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -450
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +0 -973
- package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -15376
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2075
- package/dist/teams/team-all.txt +0 -12682
- package/dist/teams/team-fullstack.txt +0 -10421
- package/dist/teams/team-ide-minimal.txt +0 -5103
- package/dist/teams/team-no-ui.txt +0 -8980
- package/docs/GUIDING-PRINCIPLES.md +0 -91
- package/docs/core-architecture.md +0 -219
- package/docs/enhanced-ide-development-workflow.md +0 -248
- package/docs/expansion-packs.md +0 -280
- package/docs/how-to-contribute-with-pull-requests.md +0 -158
- package/docs/user-guide.md +0 -504
- package/docs/versioning-and-releases.md +0 -147
- package/docs/versions.md +0 -48
- package/docs/working-in-the-brownfield.md +0 -597
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +0 -102
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash copy.txt +0 -13
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash.txt +0 -13
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.2 Agent Development Kit Installation/1.2.2 - Basic Project Structure - txt.txt +0 -25
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.1 - settings.py +0 -34
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.2 - main.py - Base Application.py +0 -70
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.4 Deployment Configuration/1.4.2 - cloudbuild.yaml +0 -26
- package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +0 -109
- package/expansion-packs/README.md +0 -3
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -71
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -78
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -64
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
- package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -8
- package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -250
- package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -647
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -110
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -290
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
- package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -14
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +0 -80
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +0 -77
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +0 -78
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +0 -65
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -391
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -203
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -201
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -124
- package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +0 -6
- package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -769
- package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -586
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -110
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -141
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -184
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -290
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -200
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -1030
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -356
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -705
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -256
- package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -183
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -175
- package/expansion-packs/bmad-infrastructure-devops/README.md +0 -147
- package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -71
- package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -484
- package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -9
- package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -305
- package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -159
- package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -153
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
- package/release_notes.md +0 -32
- package/tools/bmad-npx-wrapper.js +0 -39
- package/tools/builders/web-builder.js +0 -675
- package/tools/bump-all-versions.js +0 -115
- package/tools/bump-expansion-version.js +0 -90
- package/tools/cli.js +0 -152
- package/tools/installer/README.md +0 -8
- package/tools/installer/bin/bmad.js +0 -585
- package/tools/installer/config/ide-agent-config.yaml +0 -58
- package/tools/installer/config/install.config.yaml +0 -123
- package/tools/installer/lib/config-loader.js +0 -257
- package/tools/installer/lib/file-manager.js +0 -389
- package/tools/installer/lib/ide-base-setup.js +0 -228
- package/tools/installer/lib/ide-setup.js +0 -1441
- package/tools/installer/lib/installer.js +0 -1995
- package/tools/installer/lib/memory-profiler.js +0 -225
- package/tools/installer/lib/module-manager.js +0 -114
- package/tools/installer/lib/resource-locator.js +0 -308
- package/tools/installer/package.json +0 -44
- package/tools/lib/dependency-resolver.js +0 -175
- package/tools/lib/yaml-utils.js +0 -29
- package/tools/md-assets/web-agent-startup-instructions.md +0 -39
- package/tools/preview-release-notes.js +0 -66
- package/tools/shared/bannerArt.js +0 -105
- package/tools/sync-installer-version.js +0 -32
- package/tools/update-expansion-version.js +0 -53
- package/tools/upgraders/v3-to-v4-upgrader.js +0 -672
- package/tools/version-bump.js +0 -94
|
@@ -0,0 +1,625 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const { getProjectRoot, getSourcePath, getModulePath } = require('../../../lib/project-root');
|
|
5
|
+
const { WorkflowCommandGenerator } = require('./workflow-command-generator');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Claude Code IDE setup handler
|
|
9
|
+
*/
|
|
10
|
+
class ClaudeCodeSetup extends BaseIdeSetup {
|
|
11
|
+
constructor() {
|
|
12
|
+
super('claude-code', 'Claude Code', true); // preferred IDE
|
|
13
|
+
this.configDir = '.claude';
|
|
14
|
+
this.commandsDir = 'commands';
|
|
15
|
+
this.agentsDir = 'agents';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Collect configuration choices before installation
|
|
20
|
+
* @param {Object} options - Configuration options
|
|
21
|
+
* @returns {Object} Collected configuration
|
|
22
|
+
*/
|
|
23
|
+
async collectConfiguration(options = {}) {
|
|
24
|
+
const config = {
|
|
25
|
+
subagentChoices: null,
|
|
26
|
+
installLocation: null,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const sourceModulesPath = getSourcePath('modules');
|
|
30
|
+
const modules = options.selectedModules || [];
|
|
31
|
+
|
|
32
|
+
for (const moduleName of modules) {
|
|
33
|
+
// Check for Claude Code sub-module injection config in SOURCE directory
|
|
34
|
+
const injectionConfigPath = path.join(sourceModulesPath, moduleName, 'sub-modules', 'claude-code', 'injections.yaml');
|
|
35
|
+
|
|
36
|
+
if (await this.exists(injectionConfigPath)) {
|
|
37
|
+
const fs = require('fs-extra');
|
|
38
|
+
const yaml = require('js-yaml');
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
// Load injection configuration
|
|
42
|
+
const configContent = await fs.readFile(injectionConfigPath, 'utf8');
|
|
43
|
+
const injectionConfig = yaml.load(configContent);
|
|
44
|
+
|
|
45
|
+
// Ask about subagents if they exist and we haven't asked yet
|
|
46
|
+
if (injectionConfig.subagents && !config.subagentChoices) {
|
|
47
|
+
config.subagentChoices = await this.promptSubagentInstallation(injectionConfig.subagents);
|
|
48
|
+
|
|
49
|
+
if (config.subagentChoices.install !== 'none') {
|
|
50
|
+
// Ask for installation location
|
|
51
|
+
const inquirer = require('inquirer');
|
|
52
|
+
const locationAnswer = await inquirer.prompt([
|
|
53
|
+
{
|
|
54
|
+
type: 'list',
|
|
55
|
+
name: 'location',
|
|
56
|
+
message: 'Where would you like to install Claude Code subagents?',
|
|
57
|
+
choices: [
|
|
58
|
+
{ name: 'Project level (.claude/agents/)', value: 'project' },
|
|
59
|
+
{ name: 'User level (~/.claude/agents/)', value: 'user' },
|
|
60
|
+
],
|
|
61
|
+
default: 'project',
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
config.installLocation = locationAnswer.location;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.log(chalk.yellow(` Warning: Failed to process ${moduleName} features: ${error.message}`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return config;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Setup Claude Code IDE configuration
|
|
78
|
+
* @param {string} projectDir - Project directory
|
|
79
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
80
|
+
* @param {Object} options - Setup options
|
|
81
|
+
*/
|
|
82
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
83
|
+
// Store project directory for use in processContent
|
|
84
|
+
this.projectDir = projectDir;
|
|
85
|
+
|
|
86
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
87
|
+
|
|
88
|
+
// Create .claude/commands directory structure
|
|
89
|
+
const claudeDir = path.join(projectDir, this.configDir);
|
|
90
|
+
const commandsDir = path.join(claudeDir, this.commandsDir);
|
|
91
|
+
const bmadCommandsDir = path.join(commandsDir, 'bmad');
|
|
92
|
+
|
|
93
|
+
await this.ensureDir(bmadCommandsDir);
|
|
94
|
+
|
|
95
|
+
// Get agents and tasks from SOURCE, not installed location
|
|
96
|
+
// This ensures we process files with {project-root} placeholders intact
|
|
97
|
+
const sourceDir = getSourcePath('modules');
|
|
98
|
+
const agents = await this.getAgentsFromSource(sourceDir, options.selectedModules || []);
|
|
99
|
+
const tasks = await this.getTasksFromSource(sourceDir, options.selectedModules || []);
|
|
100
|
+
|
|
101
|
+
// Create directories for each module
|
|
102
|
+
const modules = new Set();
|
|
103
|
+
for (const item of [...agents, ...tasks]) modules.add(item.module);
|
|
104
|
+
|
|
105
|
+
for (const module of modules) {
|
|
106
|
+
await this.ensureDir(path.join(bmadCommandsDir, module));
|
|
107
|
+
await this.ensureDir(path.join(bmadCommandsDir, module, 'agents'));
|
|
108
|
+
await this.ensureDir(path.join(bmadCommandsDir, module, 'tasks'));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Process and copy agents
|
|
112
|
+
let agentCount = 0;
|
|
113
|
+
for (const agent of agents) {
|
|
114
|
+
const content = await this.readAndProcess(agent.path, {
|
|
115
|
+
module: agent.module,
|
|
116
|
+
name: agent.name,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
const targetPath = path.join(bmadCommandsDir, agent.module, 'agents', `${agent.name}.md`);
|
|
120
|
+
|
|
121
|
+
await this.writeFile(targetPath, content);
|
|
122
|
+
agentCount++;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Process and copy tasks
|
|
126
|
+
let taskCount = 0;
|
|
127
|
+
for (const task of tasks) {
|
|
128
|
+
const content = await this.readAndProcess(task.path, {
|
|
129
|
+
module: task.module,
|
|
130
|
+
name: task.name,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
const targetPath = path.join(bmadCommandsDir, task.module, 'tasks', `${task.name}.md`);
|
|
134
|
+
|
|
135
|
+
await this.writeFile(targetPath, content);
|
|
136
|
+
taskCount++;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Process Claude Code specific injections for installed modules
|
|
140
|
+
// Use pre-collected configuration if available
|
|
141
|
+
if (options.preCollectedConfig) {
|
|
142
|
+
await this.processModuleInjectionsWithConfig(projectDir, bmadDir, options, options.preCollectedConfig);
|
|
143
|
+
} else {
|
|
144
|
+
await this.processModuleInjections(projectDir, bmadDir, options);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Skip CLAUDE.md creation - let user manage their own CLAUDE.md file
|
|
148
|
+
// await this.createClaudeConfig(projectDir, modules);
|
|
149
|
+
|
|
150
|
+
// Generate workflow commands from manifest (if it exists)
|
|
151
|
+
const workflowGen = new WorkflowCommandGenerator();
|
|
152
|
+
const workflowResult = await workflowGen.generateWorkflowCommands(projectDir, bmadDir);
|
|
153
|
+
|
|
154
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
155
|
+
console.log(chalk.dim(` - ${agentCount} agents installed`));
|
|
156
|
+
console.log(chalk.dim(` - ${taskCount} tasks installed`));
|
|
157
|
+
if (workflowResult.generated > 0) {
|
|
158
|
+
console.log(chalk.dim(` - ${workflowResult.generated} workflow commands generated`));
|
|
159
|
+
}
|
|
160
|
+
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, bmadCommandsDir)}`));
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
success: true,
|
|
164
|
+
agents: agentCount,
|
|
165
|
+
tasks: taskCount,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Method removed - CLAUDE.md file management left to user
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Read and process file content
|
|
173
|
+
*/
|
|
174
|
+
async readAndProcess(filePath, metadata) {
|
|
175
|
+
const fs = require('fs-extra');
|
|
176
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
177
|
+
return this.processContent(content, metadata);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Override processContent to use the actual project directory path
|
|
182
|
+
*/
|
|
183
|
+
processContent(content, metadata = {}) {
|
|
184
|
+
// Use the base class method with the actual project directory
|
|
185
|
+
return super.processContent(content, metadata, this.projectDir);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Get agents from source modules (not installed location)
|
|
190
|
+
*/
|
|
191
|
+
async getAgentsFromSource(sourceDir, selectedModules) {
|
|
192
|
+
const fs = require('fs-extra');
|
|
193
|
+
const agents = [];
|
|
194
|
+
|
|
195
|
+
// Add core agents
|
|
196
|
+
const corePath = getModulePath('core');
|
|
197
|
+
if (await fs.pathExists(path.join(corePath, 'agents'))) {
|
|
198
|
+
const coreAgents = await this.getAgentsFromDir(path.join(corePath, 'agents'), 'core');
|
|
199
|
+
agents.push(...coreAgents);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Add module agents
|
|
203
|
+
for (const moduleName of selectedModules) {
|
|
204
|
+
const modulePath = path.join(sourceDir, moduleName);
|
|
205
|
+
const agentsPath = path.join(modulePath, 'agents');
|
|
206
|
+
|
|
207
|
+
if (await fs.pathExists(agentsPath)) {
|
|
208
|
+
const moduleAgents = await this.getAgentsFromDir(agentsPath, moduleName);
|
|
209
|
+
agents.push(...moduleAgents);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return agents;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Get tasks from source modules (not installed location)
|
|
218
|
+
*/
|
|
219
|
+
async getTasksFromSource(sourceDir, selectedModules) {
|
|
220
|
+
const fs = require('fs-extra');
|
|
221
|
+
const tasks = [];
|
|
222
|
+
|
|
223
|
+
// Add core tasks
|
|
224
|
+
const corePath = getModulePath('core');
|
|
225
|
+
if (await fs.pathExists(path.join(corePath, 'tasks'))) {
|
|
226
|
+
const coreTasks = await this.getTasksFromDir(path.join(corePath, 'tasks'), 'core');
|
|
227
|
+
tasks.push(...coreTasks);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Add module tasks
|
|
231
|
+
for (const moduleName of selectedModules) {
|
|
232
|
+
const modulePath = path.join(sourceDir, moduleName);
|
|
233
|
+
const tasksPath = path.join(modulePath, 'tasks');
|
|
234
|
+
|
|
235
|
+
if (await fs.pathExists(tasksPath)) {
|
|
236
|
+
const moduleTasks = await this.getTasksFromDir(tasksPath, moduleName);
|
|
237
|
+
tasks.push(...moduleTasks);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return tasks;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Get agents from a specific directory
|
|
246
|
+
*/
|
|
247
|
+
async getAgentsFromDir(dirPath, moduleName) {
|
|
248
|
+
const fs = require('fs-extra');
|
|
249
|
+
const agents = [];
|
|
250
|
+
|
|
251
|
+
const files = await fs.readdir(dirPath);
|
|
252
|
+
for (const file of files) {
|
|
253
|
+
if (file.endsWith('.md')) {
|
|
254
|
+
const filePath = path.join(dirPath, file);
|
|
255
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
256
|
+
|
|
257
|
+
// Skip web-only agents
|
|
258
|
+
if (content.includes('localskip="true"')) {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
agents.push({
|
|
263
|
+
path: filePath,
|
|
264
|
+
name: file.replace('.md', ''),
|
|
265
|
+
module: moduleName,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return agents;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Get tasks from a specific directory
|
|
275
|
+
*/
|
|
276
|
+
async getTasksFromDir(dirPath, moduleName) {
|
|
277
|
+
const fs = require('fs-extra');
|
|
278
|
+
const tasks = [];
|
|
279
|
+
|
|
280
|
+
const files = await fs.readdir(dirPath);
|
|
281
|
+
for (const file of files) {
|
|
282
|
+
if (file.endsWith('.md')) {
|
|
283
|
+
tasks.push({
|
|
284
|
+
path: path.join(dirPath, file),
|
|
285
|
+
name: file.replace('.md', ''),
|
|
286
|
+
module: moduleName,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
return tasks;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Process module injections with pre-collected configuration
|
|
296
|
+
*/
|
|
297
|
+
async processModuleInjectionsWithConfig(projectDir, bmadDir, options, preCollectedConfig) {
|
|
298
|
+
const fs = require('fs-extra');
|
|
299
|
+
const yaml = require('js-yaml');
|
|
300
|
+
|
|
301
|
+
// Get list of installed modules
|
|
302
|
+
const modules = options.selectedModules || [];
|
|
303
|
+
const { subagentChoices, installLocation } = preCollectedConfig;
|
|
304
|
+
|
|
305
|
+
// Get the actual source directory (not the installation directory)
|
|
306
|
+
const sourceModulesPath = getSourcePath('modules');
|
|
307
|
+
|
|
308
|
+
for (const moduleName of modules) {
|
|
309
|
+
// Check for Claude Code sub-module injection config in SOURCE directory
|
|
310
|
+
const injectionConfigPath = path.join(sourceModulesPath, moduleName, 'sub-modules', 'claude-code', 'injections.yaml');
|
|
311
|
+
|
|
312
|
+
if (await this.exists(injectionConfigPath)) {
|
|
313
|
+
try {
|
|
314
|
+
// Load injection configuration
|
|
315
|
+
const configContent = await fs.readFile(injectionConfigPath, 'utf8');
|
|
316
|
+
const config = yaml.load(configContent);
|
|
317
|
+
|
|
318
|
+
// Process content injections based on user choices
|
|
319
|
+
if (config.injections && subagentChoices && subagentChoices.install !== 'none') {
|
|
320
|
+
for (const injection of config.injections) {
|
|
321
|
+
// Check if this injection is related to a selected subagent
|
|
322
|
+
if (this.shouldInject(injection, subagentChoices)) {
|
|
323
|
+
await this.injectContent(projectDir, injection, subagentChoices);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Copy selected subagents
|
|
329
|
+
if (config.subagents && subagentChoices && subagentChoices.install !== 'none') {
|
|
330
|
+
await this.copySelectedSubagents(
|
|
331
|
+
projectDir,
|
|
332
|
+
path.dirname(injectionConfigPath),
|
|
333
|
+
config.subagents,
|
|
334
|
+
subagentChoices,
|
|
335
|
+
installLocation,
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
} catch (error) {
|
|
339
|
+
console.log(chalk.yellow(` Warning: Failed to process ${moduleName} features: ${error.message}`));
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Process Claude Code specific injections for installed modules
|
|
347
|
+
* Looks for injections.yaml in each module's claude-code sub-module
|
|
348
|
+
*/
|
|
349
|
+
async processModuleInjections(projectDir, bmadDir, options) {
|
|
350
|
+
const fs = require('fs-extra');
|
|
351
|
+
const yaml = require('js-yaml');
|
|
352
|
+
const inquirer = require('inquirer');
|
|
353
|
+
|
|
354
|
+
// Get list of installed modules
|
|
355
|
+
const modules = options.selectedModules || [];
|
|
356
|
+
let subagentChoices = null;
|
|
357
|
+
let installLocation = null;
|
|
358
|
+
|
|
359
|
+
// Get the actual source directory (not the installation directory)
|
|
360
|
+
const sourceModulesPath = getSourcePath('modules');
|
|
361
|
+
|
|
362
|
+
for (const moduleName of modules) {
|
|
363
|
+
// Check for Claude Code sub-module injection config in SOURCE directory
|
|
364
|
+
const injectionConfigPath = path.join(sourceModulesPath, moduleName, 'sub-modules', 'claude-code', 'injections.yaml');
|
|
365
|
+
|
|
366
|
+
if (await this.exists(injectionConfigPath)) {
|
|
367
|
+
console.log(chalk.cyan(`\nConfiguring ${moduleName} Claude Code features...`));
|
|
368
|
+
|
|
369
|
+
try {
|
|
370
|
+
// Load injection configuration
|
|
371
|
+
const configContent = await fs.readFile(injectionConfigPath, 'utf8');
|
|
372
|
+
const config = yaml.load(configContent);
|
|
373
|
+
|
|
374
|
+
// Ask about subagents if they exist and we haven't asked yet
|
|
375
|
+
if (config.subagents && !subagentChoices) {
|
|
376
|
+
subagentChoices = await this.promptSubagentInstallation(config.subagents);
|
|
377
|
+
|
|
378
|
+
if (subagentChoices.install !== 'none') {
|
|
379
|
+
// Ask for installation location
|
|
380
|
+
const locationAnswer = await inquirer.prompt([
|
|
381
|
+
{
|
|
382
|
+
type: 'list',
|
|
383
|
+
name: 'location',
|
|
384
|
+
message: 'Where would you like to install Claude Code subagents?',
|
|
385
|
+
choices: [
|
|
386
|
+
{ name: 'Project level (.claude/agents/)', value: 'project' },
|
|
387
|
+
{ name: 'User level (~/.claude/agents/)', value: 'user' },
|
|
388
|
+
],
|
|
389
|
+
default: 'project',
|
|
390
|
+
},
|
|
391
|
+
]);
|
|
392
|
+
installLocation = locationAnswer.location;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// Process content injections based on user choices
|
|
397
|
+
if (config.injections && subagentChoices && subagentChoices.install !== 'none') {
|
|
398
|
+
for (const injection of config.injections) {
|
|
399
|
+
// Check if this injection is related to a selected subagent
|
|
400
|
+
if (this.shouldInject(injection, subagentChoices)) {
|
|
401
|
+
await this.injectContent(projectDir, injection, subagentChoices);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Copy selected subagents
|
|
407
|
+
if (config.subagents && subagentChoices && subagentChoices.install !== 'none') {
|
|
408
|
+
await this.copySelectedSubagents(
|
|
409
|
+
projectDir,
|
|
410
|
+
path.dirname(injectionConfigPath),
|
|
411
|
+
config.subagents,
|
|
412
|
+
subagentChoices,
|
|
413
|
+
installLocation,
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
} catch (error) {
|
|
417
|
+
console.log(chalk.yellow(` Warning: Failed to process ${moduleName} features: ${error.message}`));
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Prompt user for subagent installation preferences
|
|
425
|
+
*/
|
|
426
|
+
async promptSubagentInstallation(subagentConfig) {
|
|
427
|
+
const inquirer = require('inquirer');
|
|
428
|
+
|
|
429
|
+
// First ask if they want to install subagents
|
|
430
|
+
const { install } = await inquirer.prompt([
|
|
431
|
+
{
|
|
432
|
+
type: 'list',
|
|
433
|
+
name: 'install',
|
|
434
|
+
message: 'Would you like to install Claude Code subagents for enhanced functionality?',
|
|
435
|
+
choices: [
|
|
436
|
+
{ name: 'Yes, install all subagents', value: 'all' },
|
|
437
|
+
{ name: 'Yes, let me choose specific subagents', value: 'selective' },
|
|
438
|
+
{ name: 'No, skip subagent installation', value: 'none' },
|
|
439
|
+
],
|
|
440
|
+
default: 'all',
|
|
441
|
+
},
|
|
442
|
+
]);
|
|
443
|
+
|
|
444
|
+
if (install === 'selective') {
|
|
445
|
+
// Show list of available subagents with descriptions
|
|
446
|
+
const subagentInfo = {
|
|
447
|
+
'market-researcher.md': 'Market research and competitive analysis',
|
|
448
|
+
'requirements-analyst.md': 'Requirements extraction and validation',
|
|
449
|
+
'technical-evaluator.md': 'Technology stack evaluation',
|
|
450
|
+
'epic-optimizer.md': 'Epic and story breakdown optimization',
|
|
451
|
+
'document-reviewer.md': 'Document quality review',
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
const { selected } = await inquirer.prompt([
|
|
455
|
+
{
|
|
456
|
+
type: 'checkbox',
|
|
457
|
+
name: 'selected',
|
|
458
|
+
message: 'Select subagents to install:',
|
|
459
|
+
choices: subagentConfig.files.map((file) => ({
|
|
460
|
+
name: `${file.replace('.md', '')} - ${subagentInfo[file] || 'Specialized assistant'}`,
|
|
461
|
+
value: file,
|
|
462
|
+
checked: true,
|
|
463
|
+
})),
|
|
464
|
+
},
|
|
465
|
+
]);
|
|
466
|
+
|
|
467
|
+
return { install: 'selective', selected };
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
return { install };
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Check if an injection should be applied based on user choices
|
|
475
|
+
*/
|
|
476
|
+
shouldInject(injection, subagentChoices) {
|
|
477
|
+
// If user chose no subagents, no injections
|
|
478
|
+
if (subagentChoices.install === 'none') {
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// If user chose all subagents, all injections apply
|
|
483
|
+
if (subagentChoices.install === 'all') {
|
|
484
|
+
return true;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// For selective installation, check the 'requires' field
|
|
488
|
+
if (subagentChoices.install === 'selective') {
|
|
489
|
+
// If injection requires 'any' subagent and user selected at least one
|
|
490
|
+
if (injection.requires === 'any' && subagentChoices.selected.length > 0) {
|
|
491
|
+
return true;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Check if the required subagent was selected
|
|
495
|
+
if (injection.requires) {
|
|
496
|
+
const requiredAgent = injection.requires + '.md';
|
|
497
|
+
return subagentChoices.selected.includes(requiredAgent);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Fallback: check if injection mentions a selected agent
|
|
501
|
+
const selectedAgentNames = subagentChoices.selected.map((f) => f.replace('.md', ''));
|
|
502
|
+
for (const agentName of selectedAgentNames) {
|
|
503
|
+
if (injection.point && injection.point.includes(agentName)) {
|
|
504
|
+
return true;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Inject content at specified point in file
|
|
514
|
+
*/
|
|
515
|
+
async injectContent(projectDir, injection, subagentChoices = null) {
|
|
516
|
+
const fs = require('fs-extra');
|
|
517
|
+
const targetPath = path.join(projectDir, injection.file);
|
|
518
|
+
|
|
519
|
+
if (await this.exists(targetPath)) {
|
|
520
|
+
let content = await fs.readFile(targetPath, 'utf8');
|
|
521
|
+
const marker = `<!-- IDE-INJECT-POINT: ${injection.point} -->`;
|
|
522
|
+
|
|
523
|
+
if (content.includes(marker)) {
|
|
524
|
+
let injectionContent = injection.content;
|
|
525
|
+
|
|
526
|
+
// Filter content if selective subagents chosen
|
|
527
|
+
if (subagentChoices && subagentChoices.install === 'selective' && injection.point === 'pm-agent-instructions') {
|
|
528
|
+
injectionContent = this.filterAgentInstructions(injection.content, subagentChoices.selected);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
content = content.replace(marker, injectionContent);
|
|
532
|
+
await fs.writeFile(targetPath, content);
|
|
533
|
+
console.log(chalk.dim(` Injected: ${injection.point} → ${injection.file}`));
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Filter agent instructions to only include selected subagents
|
|
540
|
+
*/
|
|
541
|
+
filterAgentInstructions(content, selectedFiles) {
|
|
542
|
+
const selectedAgents = selectedFiles.map((f) => f.replace('.md', ''));
|
|
543
|
+
const lines = content.split('\n');
|
|
544
|
+
const filteredLines = [];
|
|
545
|
+
|
|
546
|
+
let includeNextLine = true;
|
|
547
|
+
for (const line of lines) {
|
|
548
|
+
// Always include structural lines
|
|
549
|
+
if (line.includes('<llm') || line.includes('</llm>')) {
|
|
550
|
+
filteredLines.push(line);
|
|
551
|
+
includeNextLine = true;
|
|
552
|
+
}
|
|
553
|
+
// Check if line mentions a subagent
|
|
554
|
+
else if (line.includes('subagent')) {
|
|
555
|
+
let shouldInclude = false;
|
|
556
|
+
for (const agent of selectedAgents) {
|
|
557
|
+
if (line.includes(agent)) {
|
|
558
|
+
shouldInclude = true;
|
|
559
|
+
break;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
if (shouldInclude) {
|
|
563
|
+
filteredLines.push(line);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
// Include general instructions
|
|
567
|
+
else if (line.includes('When creating PRDs') || line.includes('ACTIVELY delegate')) {
|
|
568
|
+
filteredLines.push(line);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// Only return content if we have actual instructions
|
|
573
|
+
if (filteredLines.length > 2) {
|
|
574
|
+
// More than just llm tags
|
|
575
|
+
return filteredLines.join('\n');
|
|
576
|
+
}
|
|
577
|
+
return ''; // Return empty if no relevant content
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* Copy selected subagents to appropriate Claude agents directory
|
|
582
|
+
*/
|
|
583
|
+
async copySelectedSubagents(projectDir, moduleClaudeDir, subagentConfig, choices, location) {
|
|
584
|
+
const fs = require('fs-extra');
|
|
585
|
+
const sourceDir = path.join(moduleClaudeDir, subagentConfig.source);
|
|
586
|
+
|
|
587
|
+
// Determine target directory based on user choice
|
|
588
|
+
let targetDir;
|
|
589
|
+
if (location === 'user') {
|
|
590
|
+
targetDir = path.join(require('node:os').homedir(), '.claude', 'agents');
|
|
591
|
+
console.log(chalk.dim(` Installing subagents globally to: ~/.claude/agents/`));
|
|
592
|
+
} else {
|
|
593
|
+
targetDir = path.join(projectDir, '.claude', 'agents');
|
|
594
|
+
console.log(chalk.dim(` Installing subagents to project: .claude/agents/`));
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
// Ensure target directory exists
|
|
598
|
+
await this.ensureDir(targetDir);
|
|
599
|
+
|
|
600
|
+
// Determine which files to copy
|
|
601
|
+
let filesToCopy = [];
|
|
602
|
+
if (choices.install === 'all') {
|
|
603
|
+
filesToCopy = subagentConfig.files;
|
|
604
|
+
} else if (choices.install === 'selective') {
|
|
605
|
+
filesToCopy = choices.selected;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// Copy selected subagent files
|
|
609
|
+
for (const file of filesToCopy) {
|
|
610
|
+
const sourcePath = path.join(sourceDir, file);
|
|
611
|
+
const targetPath = path.join(targetDir, file);
|
|
612
|
+
|
|
613
|
+
if (await this.exists(sourcePath)) {
|
|
614
|
+
await fs.copyFile(sourcePath, targetPath);
|
|
615
|
+
console.log(chalk.green(` ✓ Installed: ${file.replace('.md', '')}`));
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
if (filesToCopy.length > 0) {
|
|
620
|
+
console.log(chalk.dim(` Total subagents installed: ${filesToCopy.length}`));
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
module.exports = { ClaudeCodeSetup };
|