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
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
const fs = require('fs-extra');
|
|
2
|
-
const path = require('node:path');
|
|
3
|
-
const crypto = require('node:crypto');
|
|
4
|
-
const yaml = require('js-yaml');
|
|
5
|
-
const chalk = require('chalk');
|
|
6
|
-
const { createReadStream, createWriteStream, promises: fsPromises } = require('node:fs');
|
|
7
|
-
const { pipeline } = require('node:stream/promises');
|
|
8
|
-
const resourceLocator = require('./resource-locator');
|
|
9
|
-
|
|
10
|
-
class FileManager {
|
|
11
|
-
constructor() {}
|
|
12
|
-
|
|
13
|
-
async copyFile(source, destination) {
|
|
14
|
-
try {
|
|
15
|
-
await fs.ensureDir(path.dirname(destination));
|
|
16
|
-
|
|
17
|
-
// Use streaming for large files (> 10MB)
|
|
18
|
-
const stats = await fs.stat(source);
|
|
19
|
-
await (stats.size > 10 * 1024 * 1024
|
|
20
|
-
? pipeline(createReadStream(source), createWriteStream(destination))
|
|
21
|
-
: fs.copy(source, destination));
|
|
22
|
-
return true;
|
|
23
|
-
} catch (error) {
|
|
24
|
-
console.error(chalk.red(`Failed to copy ${source}:`), error.message);
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async copyDirectory(source, destination) {
|
|
30
|
-
try {
|
|
31
|
-
await fs.ensureDir(destination);
|
|
32
|
-
|
|
33
|
-
// Use streaming copy for large directories
|
|
34
|
-
const files = await resourceLocator.findFiles('**/*', {
|
|
35
|
-
cwd: source,
|
|
36
|
-
nodir: true,
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
// Process files in batches to avoid memory issues
|
|
40
|
-
const batchSize = 50;
|
|
41
|
-
for (let index = 0; index < files.length; index += batchSize) {
|
|
42
|
-
const batch = files.slice(index, index + batchSize);
|
|
43
|
-
await Promise.all(
|
|
44
|
-
batch.map((file) => this.copyFile(path.join(source, file), path.join(destination, file))),
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
return true;
|
|
48
|
-
} catch (error) {
|
|
49
|
-
console.error(chalk.red(`Failed to copy directory ${source}:`), error.message);
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async copyGlobPattern(pattern, sourceDir, destDir, rootValue = null) {
|
|
55
|
-
const files = await resourceLocator.findFiles(pattern, { cwd: sourceDir });
|
|
56
|
-
const copied = [];
|
|
57
|
-
|
|
58
|
-
for (const file of files) {
|
|
59
|
-
const sourcePath = path.join(sourceDir, file);
|
|
60
|
-
const destinationPath = path.join(destDir, file);
|
|
61
|
-
|
|
62
|
-
// Use root replacement if rootValue is provided and file needs it
|
|
63
|
-
const needsRootReplacement =
|
|
64
|
-
rootValue && (file.endsWith('.md') || file.endsWith('.yaml') || file.endsWith('.yml'));
|
|
65
|
-
|
|
66
|
-
let success = false;
|
|
67
|
-
success = await (needsRootReplacement
|
|
68
|
-
? this.copyFileWithRootReplacement(sourcePath, destinationPath, rootValue)
|
|
69
|
-
: this.copyFile(sourcePath, destinationPath));
|
|
70
|
-
|
|
71
|
-
if (success) {
|
|
72
|
-
copied.push(file);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return copied;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
async calculateFileHash(filePath) {
|
|
80
|
-
try {
|
|
81
|
-
// Use streaming for hash calculation to reduce memory usage
|
|
82
|
-
const stream = createReadStream(filePath);
|
|
83
|
-
const hash = crypto.createHash('sha256');
|
|
84
|
-
|
|
85
|
-
for await (const chunk of stream) {
|
|
86
|
-
hash.update(chunk);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return hash.digest('hex').slice(0, 16);
|
|
90
|
-
} catch {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async createManifest(installDir, config, files) {
|
|
96
|
-
const manifestPath = path.join(installDir, this.manifestDir, this.manifestFile);
|
|
97
|
-
|
|
98
|
-
// Read version from package.json
|
|
99
|
-
let coreVersion = 'unknown';
|
|
100
|
-
try {
|
|
101
|
-
const packagePath = path.join(__dirname, '..', '..', '..', 'package.json');
|
|
102
|
-
const packageJson = require(packagePath);
|
|
103
|
-
coreVersion = packageJson.version;
|
|
104
|
-
} catch {
|
|
105
|
-
console.warn("Could not read version from package.json, using 'unknown'");
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const manifest = {
|
|
109
|
-
version: coreVersion,
|
|
110
|
-
installed_at: new Date().toISOString(),
|
|
111
|
-
install_type: config.installType,
|
|
112
|
-
agent: config.agent || null,
|
|
113
|
-
ides_setup: config.ides || [],
|
|
114
|
-
expansion_packs: config.expansionPacks || [],
|
|
115
|
-
files: [],
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
// Add file information
|
|
119
|
-
for (const file of files) {
|
|
120
|
-
const filePath = path.join(installDir, file);
|
|
121
|
-
const hash = await this.calculateFileHash(filePath);
|
|
122
|
-
|
|
123
|
-
manifest.files.push({
|
|
124
|
-
path: file,
|
|
125
|
-
hash: hash,
|
|
126
|
-
modified: false,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Write manifest
|
|
131
|
-
await fs.ensureDir(path.dirname(manifestPath));
|
|
132
|
-
await fs.writeFile(manifestPath, yaml.dump(manifest, { indent: 2 }));
|
|
133
|
-
|
|
134
|
-
return manifest;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
async readManifest(installDir) {
|
|
138
|
-
const manifestPath = path.join(installDir, this.manifestDir, this.manifestFile);
|
|
139
|
-
|
|
140
|
-
try {
|
|
141
|
-
const content = await fs.readFile(manifestPath, 'utf8');
|
|
142
|
-
return yaml.load(content);
|
|
143
|
-
} catch {
|
|
144
|
-
return null;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
async readExpansionPackManifest(installDir, packId) {
|
|
149
|
-
const manifestPath = path.join(installDir, `.${packId}`, this.manifestFile);
|
|
150
|
-
|
|
151
|
-
try {
|
|
152
|
-
const content = await fs.readFile(manifestPath, 'utf8');
|
|
153
|
-
return yaml.load(content);
|
|
154
|
-
} catch {
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
async checkModifiedFiles(installDir, manifest) {
|
|
160
|
-
const modified = [];
|
|
161
|
-
|
|
162
|
-
for (const file of manifest.files) {
|
|
163
|
-
const filePath = path.join(installDir, file.path);
|
|
164
|
-
const currentHash = await this.calculateFileHash(filePath);
|
|
165
|
-
|
|
166
|
-
if (currentHash && currentHash !== file.hash) {
|
|
167
|
-
modified.push(file.path);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return modified;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
async checkFileIntegrity(installDir, manifest) {
|
|
175
|
-
const result = {
|
|
176
|
-
missing: [],
|
|
177
|
-
modified: [],
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
for (const file of manifest.files) {
|
|
181
|
-
const filePath = path.join(installDir, file.path);
|
|
182
|
-
|
|
183
|
-
// Skip checking the manifest file itself - it will always be different due to timestamps
|
|
184
|
-
if (file.path.endsWith('install-manifest.yaml')) {
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (await this.pathExists(filePath)) {
|
|
189
|
-
const currentHash = await this.calculateFileHash(filePath);
|
|
190
|
-
if (currentHash && currentHash !== file.hash) {
|
|
191
|
-
result.modified.push(file.path);
|
|
192
|
-
}
|
|
193
|
-
} else {
|
|
194
|
-
result.missing.push(file.path);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return result;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
async backupFile(filePath) {
|
|
202
|
-
const backupPath = filePath + '.bak';
|
|
203
|
-
let counter = 1;
|
|
204
|
-
let finalBackupPath = backupPath;
|
|
205
|
-
|
|
206
|
-
// Find a unique backup filename
|
|
207
|
-
while (await fs.pathExists(finalBackupPath)) {
|
|
208
|
-
finalBackupPath = `${filePath}.bak${counter}`;
|
|
209
|
-
counter++;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
await fs.copy(filePath, finalBackupPath);
|
|
213
|
-
return finalBackupPath;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
async ensureDirectory(dirPath) {
|
|
217
|
-
try {
|
|
218
|
-
await fs.ensureDir(dirPath);
|
|
219
|
-
return true;
|
|
220
|
-
} catch (error) {
|
|
221
|
-
throw error;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
async pathExists(filePath) {
|
|
226
|
-
return fs.pathExists(filePath);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
async readFile(filePath) {
|
|
230
|
-
return fs.readFile(filePath, 'utf8');
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
async writeFile(filePath, content) {
|
|
234
|
-
await fs.ensureDir(path.dirname(filePath));
|
|
235
|
-
await fs.writeFile(filePath, content);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
async removeDirectory(dirPath) {
|
|
239
|
-
await fs.remove(dirPath);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
async createExpansionPackManifest(installDir, packId, config, files) {
|
|
243
|
-
const manifestPath = path.join(installDir, `.${packId}`, this.manifestFile);
|
|
244
|
-
|
|
245
|
-
const manifest = {
|
|
246
|
-
version: config.expansionPackVersion || require('../../../package.json').version,
|
|
247
|
-
installed_at: new Date().toISOString(),
|
|
248
|
-
install_type: config.installType,
|
|
249
|
-
expansion_pack_id: config.expansionPackId,
|
|
250
|
-
expansion_pack_name: config.expansionPackName,
|
|
251
|
-
ides_setup: config.ides || [],
|
|
252
|
-
files: [],
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
// Add file information
|
|
256
|
-
for (const file of files) {
|
|
257
|
-
const filePath = path.join(installDir, file);
|
|
258
|
-
const hash = await this.calculateFileHash(filePath);
|
|
259
|
-
|
|
260
|
-
manifest.files.push({
|
|
261
|
-
path: file,
|
|
262
|
-
hash: hash,
|
|
263
|
-
modified: false,
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
// Write manifest
|
|
268
|
-
await fs.ensureDir(path.dirname(manifestPath));
|
|
269
|
-
await fs.writeFile(manifestPath, yaml.dump(manifest, { indent: 2 }));
|
|
270
|
-
|
|
271
|
-
return manifest;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
async modifyCoreConfig(installDir, config) {
|
|
275
|
-
const coreConfigPath = path.join(installDir, '.bmad-core', 'core-config.yaml');
|
|
276
|
-
|
|
277
|
-
try {
|
|
278
|
-
// Read the existing core-config.yaml
|
|
279
|
-
const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
|
|
280
|
-
const coreConfig = yaml.load(coreConfigContent);
|
|
281
|
-
|
|
282
|
-
// Modify sharding settings if provided
|
|
283
|
-
if (config.prdSharded !== undefined) {
|
|
284
|
-
coreConfig.prd.prdSharded = config.prdSharded;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
if (config.architectureSharded !== undefined) {
|
|
288
|
-
coreConfig.architecture.architectureSharded = config.architectureSharded;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
// Write back the modified config
|
|
292
|
-
await fs.writeFile(coreConfigPath, yaml.dump(coreConfig, { indent: 2 }));
|
|
293
|
-
|
|
294
|
-
return true;
|
|
295
|
-
} catch (error) {
|
|
296
|
-
console.error(chalk.red(`Failed to modify core-config.yaml:`), error.message);
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
async copyFileWithRootReplacement(source, destination, rootValue) {
|
|
302
|
-
try {
|
|
303
|
-
// Check file size to determine if we should stream
|
|
304
|
-
const stats = await fs.stat(source);
|
|
305
|
-
|
|
306
|
-
if (stats.size > 5 * 1024 * 1024) {
|
|
307
|
-
// 5MB threshold
|
|
308
|
-
// Use streaming for large files
|
|
309
|
-
const { Transform } = require('node:stream');
|
|
310
|
-
const replaceStream = new Transform({
|
|
311
|
-
transform(chunk, encoding, callback) {
|
|
312
|
-
const modified = chunk.toString().replaceAll('{root}', rootValue);
|
|
313
|
-
callback(null, modified);
|
|
314
|
-
},
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
await this.ensureDirectory(path.dirname(destination));
|
|
318
|
-
await pipeline(
|
|
319
|
-
createReadStream(source, { encoding: 'utf8' }),
|
|
320
|
-
replaceStream,
|
|
321
|
-
createWriteStream(destination, { encoding: 'utf8' }),
|
|
322
|
-
);
|
|
323
|
-
} else {
|
|
324
|
-
// Regular approach for smaller files
|
|
325
|
-
const content = await fsPromises.readFile(source, 'utf8');
|
|
326
|
-
const updatedContent = content.replaceAll('{root}', rootValue);
|
|
327
|
-
await this.ensureDirectory(path.dirname(destination));
|
|
328
|
-
await fsPromises.writeFile(destination, updatedContent, 'utf8');
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
return true;
|
|
332
|
-
} catch (error) {
|
|
333
|
-
console.error(chalk.red(`Failed to copy ${source} with root replacement:`), error.message);
|
|
334
|
-
return false;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
async copyDirectoryWithRootReplacement(
|
|
339
|
-
source,
|
|
340
|
-
destination,
|
|
341
|
-
rootValue,
|
|
342
|
-
fileExtensions = ['.md', '.yaml', '.yml'],
|
|
343
|
-
) {
|
|
344
|
-
try {
|
|
345
|
-
await this.ensureDirectory(destination);
|
|
346
|
-
|
|
347
|
-
// Get all files in source directory
|
|
348
|
-
const files = await resourceLocator.findFiles('**/*', {
|
|
349
|
-
cwd: source,
|
|
350
|
-
nodir: true,
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
let replacedCount = 0;
|
|
354
|
-
|
|
355
|
-
for (const file of files) {
|
|
356
|
-
const sourcePath = path.join(source, file);
|
|
357
|
-
const destinationPath = path.join(destination, file);
|
|
358
|
-
|
|
359
|
-
// Check if this file type should have {root} replacement
|
|
360
|
-
const shouldReplace = fileExtensions.some((extension) => file.endsWith(extension));
|
|
361
|
-
|
|
362
|
-
if (shouldReplace) {
|
|
363
|
-
if (await this.copyFileWithRootReplacement(sourcePath, destinationPath, rootValue)) {
|
|
364
|
-
replacedCount++;
|
|
365
|
-
}
|
|
366
|
-
} else {
|
|
367
|
-
// Regular copy for files that don't need replacement
|
|
368
|
-
await this.copyFile(sourcePath, destinationPath);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
if (replacedCount > 0) {
|
|
373
|
-
console.log(chalk.dim(` Processed ${replacedCount} files with {root} replacement`));
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
return true;
|
|
377
|
-
} catch (error) {
|
|
378
|
-
console.error(
|
|
379
|
-
chalk.red(`Failed to copy directory ${source} with root replacement:`),
|
|
380
|
-
error.message,
|
|
381
|
-
);
|
|
382
|
-
return false;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
manifestDir = '.bmad-core';
|
|
386
|
-
manifestFile = 'install-manifest.yaml';
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
module.exports = new FileManager();
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base IDE Setup - Common functionality for all IDE setups
|
|
3
|
-
* Reduces duplication and provides shared methods
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const path = require('node:path');
|
|
7
|
-
const fs = require('fs-extra');
|
|
8
|
-
const yaml = require('js-yaml');
|
|
9
|
-
const chalk = require('chalk').default || require('chalk');
|
|
10
|
-
const fileManager = require('./file-manager');
|
|
11
|
-
const resourceLocator = require('./resource-locator');
|
|
12
|
-
const { extractYamlFromAgent } = require('../../lib/yaml-utils');
|
|
13
|
-
|
|
14
|
-
class BaseIdeSetup {
|
|
15
|
-
constructor() {
|
|
16
|
-
this._agentCache = new Map();
|
|
17
|
-
this._pathCache = new Map();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Get all agent IDs with caching
|
|
22
|
-
*/
|
|
23
|
-
async getAllAgentIds(installDir) {
|
|
24
|
-
const cacheKey = `all-agents:${installDir}`;
|
|
25
|
-
if (this._agentCache.has(cacheKey)) {
|
|
26
|
-
return this._agentCache.get(cacheKey);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const allAgents = new Set();
|
|
30
|
-
|
|
31
|
-
// Get core agents
|
|
32
|
-
const coreAgents = await this.getCoreAgentIds(installDir);
|
|
33
|
-
for (const id of coreAgents) allAgents.add(id);
|
|
34
|
-
|
|
35
|
-
// Get expansion pack agents
|
|
36
|
-
const expansionPacks = await this.getInstalledExpansionPacks(installDir);
|
|
37
|
-
for (const pack of expansionPacks) {
|
|
38
|
-
const packAgents = await this.getExpansionPackAgents(pack.path);
|
|
39
|
-
for (const id of packAgents) allAgents.add(id);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const result = [...allAgents];
|
|
43
|
-
this._agentCache.set(cacheKey, result);
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Get core agent IDs
|
|
49
|
-
*/
|
|
50
|
-
async getCoreAgentIds(installDir) {
|
|
51
|
-
const coreAgents = [];
|
|
52
|
-
const corePaths = [
|
|
53
|
-
path.join(installDir, '.bmad-core', 'agents'),
|
|
54
|
-
path.join(installDir, 'bmad-core', 'agents'),
|
|
55
|
-
];
|
|
56
|
-
|
|
57
|
-
for (const agentsDir of corePaths) {
|
|
58
|
-
if (await fileManager.pathExists(agentsDir)) {
|
|
59
|
-
const files = await resourceLocator.findFiles('*.md', { cwd: agentsDir });
|
|
60
|
-
coreAgents.push(...files.map((file) => path.basename(file, '.md')));
|
|
61
|
-
break; // Use first found
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return coreAgents;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Find agent path with caching
|
|
70
|
-
*/
|
|
71
|
-
async findAgentPath(agentId, installDir) {
|
|
72
|
-
const cacheKey = `agent-path:${agentId}:${installDir}`;
|
|
73
|
-
if (this._pathCache.has(cacheKey)) {
|
|
74
|
-
return this._pathCache.get(cacheKey);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Use resource locator for efficient path finding
|
|
78
|
-
let agentPath = await resourceLocator.getAgentPath(agentId);
|
|
79
|
-
|
|
80
|
-
if (!agentPath) {
|
|
81
|
-
// Check installation-specific paths
|
|
82
|
-
const possiblePaths = [
|
|
83
|
-
path.join(installDir, '.bmad-core', 'agents', `${agentId}.md`),
|
|
84
|
-
path.join(installDir, 'bmad-core', 'agents', `${agentId}.md`),
|
|
85
|
-
path.join(installDir, 'common', 'agents', `${agentId}.md`),
|
|
86
|
-
];
|
|
87
|
-
|
|
88
|
-
for (const testPath of possiblePaths) {
|
|
89
|
-
if (await fileManager.pathExists(testPath)) {
|
|
90
|
-
agentPath = testPath;
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (agentPath) {
|
|
97
|
-
this._pathCache.set(cacheKey, agentPath);
|
|
98
|
-
}
|
|
99
|
-
return agentPath;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Get agent title from metadata
|
|
104
|
-
*/
|
|
105
|
-
async getAgentTitle(agentId, installDir) {
|
|
106
|
-
const agentPath = await this.findAgentPath(agentId, installDir);
|
|
107
|
-
if (!agentPath) return agentId;
|
|
108
|
-
|
|
109
|
-
try {
|
|
110
|
-
const content = await fileManager.readFile(agentPath);
|
|
111
|
-
const yamlContent = extractYamlFromAgent(content);
|
|
112
|
-
if (yamlContent) {
|
|
113
|
-
const metadata = yaml.load(yamlContent);
|
|
114
|
-
return metadata.agent_name || agentId;
|
|
115
|
-
}
|
|
116
|
-
} catch {
|
|
117
|
-
// Fallback to agent ID
|
|
118
|
-
}
|
|
119
|
-
return agentId;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Get installed expansion packs
|
|
124
|
-
*/
|
|
125
|
-
async getInstalledExpansionPacks(installDir) {
|
|
126
|
-
const cacheKey = `expansion-packs:${installDir}`;
|
|
127
|
-
if (this._pathCache.has(cacheKey)) {
|
|
128
|
-
return this._pathCache.get(cacheKey);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const expansionPacks = [];
|
|
132
|
-
|
|
133
|
-
// Check for dot-prefixed expansion packs
|
|
134
|
-
const dotExpansions = await resourceLocator.findFiles('.bmad-*', { cwd: installDir });
|
|
135
|
-
|
|
136
|
-
for (const dotExpansion of dotExpansions) {
|
|
137
|
-
if (dotExpansion !== '.bmad-core') {
|
|
138
|
-
const packPath = path.join(installDir, dotExpansion);
|
|
139
|
-
const packName = dotExpansion.slice(1); // remove the dot
|
|
140
|
-
expansionPacks.push({
|
|
141
|
-
name: packName,
|
|
142
|
-
path: packPath,
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Check other dot folders that have config.yaml
|
|
148
|
-
const allDotFolders = await resourceLocator.findFiles('.*', { cwd: installDir });
|
|
149
|
-
for (const folder of allDotFolders) {
|
|
150
|
-
if (!folder.startsWith('.bmad-') && folder !== '.bmad-core') {
|
|
151
|
-
const packPath = path.join(installDir, folder);
|
|
152
|
-
const configPath = path.join(packPath, 'config.yaml');
|
|
153
|
-
if (await fileManager.pathExists(configPath)) {
|
|
154
|
-
expansionPacks.push({
|
|
155
|
-
name: folder.slice(1), // remove the dot
|
|
156
|
-
path: packPath,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
this._pathCache.set(cacheKey, expansionPacks);
|
|
163
|
-
return expansionPacks;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Get expansion pack agents
|
|
168
|
-
*/
|
|
169
|
-
async getExpansionPackAgents(packPath) {
|
|
170
|
-
const agentsDir = path.join(packPath, 'agents');
|
|
171
|
-
if (!(await fileManager.pathExists(agentsDir))) {
|
|
172
|
-
return [];
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const agentFiles = await resourceLocator.findFiles('*.md', { cwd: agentsDir });
|
|
176
|
-
return agentFiles.map((file) => path.basename(file, '.md'));
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Create agent rule content (shared logic)
|
|
181
|
-
*/
|
|
182
|
-
async createAgentRuleContent(agentId, agentPath, installDir, format = 'mdc') {
|
|
183
|
-
const agentContent = await fileManager.readFile(agentPath);
|
|
184
|
-
const agentTitle = await this.getAgentTitle(agentId, installDir);
|
|
185
|
-
const yamlContent = extractYamlFromAgent(agentContent);
|
|
186
|
-
|
|
187
|
-
let content = '';
|
|
188
|
-
|
|
189
|
-
if (format === 'mdc') {
|
|
190
|
-
// MDC format for Cursor
|
|
191
|
-
content = '---\n';
|
|
192
|
-
content += 'description: \n';
|
|
193
|
-
content += 'globs: []\n';
|
|
194
|
-
content += 'alwaysApply: false\n';
|
|
195
|
-
content += '---\n\n';
|
|
196
|
-
content += `# ${agentId.toUpperCase()} Agent Rule\n\n`;
|
|
197
|
-
content += `This rule is triggered when the user types \`@${agentId}\` and activates the ${agentTitle} agent persona.\n\n`;
|
|
198
|
-
content += '## Agent Activation\n\n';
|
|
199
|
-
content +=
|
|
200
|
-
'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:\n\n';
|
|
201
|
-
content += '```yaml\n';
|
|
202
|
-
content += yamlContent || agentContent.replace(/^#.*$/m, '').trim();
|
|
203
|
-
content += '\n```\n\n';
|
|
204
|
-
content += '## File Reference\n\n';
|
|
205
|
-
const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
|
|
206
|
-
content += `The complete agent definition is available in [${relativePath}](mdc:${relativePath}).\n\n`;
|
|
207
|
-
content += '## Usage\n\n';
|
|
208
|
-
content += `When the user types \`@${agentId}\`, activate this ${agentTitle} persona and follow all instructions defined in the YAML configuration above.\n`;
|
|
209
|
-
} else if (format === 'claude') {
|
|
210
|
-
// Claude Code format
|
|
211
|
-
content = `# /${agentId} Command\n\n`;
|
|
212
|
-
content += `When this command is used, adopt the following agent persona:\n\n`;
|
|
213
|
-
content += agentContent;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return content;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Clear all caches
|
|
221
|
-
*/
|
|
222
|
-
clearCache() {
|
|
223
|
-
this._agentCache.clear();
|
|
224
|
-
this._pathCache.clear();
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
module.exports = BaseIdeSetup;
|