bmad-method 5.1.3 → 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 -33
- 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,203 @@
|
|
|
1
|
+
const fs = require('fs-extra');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* IDE Manager - handles IDE-specific setup
|
|
7
|
+
* Dynamically discovers and loads IDE handlers
|
|
8
|
+
*/
|
|
9
|
+
class IdeManager {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.handlers = new Map();
|
|
12
|
+
this.loadHandlers();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Dynamically load all IDE handlers from directory
|
|
17
|
+
*/
|
|
18
|
+
loadHandlers() {
|
|
19
|
+
const ideDir = __dirname;
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
// Get all JS files in the IDE directory
|
|
23
|
+
const files = fs.readdirSync(ideDir).filter((file) => {
|
|
24
|
+
// Skip base class, manager, utility files (starting with _), and helper modules
|
|
25
|
+
return file.endsWith('.js') && !file.startsWith('_') && file !== 'manager.js' && file !== 'workflow-command-generator.js';
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Sort alphabetically for consistent ordering
|
|
29
|
+
files.sort();
|
|
30
|
+
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
const moduleName = path.basename(file, '.js');
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
const modulePath = path.join(ideDir, file);
|
|
36
|
+
const HandlerModule = require(modulePath);
|
|
37
|
+
|
|
38
|
+
// Get the first exported class (handles various export styles)
|
|
39
|
+
const HandlerClass = HandlerModule.default || HandlerModule[Object.keys(HandlerModule)[0]];
|
|
40
|
+
|
|
41
|
+
if (HandlerClass) {
|
|
42
|
+
const instance = new HandlerClass();
|
|
43
|
+
// Use the name property from the instance (set in constructor)
|
|
44
|
+
this.handlers.set(instance.name, instance);
|
|
45
|
+
}
|
|
46
|
+
} catch (error) {
|
|
47
|
+
console.log(chalk.yellow(` Warning: Could not load ${moduleName}: ${error.message}`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error(chalk.red('Failed to load IDE handlers:'), error.message);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Get all available IDEs with their metadata
|
|
57
|
+
* @returns {Array} Array of IDE information objects
|
|
58
|
+
*/
|
|
59
|
+
getAvailableIdes() {
|
|
60
|
+
const ides = [];
|
|
61
|
+
|
|
62
|
+
for (const [key, handler] of this.handlers) {
|
|
63
|
+
ides.push({
|
|
64
|
+
value: key,
|
|
65
|
+
name: handler.displayName || handler.name || key,
|
|
66
|
+
preferred: handler.preferred || false,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Sort: preferred first, then alphabetical
|
|
71
|
+
ides.sort((a, b) => {
|
|
72
|
+
if (a.preferred && !b.preferred) return -1;
|
|
73
|
+
if (!a.preferred && b.preferred) return 1;
|
|
74
|
+
// Ensure both names exist before comparing
|
|
75
|
+
const nameA = a.name || '';
|
|
76
|
+
const nameB = b.name || '';
|
|
77
|
+
return nameA.localeCompare(nameB);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
return ides;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Get preferred IDEs
|
|
85
|
+
* @returns {Array} Array of preferred IDE information
|
|
86
|
+
*/
|
|
87
|
+
getPreferredIdes() {
|
|
88
|
+
return this.getAvailableIdes().filter((ide) => ide.preferred);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get non-preferred IDEs
|
|
93
|
+
* @returns {Array} Array of non-preferred IDE information
|
|
94
|
+
*/
|
|
95
|
+
getOtherIdes() {
|
|
96
|
+
return this.getAvailableIdes().filter((ide) => !ide.preferred);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Setup IDE configuration
|
|
101
|
+
* @param {string} ideName - Name of the IDE
|
|
102
|
+
* @param {string} projectDir - Project directory
|
|
103
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
104
|
+
* @param {Object} options - Setup options
|
|
105
|
+
*/
|
|
106
|
+
async setup(ideName, projectDir, bmadDir, options = {}) {
|
|
107
|
+
const handler = this.handlers.get(ideName.toLowerCase());
|
|
108
|
+
|
|
109
|
+
if (!handler) {
|
|
110
|
+
console.warn(chalk.yellow(`⚠️ IDE '${ideName}' is not yet supported`));
|
|
111
|
+
console.log(chalk.dim('Supported IDEs:', [...this.handlers.keys()].join(', ')));
|
|
112
|
+
return { success: false, reason: 'unsupported' };
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
await handler.setup(projectDir, bmadDir, options);
|
|
117
|
+
return { success: true, ide: ideName };
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.error(chalk.red(`Failed to setup ${ideName}:`), error.message);
|
|
120
|
+
return { success: false, error: error.message };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Cleanup IDE configurations
|
|
126
|
+
* @param {string} projectDir - Project directory
|
|
127
|
+
*/
|
|
128
|
+
async cleanup(projectDir) {
|
|
129
|
+
const results = [];
|
|
130
|
+
|
|
131
|
+
for (const [name, handler] of this.handlers) {
|
|
132
|
+
try {
|
|
133
|
+
await handler.cleanup(projectDir);
|
|
134
|
+
results.push({ ide: name, success: true });
|
|
135
|
+
} catch (error) {
|
|
136
|
+
results.push({ ide: name, success: false, error: error.message });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return results;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Get list of supported IDEs
|
|
145
|
+
* @returns {Array} List of supported IDE names
|
|
146
|
+
*/
|
|
147
|
+
getSupportedIdes() {
|
|
148
|
+
return [...this.handlers.keys()];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Check if an IDE is supported
|
|
153
|
+
* @param {string} ideName - Name of the IDE
|
|
154
|
+
* @returns {boolean} True if IDE is supported
|
|
155
|
+
*/
|
|
156
|
+
isSupported(ideName) {
|
|
157
|
+
return this.handlers.has(ideName.toLowerCase());
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Detect installed IDEs
|
|
162
|
+
* @param {string} projectDir - Project directory
|
|
163
|
+
* @returns {Array} List of detected IDEs
|
|
164
|
+
*/
|
|
165
|
+
async detectInstalledIdes(projectDir) {
|
|
166
|
+
const detected = [];
|
|
167
|
+
|
|
168
|
+
// Check for IDE-specific directories
|
|
169
|
+
const ideChecks = {
|
|
170
|
+
cursor: '.cursor',
|
|
171
|
+
'claude-code': '.claude',
|
|
172
|
+
windsurf: '.windsurf',
|
|
173
|
+
cline: '.clinerules',
|
|
174
|
+
roo: '.roomodes',
|
|
175
|
+
trae: '.trae',
|
|
176
|
+
kilo: '.kilocodemodes',
|
|
177
|
+
gemini: '.gemini',
|
|
178
|
+
qwen: '.qwen',
|
|
179
|
+
crush: '.crush',
|
|
180
|
+
iflow: '.iflow',
|
|
181
|
+
auggie: '.auggie',
|
|
182
|
+
'github-copilot': '.github/chatmodes',
|
|
183
|
+
vscode: '.vscode',
|
|
184
|
+
idea: '.idea',
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
for (const [ide, dir] of Object.entries(ideChecks)) {
|
|
188
|
+
const idePath = path.join(projectDir, dir);
|
|
189
|
+
if (await fs.pathExists(idePath)) {
|
|
190
|
+
detected.push(ide);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Check for AGENTS.md (Codex)
|
|
195
|
+
if (await fs.pathExists(path.join(projectDir, 'AGENTS.md'))) {
|
|
196
|
+
detected.push('codex');
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return detected;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
module.exports = { IdeManager };
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Qwen Code setup handler
|
|
7
|
+
* Creates concatenated QWEN.md file in .qwen/bmad-method/ (similar to Gemini)
|
|
8
|
+
*/
|
|
9
|
+
class QwenSetup extends BaseIdeSetup {
|
|
10
|
+
constructor() {
|
|
11
|
+
super('qwen', 'Qwen Code');
|
|
12
|
+
this.configDir = '.qwen';
|
|
13
|
+
this.bmadDir = 'bmad-method';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Setup Qwen Code configuration
|
|
18
|
+
* @param {string} projectDir - Project directory
|
|
19
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
20
|
+
* @param {Object} options - Setup options
|
|
21
|
+
*/
|
|
22
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
23
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
24
|
+
|
|
25
|
+
// Create .qwen/bmad-method directory
|
|
26
|
+
const qwenDir = path.join(projectDir, this.configDir);
|
|
27
|
+
const bmadMethodDir = path.join(qwenDir, this.bmadDir);
|
|
28
|
+
await this.ensureDir(bmadMethodDir);
|
|
29
|
+
|
|
30
|
+
// Update existing settings.json if present
|
|
31
|
+
await this.updateSettings(qwenDir);
|
|
32
|
+
|
|
33
|
+
// Clean up old agents directory if exists
|
|
34
|
+
await this.cleanupOldAgents(qwenDir);
|
|
35
|
+
|
|
36
|
+
// Get agents
|
|
37
|
+
const agents = await this.getAgents(bmadDir);
|
|
38
|
+
|
|
39
|
+
// Create concatenated content for all agents
|
|
40
|
+
let concatenatedContent = `# BMAD Method - Qwen Code Configuration
|
|
41
|
+
|
|
42
|
+
This file contains all BMAD agents configured for use with Qwen Code.
|
|
43
|
+
Agents can be activated by typing \`*{agent-name}\` in your prompts.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
let agentCount = 0;
|
|
50
|
+
for (const agent of agents) {
|
|
51
|
+
const content = await this.readFile(agent.path);
|
|
52
|
+
const agentSection = this.createAgentSection(agent, content, projectDir);
|
|
53
|
+
|
|
54
|
+
concatenatedContent += agentSection;
|
|
55
|
+
concatenatedContent += '\n\n---\n\n';
|
|
56
|
+
agentCount++;
|
|
57
|
+
|
|
58
|
+
console.log(chalk.green(` ✓ Added agent: *${agent.name}`));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Write QWEN.md
|
|
62
|
+
const qwenMdPath = path.join(bmadMethodDir, 'QWEN.md');
|
|
63
|
+
await this.writeFile(qwenMdPath, concatenatedContent);
|
|
64
|
+
|
|
65
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
66
|
+
console.log(chalk.dim(` - ${agentCount} agents configured`));
|
|
67
|
+
console.log(chalk.dim(` - Configuration file: ${path.relative(projectDir, qwenMdPath)}`));
|
|
68
|
+
console.log(chalk.dim(` - Agents activated with: *{agent-name}`));
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
success: true,
|
|
72
|
+
agents: agentCount,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Update settings.json to remove old agent references
|
|
78
|
+
*/
|
|
79
|
+
async updateSettings(qwenDir) {
|
|
80
|
+
const fs = require('fs-extra');
|
|
81
|
+
const settingsPath = path.join(qwenDir, 'settings.json');
|
|
82
|
+
|
|
83
|
+
if (await fs.pathExists(settingsPath)) {
|
|
84
|
+
try {
|
|
85
|
+
const settingsContent = await fs.readFile(settingsPath, 'utf8');
|
|
86
|
+
const settings = JSON.parse(settingsContent);
|
|
87
|
+
let updated = false;
|
|
88
|
+
|
|
89
|
+
// Remove agent file references from contextFileName
|
|
90
|
+
if (settings.contextFileName && Array.isArray(settings.contextFileName)) {
|
|
91
|
+
const originalLength = settings.contextFileName.length;
|
|
92
|
+
settings.contextFileName = settings.contextFileName.filter((fileName) => !fileName.startsWith('agents/'));
|
|
93
|
+
|
|
94
|
+
if (settings.contextFileName.length !== originalLength) {
|
|
95
|
+
updated = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (updated) {
|
|
100
|
+
await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2));
|
|
101
|
+
console.log(chalk.green(' ✓ Updated .qwen/settings.json'));
|
|
102
|
+
}
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.warn(chalk.yellow(' ⚠ Could not update settings.json:'), error.message);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Clean up old agents directory
|
|
111
|
+
*/
|
|
112
|
+
async cleanupOldAgents(qwenDir) {
|
|
113
|
+
const fs = require('fs-extra');
|
|
114
|
+
const agentsDir = path.join(qwenDir, 'agents');
|
|
115
|
+
|
|
116
|
+
if (await fs.pathExists(agentsDir)) {
|
|
117
|
+
await fs.remove(agentsDir);
|
|
118
|
+
console.log(chalk.green(' ✓ Removed old agents directory'));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Create agent section for concatenated file
|
|
124
|
+
*/
|
|
125
|
+
createAgentSection(agent, content, projectDir) {
|
|
126
|
+
// Extract metadata
|
|
127
|
+
const titleMatch = content.match(/title="([^"]+)"/);
|
|
128
|
+
const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
|
|
129
|
+
|
|
130
|
+
// Extract YAML content
|
|
131
|
+
const yamlMatch = content.match(/```ya?ml\r?\n([\s\S]*?)```/);
|
|
132
|
+
const yamlContent = yamlMatch ? yamlMatch[1] : content;
|
|
133
|
+
|
|
134
|
+
// Get relative path
|
|
135
|
+
const relativePath = path.relative(projectDir, agent.path).replaceAll('\\', '/');
|
|
136
|
+
|
|
137
|
+
let section = `# ${agent.name.toUpperCase()} Agent Rule
|
|
138
|
+
|
|
139
|
+
This rule is triggered when the user types \`*${agent.name}\` and activates the ${title} agent persona.
|
|
140
|
+
|
|
141
|
+
## Agent Activation
|
|
142
|
+
|
|
143
|
+
CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:
|
|
144
|
+
|
|
145
|
+
\`\`\`yaml
|
|
146
|
+
${yamlContent}
|
|
147
|
+
\`\`\`
|
|
148
|
+
|
|
149
|
+
## File Reference
|
|
150
|
+
|
|
151
|
+
The complete agent definition is available in [${relativePath}](${relativePath}).
|
|
152
|
+
|
|
153
|
+
## Usage
|
|
154
|
+
|
|
155
|
+
When the user types \`*${agent.name}\`, activate this ${title} persona and follow all instructions defined in the YAML configuration above.
|
|
156
|
+
|
|
157
|
+
## Module
|
|
158
|
+
|
|
159
|
+
Part of the BMAD ${agent.module.toUpperCase()} module.`;
|
|
160
|
+
|
|
161
|
+
return section;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Format name as title
|
|
166
|
+
*/
|
|
167
|
+
formatTitle(name) {
|
|
168
|
+
return name
|
|
169
|
+
.split('-')
|
|
170
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
171
|
+
.join(' ');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Cleanup Qwen configuration
|
|
176
|
+
*/
|
|
177
|
+
async cleanup(projectDir) {
|
|
178
|
+
const fs = require('fs-extra');
|
|
179
|
+
const bmadMethodDir = path.join(projectDir, this.configDir, this.bmadDir);
|
|
180
|
+
|
|
181
|
+
if (await fs.pathExists(bmadMethodDir)) {
|
|
182
|
+
await fs.remove(bmadMethodDir);
|
|
183
|
+
console.log(chalk.dim(`Removed BMAD configuration from Qwen Code`));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
module.exports = { QwenSetup };
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const inquirer = require('inquirer');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Roo IDE setup handler
|
|
8
|
+
* Creates custom modes in .roomodes file
|
|
9
|
+
*/
|
|
10
|
+
class RooSetup extends BaseIdeSetup {
|
|
11
|
+
constructor() {
|
|
12
|
+
super('roo', 'Roo Code');
|
|
13
|
+
this.configFile = '.roomodes';
|
|
14
|
+
this.defaultPermissions = {
|
|
15
|
+
dev: {
|
|
16
|
+
description: 'Development files',
|
|
17
|
+
fileRegex: String.raw`.*\.(js|jsx|ts|tsx|py|java|cpp|c|h|cs|go|rs|php|rb|swift)$`,
|
|
18
|
+
},
|
|
19
|
+
config: {
|
|
20
|
+
description: 'Configuration files',
|
|
21
|
+
fileRegex: String.raw`.*\.(json|yaml|yml|toml|xml|ini|env|config)$`,
|
|
22
|
+
},
|
|
23
|
+
docs: {
|
|
24
|
+
description: 'Documentation files',
|
|
25
|
+
fileRegex: String.raw`.*\.(md|mdx|rst|txt|doc|docx)$`,
|
|
26
|
+
},
|
|
27
|
+
styles: {
|
|
28
|
+
description: 'Style and design files',
|
|
29
|
+
fileRegex: String.raw`.*\.(css|scss|sass|less|stylus)$`,
|
|
30
|
+
},
|
|
31
|
+
all: {
|
|
32
|
+
description: 'All files',
|
|
33
|
+
fileRegex: '.*',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Collect configuration choices before installation
|
|
40
|
+
* @param {Object} options - Configuration options
|
|
41
|
+
* @returns {Object} Collected configuration
|
|
42
|
+
*/
|
|
43
|
+
async collectConfiguration(options = {}) {
|
|
44
|
+
const response = await inquirer.prompt([
|
|
45
|
+
{
|
|
46
|
+
type: 'list',
|
|
47
|
+
name: 'permissions',
|
|
48
|
+
message: 'Select default file edit permissions for BMAD agents:',
|
|
49
|
+
choices: [
|
|
50
|
+
{ name: 'Development files only (js, ts, py, etc.)', value: 'dev' },
|
|
51
|
+
{ name: 'Configuration files only (json, yaml, xml, etc.)', value: 'config' },
|
|
52
|
+
{ name: 'Documentation files only (md, txt, doc, etc.)', value: 'docs' },
|
|
53
|
+
{ name: 'All files (unrestricted access)', value: 'all' },
|
|
54
|
+
{ name: 'Custom per agent (will be configured individually)', value: 'custom' },
|
|
55
|
+
],
|
|
56
|
+
default: 'dev',
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
|
|
60
|
+
return { permissions: response.permissions };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Setup Roo IDE configuration
|
|
65
|
+
* @param {string} projectDir - Project directory
|
|
66
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
67
|
+
* @param {Object} options - Setup options
|
|
68
|
+
*/
|
|
69
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
70
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
71
|
+
|
|
72
|
+
// Check for existing .roomodes file
|
|
73
|
+
const roomodesPath = path.join(projectDir, this.configFile);
|
|
74
|
+
let existingModes = [];
|
|
75
|
+
let existingContent = '';
|
|
76
|
+
|
|
77
|
+
if (await this.pathExists(roomodesPath)) {
|
|
78
|
+
existingContent = await this.readFile(roomodesPath);
|
|
79
|
+
// Parse existing modes to avoid duplicates
|
|
80
|
+
const modeMatches = existingContent.matchAll(/- slug: ([\w-]+)/g);
|
|
81
|
+
for (const match of modeMatches) {
|
|
82
|
+
existingModes.push(match[1]);
|
|
83
|
+
}
|
|
84
|
+
console.log(chalk.yellow(`Found existing .roomodes file with ${existingModes.length} modes`));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Get agents
|
|
88
|
+
const agents = await this.getAgents(bmadDir);
|
|
89
|
+
|
|
90
|
+
// Use pre-collected configuration if available
|
|
91
|
+
const config = options.preCollectedConfig || {};
|
|
92
|
+
let permissionChoice = config.permissions || options.permissions || 'dev';
|
|
93
|
+
|
|
94
|
+
// Create modes content
|
|
95
|
+
let newModesContent = '';
|
|
96
|
+
let addedCount = 0;
|
|
97
|
+
let skippedCount = 0;
|
|
98
|
+
|
|
99
|
+
for (const agent of agents) {
|
|
100
|
+
const slug = `bmad-${agent.module}-${agent.name}`;
|
|
101
|
+
|
|
102
|
+
// Skip if already exists
|
|
103
|
+
if (existingModes.includes(slug)) {
|
|
104
|
+
console.log(chalk.dim(` Skipping ${slug} - already exists`));
|
|
105
|
+
skippedCount++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const content = await this.readFile(agent.path);
|
|
110
|
+
const modeEntry = this.createModeEntry(agent, content, permissionChoice, projectDir);
|
|
111
|
+
|
|
112
|
+
newModesContent += modeEntry;
|
|
113
|
+
addedCount++;
|
|
114
|
+
console.log(chalk.green(` ✓ Added mode: ${slug}`));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Build final content
|
|
118
|
+
let finalContent = '';
|
|
119
|
+
if (existingContent) {
|
|
120
|
+
// Append to existing content
|
|
121
|
+
finalContent = existingContent.trim() + '\n' + newModesContent;
|
|
122
|
+
} else {
|
|
123
|
+
// Create new .roomodes file
|
|
124
|
+
finalContent = 'customModes:\n' + newModesContent;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Write .roomodes file
|
|
128
|
+
await this.writeFile(roomodesPath, finalContent);
|
|
129
|
+
|
|
130
|
+
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
131
|
+
console.log(chalk.dim(` - ${addedCount} modes added`));
|
|
132
|
+
if (skippedCount > 0) {
|
|
133
|
+
console.log(chalk.dim(` - ${skippedCount} modes skipped (already exist)`));
|
|
134
|
+
}
|
|
135
|
+
console.log(chalk.dim(` - Configuration file: ${this.configFile}`));
|
|
136
|
+
console.log(chalk.dim(` - Permission level: ${permissionChoice}`));
|
|
137
|
+
console.log(chalk.dim('\n Modes will be available when you open this project in Roo Code'));
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
success: true,
|
|
141
|
+
modes: addedCount,
|
|
142
|
+
skipped: skippedCount,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Ask user about permission configuration
|
|
148
|
+
*/
|
|
149
|
+
async askPermissions() {
|
|
150
|
+
const response = await inquirer.prompt([
|
|
151
|
+
{
|
|
152
|
+
type: 'list',
|
|
153
|
+
name: 'permissions',
|
|
154
|
+
message: 'Select default file edit permissions for BMAD agents:',
|
|
155
|
+
choices: [
|
|
156
|
+
{ name: 'Development files only (js, ts, py, etc.)', value: 'dev' },
|
|
157
|
+
{ name: 'Configuration files only (json, yaml, xml, etc.)', value: 'config' },
|
|
158
|
+
{ name: 'Documentation files only (md, txt, doc, etc.)', value: 'docs' },
|
|
159
|
+
{ name: 'All files (unrestricted access)', value: 'all' },
|
|
160
|
+
{ name: 'Custom per agent (will be configured individually)', value: 'custom' },
|
|
161
|
+
],
|
|
162
|
+
default: 'dev',
|
|
163
|
+
},
|
|
164
|
+
]);
|
|
165
|
+
|
|
166
|
+
return response.permissions;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Create a mode entry for an agent
|
|
171
|
+
*/
|
|
172
|
+
createModeEntry(agent, content, permissionChoice, projectDir) {
|
|
173
|
+
// Extract metadata from agent content
|
|
174
|
+
const titleMatch = content.match(/title="([^"]+)"/);
|
|
175
|
+
const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
|
|
176
|
+
|
|
177
|
+
const iconMatch = content.match(/icon="([^"]+)"/);
|
|
178
|
+
const icon = iconMatch ? iconMatch[1] : '🤖';
|
|
179
|
+
|
|
180
|
+
const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
|
|
181
|
+
const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
|
|
182
|
+
|
|
183
|
+
const roleDefinitionMatch = content.match(/roleDefinition="([^"]+)"/);
|
|
184
|
+
const roleDefinition = roleDefinitionMatch
|
|
185
|
+
? roleDefinitionMatch[1]
|
|
186
|
+
: `You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
|
|
187
|
+
|
|
188
|
+
// Get relative path
|
|
189
|
+
const relativePath = path.relative(projectDir, agent.path).replaceAll('\\', '/');
|
|
190
|
+
|
|
191
|
+
// Determine permissions
|
|
192
|
+
const permissions = this.getPermissionsForAgent(agent, permissionChoice);
|
|
193
|
+
|
|
194
|
+
// Build mode entry
|
|
195
|
+
const slug = `bmad-${agent.module}-${agent.name}`;
|
|
196
|
+
let modeEntry = ` - slug: ${slug}\n`;
|
|
197
|
+
modeEntry += ` name: '${icon} ${title}'\n`;
|
|
198
|
+
|
|
199
|
+
if (permissions && permissions.description) {
|
|
200
|
+
modeEntry += ` description: '${permissions.description}'\n`;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
modeEntry += ` roleDefinition: ${roleDefinition}\n`;
|
|
204
|
+
modeEntry += ` whenToUse: ${whenToUse}\n`;
|
|
205
|
+
modeEntry += ` customInstructions: CRITICAL Read the full YAML from ${relativePath} start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode\n`;
|
|
206
|
+
modeEntry += ` groups:\n`;
|
|
207
|
+
modeEntry += ` - read\n`;
|
|
208
|
+
|
|
209
|
+
if (permissions && permissions.fileRegex) {
|
|
210
|
+
modeEntry += ` - - edit\n`;
|
|
211
|
+
modeEntry += ` - fileRegex: ${permissions.fileRegex}\n`;
|
|
212
|
+
modeEntry += ` description: ${permissions.description}\n`;
|
|
213
|
+
} else {
|
|
214
|
+
modeEntry += ` - edit\n`;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return modeEntry;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Get permissions configuration for an agent
|
|
222
|
+
*/
|
|
223
|
+
getPermissionsForAgent(agent, permissionChoice) {
|
|
224
|
+
if (permissionChoice === 'custom') {
|
|
225
|
+
// Custom logic based on agent name/module
|
|
226
|
+
if (agent.name.includes('dev') || agent.name.includes('code')) {
|
|
227
|
+
return this.defaultPermissions.dev;
|
|
228
|
+
} else if (agent.name.includes('doc') || agent.name.includes('write')) {
|
|
229
|
+
return this.defaultPermissions.docs;
|
|
230
|
+
} else if (agent.name.includes('config') || agent.name.includes('setup')) {
|
|
231
|
+
return this.defaultPermissions.config;
|
|
232
|
+
} else if (agent.name.includes('style') || agent.name.includes('css')) {
|
|
233
|
+
return this.defaultPermissions.styles;
|
|
234
|
+
}
|
|
235
|
+
// Default to all for custom agents
|
|
236
|
+
return this.defaultPermissions.all;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return this.defaultPermissions[permissionChoice] || null;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Format name as title
|
|
244
|
+
*/
|
|
245
|
+
formatTitle(name) {
|
|
246
|
+
return name
|
|
247
|
+
.split('-')
|
|
248
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
249
|
+
.join(' ');
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Cleanup Roo configuration
|
|
254
|
+
*/
|
|
255
|
+
async cleanup(projectDir) {
|
|
256
|
+
const fs = require('fs-extra');
|
|
257
|
+
const roomodesPath = path.join(projectDir, this.configFile);
|
|
258
|
+
|
|
259
|
+
if (await fs.pathExists(roomodesPath)) {
|
|
260
|
+
const content = await fs.readFile(roomodesPath, 'utf8');
|
|
261
|
+
|
|
262
|
+
// Remove BMAD modes only
|
|
263
|
+
const lines = content.split('\n');
|
|
264
|
+
const filteredLines = [];
|
|
265
|
+
let skipMode = false;
|
|
266
|
+
let removedCount = 0;
|
|
267
|
+
|
|
268
|
+
for (const line of lines) {
|
|
269
|
+
if (/^\s*- slug: bmad-/.test(line)) {
|
|
270
|
+
skipMode = true;
|
|
271
|
+
removedCount++;
|
|
272
|
+
} else if (skipMode && /^\s*- slug: /.test(line)) {
|
|
273
|
+
skipMode = false;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (!skipMode) {
|
|
277
|
+
filteredLines.push(line);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Write back filtered content
|
|
282
|
+
await fs.writeFile(roomodesPath, filteredLines.join('\n'));
|
|
283
|
+
console.log(chalk.dim(`Removed ${removedCount} BMAD modes from .roomodes`));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
module.exports = { RooSetup };
|