bmad-method 6.0.0-alpha.0 → 6.0.0-alpha.10
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/ISSUE_TEMPLATE/config.yaml +4 -0
- package/.github/ISSUE_TEMPLATE/idea_submission.md +3 -3
- package/.github/workflows/bundle-latest.yaml +277 -0
- package/.github/workflows/manual-release.yaml +64 -17
- package/.github/workflows/quality.yaml +78 -0
- package/.husky/pre-commit +4 -0
- package/.prettierignore +6 -0
- package/.vscode/settings.json +3 -1
- package/CHANGELOG.md +1211 -2
- package/CONTRIBUTING.md +2 -13
- package/README.md +442 -0
- package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/docs/agent-customization-guide.md +208 -0
- package/docs/document-sharding-guide.md +449 -0
- package/docs/ide-info/auggie.md +2 -2
- package/docs/ide-info/claude-code.md +4 -4
- package/docs/ide-info/codex.md +9 -20
- package/docs/ide-info/crush.md +1 -1
- package/docs/ide-info/cursor.md +7 -7
- package/docs/ide-info/iflow.md +3 -3
- package/docs/ide-info/opencode.md +24 -0
- package/docs/index.md +227 -0
- package/docs/installers-bundlers/ide-injections.md +2 -12
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +100 -67
- package/docs/v4-to-v6-upgrade.md +227 -0
- package/docs/web-bundles-gemini-gpt-guide.md +473 -0
- package/eslint.config.mjs +6 -2
- package/package.json +13 -6
- package/src/core/_module-installer/install-config.yaml +35 -0
- package/src/core/_module-installer/installer.js +1 -9
- package/src/core/agents/bmad-master.agent.yaml +39 -0
- package/src/core/agents/bmad-web-orchestrator.agent.xml +113 -0
- package/src/core/tasks/advanced-elicitation-methods.csv +21 -0
- package/src/core/tasks/{adv-elicit.md → advanced-elicitation.xml} +11 -14
- package/src/core/tasks/{index-docs.md → index-docs.xml} +6 -10
- package/src/core/tasks/{validate-workflow.md → validate-workflow.xml} +4 -7
- package/src/core/tasks/workflow.xml +270 -0
- package/src/core/tools/shard-doc.xml +109 -0
- package/src/{modules/cis → core}/workflows/brainstorming/README.md +8 -18
- package/src/{modules/cis → core}/workflows/brainstorming/instructions.md +29 -24
- package/src/{modules/cis → core}/workflows/brainstorming/template.md +6 -2
- package/src/{modules/cis → core}/workflows/brainstorming/workflow.yaml +17 -9
- package/src/core/workflows/party-mode/instructions.md +27 -25
- package/src/core/workflows/party-mode/workflow.yaml +14 -10
- package/src/modules/bmb/README.md +194 -0
- package/src/modules/bmb/_module-installer/install-config.yaml +31 -0
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +57 -0
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +142 -0
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +341 -0
- package/src/modules/bmb/workflows/audit-workflow/template.md +118 -0
- package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +25 -0
- package/src/modules/bmb/workflows/convert-legacy/README.md +34 -34
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +22 -21
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +135 -86
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +10 -15
- package/src/modules/bmb/workflows/create-agent/README.md +144 -209
- package/src/modules/bmb/workflows/create-agent/agent-architecture.md +68 -65
- package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +174 -172
- package/src/modules/bmb/workflows/create-agent/agent-types.md +139 -24
- package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +4 -4
- package/src/modules/bmb/workflows/create-agent/checklist.md +30 -102
- package/src/modules/bmb/workflows/create-agent/communication-styles.md +22 -60
- package/src/modules/bmb/workflows/create-agent/instructions.md +339 -221
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +28 -19
- package/src/modules/bmb/workflows/create-module/README.md +164 -153
- package/src/modules/bmb/workflows/create-module/brainstorm-context.md +1 -1
- package/src/modules/bmb/workflows/create-module/checklist.md +21 -31
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +92 -0
- package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +1 -1
- package/src/modules/bmb/workflows/create-module/instructions.md +306 -238
- package/src/modules/bmb/workflows/create-module/module-structure.md +135 -45
- package/src/modules/bmb/workflows/create-module/workflow.yaml +32 -27
- package/src/modules/bmb/workflows/create-workflow/README.md +70 -9
- package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/checklist.md +22 -0
- package/src/modules/bmb/workflows/create-workflow/instructions.md +505 -47
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +939 -68
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +6 -3
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +31 -5
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +16 -17
- package/src/modules/bmb/workflows/edit-agent/README.md +112 -0
- package/src/modules/bmb/workflows/edit-agent/checklist.md +112 -0
- package/src/modules/bmb/workflows/edit-agent/instructions.md +290 -0
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +33 -0
- package/src/modules/bmb/workflows/edit-module/README.md +187 -0
- package/src/modules/bmb/workflows/edit-module/checklist.md +165 -0
- package/src/modules/bmb/workflows/edit-module/instructions.md +341 -0
- package/src/modules/bmb/workflows/edit-module/workflow.yaml +34 -0
- package/src/modules/bmb/workflows/edit-workflow/README.md +58 -2
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +290 -118
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +9 -16
- package/src/modules/bmb/workflows/module-brief/README.md +17 -17
- package/src/modules/bmb/workflows/module-brief/checklist.md +6 -6
- package/src/modules/bmb/workflows/module-brief/instructions.md +10 -7
- package/src/modules/bmb/workflows/module-brief/template.md +9 -9
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +16 -10
- package/src/modules/bmb/workflows/redoc/README.md +5 -5
- package/src/modules/bmb/workflows/redoc/checklist.md +2 -2
- package/src/modules/bmb/workflows/redoc/instructions.md +20 -10
- package/src/modules/bmb/workflows/redoc/workflow.yaml +6 -5
- package/src/modules/bmgd/README.md +208 -0
- package/src/modules/bmgd/_module-installer/install-config.yaml +54 -0
- package/src/modules/bmgd/agents/game-architect.agent.yaml +33 -0
- package/src/modules/bmgd/agents/game-designer.agent.yaml +40 -0
- package/src/modules/bmgd/agents/game-dev.agent.yaml +40 -0
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +75 -0
- package/src/modules/bmgd/teams/default-party.csv +10 -0
- package/src/modules/bmgd/teams/team-gamedev.yaml +18 -0
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-context.md +3 -3
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +130 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +41 -0
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/checklist.md +2 -2
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +373 -0
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/template.md +2 -2
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +36 -0
- package/src/modules/bmgd/workflows/2-design/gdd/checklist.md +148 -0
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/action-platformer.md +1 -1
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/adventure.md +1 -1
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/card-game.md +2 -2
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/fighting.md +1 -1
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/horror.md +2 -2
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/idle-incremental.md +1 -1
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/moba.md +4 -4
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/party-game.md +1 -1
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/racing.md +3 -3
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/rhythm.md +1 -1
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/roguelike.md +2 -2
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/rpg.md +3 -3
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/sandbox.md +4 -4
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/shooter.md +3 -3
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/simulation.md +3 -3
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/sports.md +3 -3
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/strategy.md +3 -3
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/survival.md +2 -2
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/text-based.md +3 -3
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/tower-defense.md +5 -5
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/turn-based-tactics.md +4 -4
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/visual-novel.md +1 -1
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/gdd-template.md +6 -12
- package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +502 -0
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +81 -0
- package/src/modules/bmgd/workflows/2-design/narrative/checklist.md +139 -0
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/narrative/instructions-narrative.md +99 -12
- package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/narrative/narrative-template.md +8 -8
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +32 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +321 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-template.md +103 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +240 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/decision-catalog.yaml +222 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +701 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/pattern-categories.csv +13 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +69 -0
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +398 -0
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +61 -0
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +279 -0
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +206 -0
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +58 -0
- package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +240 -0
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +256 -0
- package/src/modules/bmgd/workflows/4-production/create-story/template.md +51 -0
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +74 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +38 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +267 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +58 -0
- package/src/modules/{bmm/workflows/3-solutioning/tech-spec → bmgd/workflows/4-production/epic-tech-context}/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +164 -0
- package/src/modules/{bmm/workflows/3-solutioning/tech-spec → bmgd/workflows/4-production/epic-tech-context}/template.md +1 -1
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +58 -0
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +1443 -0
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +57 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/checklist.md +33 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +234 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +51 -0
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +16 -0
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +34 -0
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +209 -0
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +63 -0
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +111 -0
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +28 -0
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +117 -0
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +25 -0
- package/src/modules/bmm/README.md +128 -0
- package/src/modules/bmm/_module-installer/install-config.yaml +60 -0
- package/src/modules/bmm/_module-installer/installer.js +3 -3
- package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +1 -1
- package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +1 -1
- package/src/modules/bmm/agents/analyst.agent.yaml +49 -0
- package/src/modules/bmm/agents/architect.agent.yaml +42 -0
- package/src/modules/bmm/agents/dev.agent.yaml +40 -0
- package/src/modules/bmm/agents/frame-expert.agent.yaml +42 -0
- package/src/modules/bmm/agents/pm.agent.yaml +64 -0
- package/src/modules/bmm/agents/sm.agent.yaml +73 -0
- package/src/modules/bmm/agents/tea.agent.yaml +67 -0
- package/src/modules/bmm/agents/tech-writer.agent.yaml +68 -0
- package/src/modules/bmm/agents/ux-designer.agent.yaml +39 -0
- package/src/modules/bmm/docs/README.md +236 -0
- package/src/modules/bmm/docs/agents-guide.md +1058 -0
- package/src/modules/bmm/docs/brownfield-guide.md +762 -0
- package/src/modules/bmm/docs/enterprise-agentic-development.md +686 -0
- package/src/modules/bmm/docs/faq.md +588 -0
- package/src/modules/bmm/docs/glossary.md +320 -0
- package/src/modules/bmm/docs/party-mode.md +224 -0
- package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
- package/src/modules/bmm/docs/quick-start.md +376 -0
- package/src/modules/bmm/docs/scale-adaptive-system.md +612 -0
- package/src/modules/bmm/docs/test-architecture.md +396 -0
- package/src/modules/bmm/docs/workflow-architecture-reference.md +366 -0
- package/src/modules/bmm/docs/workflow-document-project-reference.md +489 -0
- package/src/modules/bmm/docs/workflows-analysis.md +370 -0
- package/src/modules/bmm/docs/workflows-implementation.md +286 -0
- package/src/modules/bmm/docs/workflows-planning.md +612 -0
- package/src/modules/bmm/docs/workflows-solutioning.md +554 -0
- package/src/modules/bmm/teams/default-party.csv +20 -0
- package/src/modules/bmm/teams/team-fullstack.yaml +13 -0
- package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +675 -0
- package/src/modules/bmm/testarch/knowledge/component-tdd.md +486 -0
- package/src/modules/bmm/testarch/knowledge/contract-testing.md +957 -0
- package/src/modules/bmm/testarch/knowledge/data-factories.md +500 -0
- package/src/modules/bmm/testarch/knowledge/email-auth.md +721 -0
- package/src/modules/bmm/testarch/knowledge/error-handling.md +725 -0
- package/src/modules/bmm/testarch/knowledge/feature-flags.md +750 -0
- package/src/modules/bmm/testarch/knowledge/fixture-architecture.md +401 -0
- package/src/modules/bmm/testarch/knowledge/network-first.md +486 -0
- package/src/modules/bmm/testarch/knowledge/nfr-criteria.md +670 -0
- package/src/modules/bmm/testarch/knowledge/playwright-config.md +730 -0
- package/src/modules/bmm/testarch/knowledge/probability-impact.md +601 -0
- package/src/modules/bmm/testarch/knowledge/risk-governance.md +615 -0
- package/src/modules/bmm/testarch/knowledge/selective-testing.md +732 -0
- package/src/modules/bmm/testarch/knowledge/selector-resilience.md +527 -0
- package/src/modules/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
- package/src/modules/bmm/testarch/knowledge/test-levels-framework.md +473 -0
- package/src/modules/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/src/modules/bmm/testarch/knowledge/test-quality.md +664 -0
- package/src/modules/bmm/testarch/knowledge/timing-debugging.md +372 -0
- package/src/modules/bmm/testarch/knowledge/visual-debugging.md +524 -0
- package/src/modules/bmm/testarch/tea-index.csv +22 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +82 -8
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +4 -4
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +23 -5
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +425 -0
- package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +180 -0
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +56 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +418 -247
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +93 -77
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +42 -14
- package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +144 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +249 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +156 -59
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +115 -47
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +236 -114
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +109 -66
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +147 -55
- package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +38 -2
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +36 -1
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +36 -123
- package/src/modules/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md +80 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md +616 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-epics-and-stories/workflow.yaml +63 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +310 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +1308 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +145 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +93 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +346 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +703 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +204 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +11 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +78 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +217 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +74 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +436 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +980 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +181 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +90 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +60 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +321 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +103 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +240 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +222 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +768 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +13 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +100 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +169 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +332 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +146 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +64 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +12 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +22 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +398 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +61 -0
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +6 -6
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +70 -54
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +44 -21
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +240 -39
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +203 -28
- package/src/modules/bmm/workflows/4-implementation/create-story/template.md +2 -8
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +43 -42
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +220 -40
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +43 -38
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +17 -0
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +164 -0
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +76 -0
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +58 -0
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +1280 -228
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +41 -25
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +234 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +51 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +155 -22
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +43 -36
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +111 -0
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +28 -0
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +117 -0
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +25 -0
- package/src/modules/bmm/workflows/document-project/checklist.md +245 -0
- package/src/modules/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/src/modules/bmm/workflows/document-project/instructions.md +222 -0
- package/src/modules/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/src/modules/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/src/modules/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/src/modules/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/modules/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/src/modules/bmm/workflows/document-project/workflow.yaml +31 -0
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/src/modules/bmm/workflows/frame-expert/_shared/excalidraw-helpers.md +127 -0
- package/src/modules/bmm/workflows/frame-expert/_shared/excalidraw-library.json +90 -0
- package/src/modules/bmm/workflows/frame-expert/_shared/excalidraw-templates.yaml +127 -0
- package/src/modules/bmm/workflows/frame-expert/_shared/validate-json-instructions.md +79 -0
- package/src/modules/bmm/workflows/frame-expert/create-dataflow/checklist.md +39 -0
- package/src/modules/bmm/workflows/frame-expert/create-dataflow/instructions.md +131 -0
- package/src/modules/bmm/workflows/frame-expert/create-dataflow/workflow.yaml +24 -0
- package/src/modules/bmm/workflows/frame-expert/create-diagram/checklist.md +43 -0
- package/src/modules/bmm/workflows/frame-expert/create-diagram/instructions.md +142 -0
- package/src/modules/bmm/workflows/frame-expert/create-diagram/workflow.yaml +25 -0
- package/src/modules/bmm/workflows/frame-expert/create-flowchart/checklist.md +49 -0
- package/src/modules/bmm/workflows/frame-expert/create-flowchart/instructions.md +242 -0
- package/src/modules/bmm/workflows/frame-expert/create-flowchart/workflow.yaml +28 -0
- package/src/modules/bmm/workflows/frame-expert/create-wireframe/checklist.md +38 -0
- package/src/modules/bmm/workflows/frame-expert/create-wireframe/instructions.md +133 -0
- package/src/modules/bmm/workflows/frame-expert/create-wireframe/workflow.yaml +24 -0
- package/src/modules/bmm/workflows/techdoc/documentation-standards.md +262 -0
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
- package/src/modules/bmm/workflows/testarch/atdd/checklist.md +373 -0
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +785 -0
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
- package/src/modules/bmm/workflows/testarch/automate/checklist.md +580 -0
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +1303 -0
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +54 -0
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +246 -0
- package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +165 -0
- package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +128 -0
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +517 -0
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +47 -0
- package/src/modules/bmm/workflows/testarch/framework/checklist.md +321 -0
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +455 -0
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +49 -0
- package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +405 -0
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
- package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +443 -0
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
- package/src/modules/bmm/workflows/testarch/test-design/checklist.md +234 -0
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +782 -0
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +285 -0
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +50 -0
- package/src/modules/bmm/workflows/testarch/test-review/checklist.md +470 -0
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +608 -0
- package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +388 -0
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
- package/src/modules/bmm/workflows/testarch/trace/checklist.md +654 -0
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +1045 -0
- package/src/modules/bmm/workflows/testarch/trace/trace-template.md +673 -0
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +57 -0
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +334 -0
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +29 -0
- package/src/modules/bmm/workflows/workflow-status/instructions.md +388 -0
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +138 -0
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +126 -0
- package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +52 -0
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +122 -0
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +113 -0
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +58 -0
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +47 -0
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +59 -0
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -0
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +30 -0
- package/src/modules/cis/README.md +153 -0
- package/src/modules/cis/_module-installer/{install-menu-config.yaml → install-config.yaml} +6 -4
- package/src/modules/cis/_module-installer/installer.js +1 -1
- package/src/modules/cis/agents/README.md +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +28 -0
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +28 -0
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +28 -0
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +28 -0
- package/src/modules/cis/agents/storyteller.agent.yaml +28 -0
- package/src/modules/cis/teams/creative-squad.yaml +1 -0
- package/src/modules/cis/teams/default-party.csv +11 -0
- package/src/modules/cis/workflows/README.md +102 -30
- package/src/modules/cis/workflows/design-thinking/design-methods.csv +1 -1
- package/src/modules/cis/workflows/design-thinking/instructions.md +4 -2
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +16 -7
- package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +2 -2
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +7 -5
- package/src/modules/cis/workflows/innovation-strategy/template.md +6 -6
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +16 -7
- package/src/modules/cis/workflows/problem-solving/instructions.md +4 -2
- package/src/modules/cis/workflows/problem-solving/solving-methods.csv +6 -6
- package/src/modules/cis/workflows/problem-solving/template.md +3 -3
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +16 -7
- package/src/modules/cis/workflows/storytelling/instructions.md +48 -30
- package/src/modules/cis/workflows/storytelling/template.md +2 -2
- package/src/modules/cis/workflows/storytelling/workflow.yaml +16 -7
- package/src/utility/models/action-command-header.md +0 -0
- package/src/utility/models/agent-activation-ide.xml +4 -4
- package/src/utility/models/agent-activation-web.xml +60 -0
- package/src/utility/models/agent-command-header.md +1 -0
- package/src/utility/models/agent-in-team-activation.xml +3 -0
- package/src/utility/models/fragments/activation-rules.xml +8 -0
- package/src/utility/models/fragments/activation-steps.xml +16 -0
- package/src/utility/models/fragments/handler-action.xml +4 -0
- package/src/utility/models/fragments/handler-data.xml +5 -0
- package/src/utility/models/fragments/handler-exec.xml +5 -0
- package/src/utility/models/fragments/handler-tmpl.xml +5 -0
- package/src/utility/models/fragments/handler-validate-workflow.xml +7 -0
- package/src/utility/models/fragments/handler-workflow.xml +9 -0
- package/src/utility/models/fragments/menu-handlers.xml +6 -0
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +32 -0
- package/src/utility/templates/agent.customize.template.yaml +42 -0
- package/test/README.md +295 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +29 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +21 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +21 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +26 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +21 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +39 -0
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +33 -0
- package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +21 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +27 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +29 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +23 -0
- package/test/test-agent-schema.js +387 -0
- package/test/test-cli-integration.sh +159 -0
- package/test/test-installation-components.js +214 -0
- package/test/unit-test-schema.js +133 -0
- package/tools/bmad-npx-wrapper.js +38 -0
- package/tools/cli/README.md +608 -0
- package/tools/cli/bmad-cli.js +0 -2
- package/tools/cli/bundlers/bundle-web.js +24 -2
- package/tools/cli/bundlers/test-bundler.js +1 -1
- package/tools/cli/bundlers/web-bundler.js +944 -49
- package/tools/cli/commands/build.js +458 -0
- package/tools/cli/commands/install.js +46 -8
- package/tools/cli/installers/lib/core/config-collector.js +490 -43
- package/tools/cli/installers/lib/core/dependency-resolver.js +5 -1
- package/tools/cli/installers/lib/core/detector.js +134 -13
- package/tools/cli/installers/lib/core/ide-config-manager.js +154 -0
- package/tools/cli/installers/lib/core/installer.js +1365 -167
- package/tools/cli/installers/lib/core/manifest-generator.js +388 -81
- package/tools/cli/installers/lib/core/manifest.js +100 -44
- package/tools/cli/installers/lib/ide/_base-ide.js +368 -23
- package/tools/cli/installers/lib/ide/auggie.js +100 -192
- package/tools/cli/installers/lib/ide/claude-code.js +167 -321
- package/tools/cli/installers/lib/ide/cline.js +146 -227
- package/tools/cli/installers/lib/ide/codex.js +138 -202
- package/tools/cli/installers/lib/ide/crush.js +108 -72
- package/tools/cli/installers/lib/ide/cursor.js +148 -20
- package/tools/cli/installers/lib/ide/gemini.js +109 -63
- package/tools/cli/installers/lib/ide/github-copilot.js +60 -47
- package/tools/cli/installers/lib/ide/iflow.js +13 -30
- package/tools/cli/installers/lib/ide/kilo.js +20 -16
- package/tools/cli/installers/lib/ide/manager.js +41 -35
- package/tools/cli/installers/lib/ide/opencode.js +212 -0
- package/tools/cli/installers/lib/ide/qwen.js +198 -68
- package/tools/cli/installers/lib/ide/roo.js +27 -62
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +90 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +143 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +133 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +119 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +237 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
- package/tools/cli/installers/lib/ide/{workflow-command-template.md → templates/workflow-command-template.md} +7 -5
- package/tools/cli/installers/lib/ide/trae.js +138 -54
- package/tools/cli/installers/lib/ide/windsurf.js +104 -42
- package/tools/cli/installers/lib/modules/manager.js +332 -10
- package/tools/cli/lib/activation-builder.js +168 -0
- package/tools/cli/lib/agent-analyzer.js +81 -0
- package/tools/cli/lib/agent-party-generator.js +3 -3
- package/tools/cli/lib/cli-utils.js +52 -50
- package/tools/cli/lib/config.js +3 -1
- package/tools/cli/lib/ui.js +106 -14
- package/tools/cli/lib/xml-handler.js +47 -1
- package/tools/cli/lib/yaml-format.js +2 -1
- package/tools/cli/lib/yaml-xml-builder.js +507 -0
- package/tools/cli/regenerate-manifests.js +1 -1
- package/tools/cli/test-yaml-builder.js +43 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/platform-codes.yaml +6 -0
- package/tools/schema/agent.js +240 -0
- package/tools/validate-agent-schema.js +110 -0
- package/v6-open-items.md +17 -0
- package/.github/workflows/format-check.yaml +0 -43
- package/docs/codebase-flattener.md +0 -19
- package/readme.md +0 -216
- package/src/core/_module-installer/install-menu-config.yaml +0 -24
- package/src/core/agents/bmad-master.md +0 -27
- package/src/core/agents/bmad-web-orchestrator.md +0 -71
- package/src/core/tasks/shard-doc.md +0 -57
- package/src/core/tasks/workflow.md +0 -141
- package/src/core/workflows/bmad-init/instructions.md +0 -79
- package/src/core/workflows/bmad-init/workflow.yaml +0 -24
- package/src/modules/bmb/_module-installer/install-menu-config.yaml +0 -16
- package/src/modules/bmb/agents/bmad-builder.md +0 -30
- package/src/modules/bmb/workflows/create-module/installer-templates/install-module-config.yaml +0 -132
- package/src/modules/bmm/_module-installer/install-menu-config.yaml +0 -49
- package/src/modules/bmm/agents/analyst.md +0 -26
- package/src/modules/bmm/agents/architect.md +0 -29
- package/src/modules/bmm/agents/dev.md +0 -61
- package/src/modules/bmm/agents/game-architect.md +0 -26
- package/src/modules/bmm/agents/game-designer.md +0 -27
- package/src/modules/bmm/agents/game-dev.md +0 -28
- package/src/modules/bmm/agents/pm.md +0 -26
- package/src/modules/bmm/agents/po.md +0 -25
- package/src/modules/bmm/agents/sm.md +0 -29
- package/src/modules/bmm/agents/tea.md +0 -32
- package/src/modules/bmm/agents/ux-expert.md +0 -24
- package/src/modules/bmm/sub-modules/claude-code/config.yaml +0 -5
- package/src/modules/bmm/sub-modules/claude-code/injections.yaml +0 -242
- package/src/modules/bmm/sub-modules/claude-code/readme.md +0 -87
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/api-documenter.md +0 -85
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/codebase-analyzer.md +0 -64
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/data-analyst.md +0 -84
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/dependency-mapper.md +0 -67
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/document-reviewer.md +0 -85
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/epic-optimizer.md +0 -66
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/market-researcher.md +0 -34
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/pattern-detector.md +0 -67
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/requirements-analyst.md +0 -61
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/tech-debt-auditor.md +0 -89
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/technical-decisions-curator.md +0 -146
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/technical-evaluator.md +0 -51
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/test-coverage-analyzer.md +0 -91
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/trend-spotter.md +0 -99
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/user-journey-mapper.md +0 -101
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/user-researcher.md +0 -56
- package/src/modules/bmm/tasks/daily-standup.md +0 -91
- package/src/modules/bmm/tasks/retrospective.md +0 -110
- package/src/modules/bmm/teams/team-all.yaml +0 -7
- package/src/modules/bmm/teams/team-dev.yaml +0 -14
- package/src/modules/bmm/teams/team-gamedev.yaml +0 -9
- package/src/modules/bmm/testarch/atdd.md +0 -40
- package/src/modules/bmm/testarch/automate.md +0 -38
- package/src/modules/bmm/testarch/ci.md +0 -39
- package/src/modules/bmm/testarch/framework.md +0 -41
- package/src/modules/bmm/testarch/nfr-assess.md +0 -38
- package/src/modules/bmm/testarch/risk-profile.md +0 -38
- package/src/modules/bmm/testarch/tea-commands.csv +0 -11
- package/src/modules/bmm/testarch/tea-gate.md +0 -38
- package/src/modules/bmm/testarch/tea-knowledge.md +0 -275
- package/src/modules/bmm/testarch/test-design.md +0 -39
- package/src/modules/bmm/testarch/test-levels-framework.md +0 -148
- package/src/modules/bmm/testarch/test-priorities-matrix.md +0 -174
- package/src/modules/bmm/testarch/trace-requirements.md +0 -38
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +0 -47
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/workflow.yaml +0 -22
- package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +0 -221
- package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +0 -517
- package/src/modules/bmm/workflows/1-analysis/game-brief/workflow.yaml +0 -34
- package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +0 -180
- package/src/modules/bmm/workflows/1-analysis/research/README.md +0 -454
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +0 -259
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-data-analyst.md +0 -190
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +0 -337
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +0 -107
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-user-researcher.md +0 -329
- package/src/modules/bmm/workflows/2-plan/README.md +0 -203
- package/src/modules/bmm/workflows/2-plan/checklist.md +0 -369
- package/src/modules/bmm/workflows/2-plan/gdd/README.md +0 -222
- package/src/modules/bmm/workflows/2-plan/gdd/instructions-gdd.md +0 -480
- package/src/modules/bmm/workflows/2-plan/instructions-router.md +0 -222
- package/src/modules/bmm/workflows/2-plan/prd/analysis-template.md +0 -53
- package/src/modules/bmm/workflows/2-plan/prd/epics-template.md +0 -18
- package/src/modules/bmm/workflows/2-plan/prd/instructions-lg.md +0 -267
- package/src/modules/bmm/workflows/2-plan/prd/instructions-med.md +0 -251
- package/src/modules/bmm/workflows/2-plan/prd/prd-template.md +0 -73
- package/src/modules/bmm/workflows/2-plan/tech-spec/instructions-sm.md +0 -137
- package/src/modules/bmm/workflows/2-plan/tech-spec/tech-spec-template.md +0 -59
- package/src/modules/bmm/workflows/2-plan/ux/instructions-ux.md +0 -360
- package/src/modules/bmm/workflows/2-plan/ux/ux-spec-template.md +0 -162
- package/src/modules/bmm/workflows/2-plan/workflow.yaml +0 -60
- package/src/modules/bmm/workflows/3-solutioning/ADR-template.md +0 -74
- package/src/modules/bmm/workflows/3-solutioning/README.md +0 -565
- package/src/modules/bmm/workflows/3-solutioning/checklist.md +0 -170
- package/src/modules/bmm/workflows/3-solutioning/instructions.md +0 -661
- package/src/modules/bmm/workflows/3-solutioning/project-types/backend-questions.md +0 -490
- package/src/modules/bmm/workflows/3-solutioning/project-types/cli-questions.md +0 -337
- package/src/modules/bmm/workflows/3-solutioning/project-types/data-questions.md +0 -472
- package/src/modules/bmm/workflows/3-solutioning/project-types/desktop-questions.md +0 -299
- package/src/modules/bmm/workflows/3-solutioning/project-types/embedded-questions.md +0 -118
- package/src/modules/bmm/workflows/3-solutioning/project-types/extension-questions.md +0 -374
- package/src/modules/bmm/workflows/3-solutioning/project-types/game-questions.md +0 -133
- package/src/modules/bmm/workflows/3-solutioning/project-types/infra-questions.md +0 -484
- package/src/modules/bmm/workflows/3-solutioning/project-types/library-questions.md +0 -146
- package/src/modules/bmm/workflows/3-solutioning/project-types/mobile-questions.md +0 -110
- package/src/modules/bmm/workflows/3-solutioning/project-types/project-types.csv +0 -12
- package/src/modules/bmm/workflows/3-solutioning/project-types/web-questions.md +0 -136
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/README.md +0 -195
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/instructions.md +0 -73
- package/src/modules/bmm/workflows/3-solutioning/tech-spec/workflow.yaml +0 -51
- package/src/modules/bmm/workflows/3-solutioning/templates/backend-service-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/cli-tool-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/data-pipeline-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/desktop-app-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/embedded-firmware-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-architecture.md +0 -244
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-godot-guide.md +0 -428
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-unity-guide.md +0 -333
- package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-web-guide.md +0 -528
- package/src/modules/bmm/workflows/3-solutioning/templates/infrastructure-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/library-package-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/mobile-app-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/registry.csv +0 -172
- package/src/modules/bmm/workflows/3-solutioning/templates/web-api-architecture.md +0 -66
- package/src/modules/bmm/workflows/3-solutioning/templates/web-fullstack-architecture.md +0 -277
- package/src/modules/bmm/workflows/3-solutioning/workflow.yaml +0 -65
- package/src/modules/bmm/workflows/4-implementation/create-story/README.md +0 -42
- package/src/modules/bmm/workflows/4-implementation/dev-story/README.md +0 -84
- package/src/modules/bmm/workflows/4-implementation/review-story/README.md +0 -72
- package/src/modules/bmm/workflows/4-implementation/review-story/instructions.md +0 -176
- package/src/modules/bmm/workflows/4-implementation/review-story/workflow.yaml +0 -99
- package/src/modules/bmm/workflows/4-implementation/story-context/README.md +0 -234
- package/src/modules/cis/agents/brainstorming-coach.md +0 -24
- package/src/modules/cis/agents/creative-problem-solver.md +0 -24
- package/src/modules/cis/agents/design-thinking-coach.md +0 -24
- package/src/modules/cis/agents/innovation-strategist.md +0 -24
- package/src/modules/cis/agents/storyteller.md +0 -24
- package/src/modules/cis/readme.md +0 -86
- package/tools/cli/installers/lib/ide/workflow-command-generator.js +0 -162
- package/tools/test-agents/captain-kirk-commander.md +0 -110
- package/tools/test-agents/data-operations-android.md +0 -123
- package/tools/test-agents/geordi-chief-engineer.md +0 -135
- package/tools/test-agents/isabella-martinez-ethicist.md +0 -109
- package/tools/test-agents/marcus-thompson-security.md +0 -109
- package/tools/test-agents/maya-patel-pragmatist.md +0 -82
- package/tools/test-agents/picard-diplomat-captain.md +0 -134
- package/tools/test-agents/spock-science-officer.md +0 -124
- package/tools/test-agents/william-smithers-technocrat.md +0 -71
- package/tools/test-agents/zara-chen-designer.md +0 -94
- /package/src/{modules/cis → core}/workflows/brainstorming/brain-methods.csv +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-brain-methods.csv +0 -0
- /package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/metroidvania.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types/puzzle.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan → bmgd/workflows/2-design}/gdd/game-types.csv +0 -0
- /package/src/modules/{bmm/workflows/4-implementation/review-story → bmgd/workflows/4-production/code-review}/backlog_template.md +0 -0
- /package/src/modules/{bmm/workflows/4-implementation/review-story → bmgd/workflows/4-production/code-review}/checklist.md +0 -0
- /package/src/modules/bmm/_module-installer/assets/{technical-decisions-template.md → technical-decisions.md} +0 -0
|
@@ -26,6 +26,70 @@ class ModuleManager {
|
|
|
26
26
|
// Path to source modules directory
|
|
27
27
|
this.modulesSourcePath = getSourcePath('modules');
|
|
28
28
|
this.xmlHandler = new XmlHandler();
|
|
29
|
+
this.bmadFolderName = 'bmad'; // Default, can be overridden
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Set the bmad folder name for placeholder replacement
|
|
34
|
+
* @param {string} bmadFolderName - The bmad folder name
|
|
35
|
+
*/
|
|
36
|
+
setBmadFolderName(bmadFolderName) {
|
|
37
|
+
this.bmadFolderName = bmadFolderName;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Copy a file and replace {bmad_folder} placeholder with actual folder name
|
|
42
|
+
* @param {string} sourcePath - Source file path
|
|
43
|
+
* @param {string} targetPath - Target file path
|
|
44
|
+
*/
|
|
45
|
+
async copyFileWithPlaceholderReplacement(sourcePath, targetPath) {
|
|
46
|
+
// List of text file extensions that should have placeholder replacement
|
|
47
|
+
const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json', '.js', '.ts', '.html', '.css', '.sh', '.bat', '.csv'];
|
|
48
|
+
const ext = path.extname(sourcePath).toLowerCase();
|
|
49
|
+
|
|
50
|
+
// Check if this is a text file that might contain placeholders
|
|
51
|
+
if (textExtensions.includes(ext)) {
|
|
52
|
+
try {
|
|
53
|
+
// Read the file content
|
|
54
|
+
let content = await fs.readFile(sourcePath, 'utf8');
|
|
55
|
+
|
|
56
|
+
// Replace {bmad_folder} placeholder with actual folder name
|
|
57
|
+
if (content.includes('{bmad_folder}')) {
|
|
58
|
+
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Write to target with replaced content
|
|
62
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
63
|
+
await fs.writeFile(targetPath, content, 'utf8');
|
|
64
|
+
} catch {
|
|
65
|
+
// If reading as text fails (might be binary despite extension), fall back to regular copy
|
|
66
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
// Binary file or other file type - just copy directly
|
|
70
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Copy a directory recursively with placeholder replacement
|
|
76
|
+
* @param {string} sourceDir - Source directory path
|
|
77
|
+
* @param {string} targetDir - Target directory path
|
|
78
|
+
*/
|
|
79
|
+
async copyDirectoryWithPlaceholderReplacement(sourceDir, targetDir) {
|
|
80
|
+
await fs.ensureDir(targetDir);
|
|
81
|
+
const entries = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
82
|
+
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
const sourcePath = path.join(sourceDir, entry.name);
|
|
85
|
+
const targetPath = path.join(targetDir, entry.name);
|
|
86
|
+
|
|
87
|
+
if (entry.isDirectory()) {
|
|
88
|
+
await this.copyDirectoryWithPlaceholderReplacement(sourcePath, targetPath);
|
|
89
|
+
} else {
|
|
90
|
+
await this.copyFileWithPlaceholderReplacement(sourcePath, targetPath);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
29
93
|
}
|
|
30
94
|
|
|
31
95
|
/**
|
|
@@ -46,7 +110,7 @@ class ModuleManager {
|
|
|
46
110
|
if (entry.isDirectory()) {
|
|
47
111
|
const modulePath = path.join(this.modulesSourcePath, entry.name);
|
|
48
112
|
// Check for new structure first
|
|
49
|
-
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-
|
|
113
|
+
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
|
|
50
114
|
// Fallback to old structure
|
|
51
115
|
const configPath = path.join(modulePath, 'config.yaml');
|
|
52
116
|
|
|
@@ -112,8 +176,12 @@ class ModuleManager {
|
|
|
112
176
|
await fs.remove(targetPath);
|
|
113
177
|
}
|
|
114
178
|
|
|
179
|
+
// Vendor cross-module workflows BEFORE copying
|
|
180
|
+
// This reads source agent.yaml files and copies referenced workflows
|
|
181
|
+
await this.vendorCrossModuleWorkflows(sourcePath, targetPath, moduleName);
|
|
182
|
+
|
|
115
183
|
// Copy module files with filtering
|
|
116
|
-
await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback);
|
|
184
|
+
await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback, options.moduleConfig);
|
|
117
185
|
|
|
118
186
|
// Process agent files to inject activation block
|
|
119
187
|
await this.processAgentFiles(targetPath, moduleName);
|
|
@@ -231,14 +299,26 @@ class ModuleManager {
|
|
|
231
299
|
}
|
|
232
300
|
|
|
233
301
|
/**
|
|
234
|
-
* Copy module with filtering for localskip agents
|
|
302
|
+
* Copy module with filtering for localskip agents and conditional content
|
|
235
303
|
* @param {string} sourcePath - Source module path
|
|
236
304
|
* @param {string} targetPath - Target module path
|
|
305
|
+
* @param {Function} fileTrackingCallback - Optional callback to track installed files
|
|
306
|
+
* @param {Object} moduleConfig - Module configuration with conditional flags
|
|
237
307
|
*/
|
|
238
|
-
async copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback = null) {
|
|
308
|
+
async copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback = null, moduleConfig = {}) {
|
|
239
309
|
// Get all files in source
|
|
240
310
|
const sourceFiles = await this.getFileList(sourcePath);
|
|
241
311
|
|
|
312
|
+
// Game development files to conditionally exclude
|
|
313
|
+
const gameDevFiles = [
|
|
314
|
+
'agents/game-architect.agent.yaml',
|
|
315
|
+
'agents/game-designer.agent.yaml',
|
|
316
|
+
'agents/game-dev.agent.yaml',
|
|
317
|
+
'workflows/1-analysis/brainstorm-game',
|
|
318
|
+
'workflows/1-analysis/game-brief',
|
|
319
|
+
'workflows/2-plan-workflows/gdd',
|
|
320
|
+
];
|
|
321
|
+
|
|
242
322
|
for (const file of sourceFiles) {
|
|
243
323
|
// Skip sub-modules directory - these are IDE-specific and handled separately
|
|
244
324
|
if (file.startsWith('sub-modules/')) {
|
|
@@ -255,6 +335,25 @@ class ModuleManager {
|
|
|
255
335
|
continue;
|
|
256
336
|
}
|
|
257
337
|
|
|
338
|
+
// Skip user documentation if install_user_docs is false
|
|
339
|
+
if (moduleConfig.install_user_docs === false && (file.startsWith('docs/') || file.startsWith('docs\\'))) {
|
|
340
|
+
console.log(chalk.dim(` Skipping user documentation: ${file}`));
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// Skip game development content if include_game_planning is false
|
|
345
|
+
if (moduleConfig.include_game_planning === false) {
|
|
346
|
+
const shouldSkipGameDev = gameDevFiles.some((gamePath) => {
|
|
347
|
+
// Check if file path starts with or is within any game dev directory
|
|
348
|
+
return file === gamePath || file.startsWith(gamePath + '/') || file.startsWith(gamePath + '\\');
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
if (shouldSkipGameDev) {
|
|
352
|
+
console.log(chalk.dim(` Skipping game dev content: ${file}`));
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
258
357
|
const sourceFile = path.join(sourcePath, file);
|
|
259
358
|
const targetFile = path.join(targetPath, file);
|
|
260
359
|
|
|
@@ -271,9 +370,14 @@ class ModuleManager {
|
|
|
271
370
|
}
|
|
272
371
|
}
|
|
273
372
|
|
|
274
|
-
//
|
|
275
|
-
|
|
276
|
-
|
|
373
|
+
// Check if this is a workflow.yaml file
|
|
374
|
+
if (file.endsWith('workflow.yaml')) {
|
|
375
|
+
await fs.ensureDir(path.dirname(targetFile));
|
|
376
|
+
await this.copyWorkflowYamlStripped(sourceFile, targetFile);
|
|
377
|
+
} else {
|
|
378
|
+
// Copy the file with placeholder replacement
|
|
379
|
+
await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile);
|
|
380
|
+
}
|
|
277
381
|
|
|
278
382
|
// Track the file if callback provided
|
|
279
383
|
if (fileTrackingCallback) {
|
|
@@ -282,6 +386,96 @@ class ModuleManager {
|
|
|
282
386
|
}
|
|
283
387
|
}
|
|
284
388
|
|
|
389
|
+
/**
|
|
390
|
+
* Copy workflow.yaml file with web_bundle section stripped
|
|
391
|
+
* Preserves comments, formatting, and line breaks
|
|
392
|
+
* @param {string} sourceFile - Source workflow.yaml file path
|
|
393
|
+
* @param {string} targetFile - Target workflow.yaml file path
|
|
394
|
+
*/
|
|
395
|
+
async copyWorkflowYamlStripped(sourceFile, targetFile) {
|
|
396
|
+
// Read the source YAML file
|
|
397
|
+
let yamlContent = await fs.readFile(sourceFile, 'utf8');
|
|
398
|
+
|
|
399
|
+
// IMPORTANT: Replace {bmad_folder} BEFORE parsing YAML
|
|
400
|
+
// Otherwise parsing will fail on the placeholder
|
|
401
|
+
yamlContent = yamlContent.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
402
|
+
|
|
403
|
+
try {
|
|
404
|
+
// First check if web_bundle exists by parsing
|
|
405
|
+
const workflowConfig = yaml.load(yamlContent);
|
|
406
|
+
|
|
407
|
+
if (workflowConfig.web_bundle === undefined) {
|
|
408
|
+
// No web_bundle section, just write (placeholders already replaced above)
|
|
409
|
+
await fs.writeFile(targetFile, yamlContent, 'utf8');
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Remove web_bundle section using regex to preserve formatting
|
|
414
|
+
// Match the web_bundle key and all its content (including nested items)
|
|
415
|
+
// This handles both web_bundle: false and web_bundle: {...}
|
|
416
|
+
|
|
417
|
+
// Find the line that starts web_bundle
|
|
418
|
+
const lines = yamlContent.split('\n');
|
|
419
|
+
let startIdx = -1;
|
|
420
|
+
let endIdx = -1;
|
|
421
|
+
let baseIndent = 0;
|
|
422
|
+
|
|
423
|
+
// Find the start of web_bundle section
|
|
424
|
+
for (const [i, line] of lines.entries()) {
|
|
425
|
+
const match = line.match(/^(\s*)web_bundle:/);
|
|
426
|
+
if (match) {
|
|
427
|
+
startIdx = i;
|
|
428
|
+
baseIndent = match[1].length;
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
if (startIdx === -1) {
|
|
434
|
+
// web_bundle not found in text (shouldn't happen), copy as-is
|
|
435
|
+
await fs.writeFile(targetFile, yamlContent, 'utf8');
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// Find the end of web_bundle section
|
|
440
|
+
// It ends when we find a line with same or less indentation that's not empty/comment
|
|
441
|
+
endIdx = startIdx;
|
|
442
|
+
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
443
|
+
const line = lines[i];
|
|
444
|
+
|
|
445
|
+
// Skip empty lines and comments
|
|
446
|
+
if (line.trim() === '' || line.trim().startsWith('#')) {
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Check indentation
|
|
451
|
+
const indent = line.match(/^(\s*)/)[1].length;
|
|
452
|
+
if (indent <= baseIndent) {
|
|
453
|
+
// Found next section at same or lower indentation
|
|
454
|
+
endIdx = i - 1;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// If we didn't find an end, it goes to end of file
|
|
460
|
+
if (endIdx === startIdx) {
|
|
461
|
+
endIdx = lines.length - 1;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Remove the web_bundle section (including the line before if it's just a blank line)
|
|
465
|
+
const newLines = [...lines.slice(0, startIdx), ...lines.slice(endIdx + 1)];
|
|
466
|
+
|
|
467
|
+
// Clean up any double blank lines that might result
|
|
468
|
+
const strippedYaml = newLines.join('\n').replaceAll(/\n\n\n+/g, '\n\n');
|
|
469
|
+
|
|
470
|
+
// Placeholders already replaced at the beginning of this function
|
|
471
|
+
await fs.writeFile(targetFile, strippedYaml, 'utf8');
|
|
472
|
+
} catch {
|
|
473
|
+
// If anything fails, just copy the file as-is
|
|
474
|
+
console.warn(chalk.yellow(` Warning: Could not process ${path.basename(sourceFile)}, copying as-is`));
|
|
475
|
+
await fs.copy(sourceFile, targetFile, { overwrite: true });
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
285
479
|
/**
|
|
286
480
|
* Process agent files to inject activation block
|
|
287
481
|
* @param {string} modulePath - Path to installed module
|
|
@@ -313,6 +507,135 @@ class ModuleManager {
|
|
|
313
507
|
}
|
|
314
508
|
}
|
|
315
509
|
|
|
510
|
+
/**
|
|
511
|
+
* Vendor cross-module workflows referenced in agent files
|
|
512
|
+
* Scans SOURCE agent.yaml files for workflow-install and copies workflows to destination
|
|
513
|
+
* @param {string} sourcePath - Source module path
|
|
514
|
+
* @param {string} targetPath - Target module path (destination)
|
|
515
|
+
* @param {string} moduleName - Module name being installed
|
|
516
|
+
*/
|
|
517
|
+
async vendorCrossModuleWorkflows(sourcePath, targetPath, moduleName) {
|
|
518
|
+
const sourceAgentsPath = path.join(sourcePath, 'agents');
|
|
519
|
+
|
|
520
|
+
// Check if source agents directory exists
|
|
521
|
+
if (!(await fs.pathExists(sourceAgentsPath))) {
|
|
522
|
+
return; // No agents to process
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
// Get all agent YAML files from source
|
|
526
|
+
const agentFiles = await fs.readdir(sourceAgentsPath);
|
|
527
|
+
const yamlFiles = agentFiles.filter((f) => f.endsWith('.agent.yaml') || f.endsWith('.yaml'));
|
|
528
|
+
|
|
529
|
+
if (yamlFiles.length === 0) {
|
|
530
|
+
return; // No YAML agent files
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
let workflowsVendored = false;
|
|
534
|
+
|
|
535
|
+
for (const agentFile of yamlFiles) {
|
|
536
|
+
const agentPath = path.join(sourceAgentsPath, agentFile);
|
|
537
|
+
const agentYaml = yaml.load(await fs.readFile(agentPath, 'utf8'));
|
|
538
|
+
|
|
539
|
+
// Check if agent has menu items with workflow-install
|
|
540
|
+
const menuItems = agentYaml?.agent?.menu || [];
|
|
541
|
+
const workflowInstallItems = menuItems.filter((item) => item['workflow-install']);
|
|
542
|
+
|
|
543
|
+
if (workflowInstallItems.length === 0) {
|
|
544
|
+
continue; // No workflow-install in this agent
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
if (!workflowsVendored) {
|
|
548
|
+
console.log(chalk.cyan(`\n Vendoring cross-module workflows for ${moduleName}...`));
|
|
549
|
+
workflowsVendored = true;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
console.log(chalk.dim(` Processing: ${agentFile}`));
|
|
553
|
+
|
|
554
|
+
for (const item of workflowInstallItems) {
|
|
555
|
+
const sourceWorkflowPath = item.workflow; // Where to copy FROM
|
|
556
|
+
const installWorkflowPath = item['workflow-install']; // Where to copy TO
|
|
557
|
+
|
|
558
|
+
// Parse SOURCE workflow path
|
|
559
|
+
// Handle both {bmad_folder} placeholder and hardcoded 'bmad'
|
|
560
|
+
// Example: {project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml
|
|
561
|
+
// Or: {project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
|
|
562
|
+
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
563
|
+
if (!sourceMatch) {
|
|
564
|
+
console.warn(chalk.yellow(` Could not parse workflow path: ${sourceWorkflowPath}`));
|
|
565
|
+
continue;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
const [, sourceModule, sourceWorkflowSubPath] = sourceMatch;
|
|
569
|
+
|
|
570
|
+
// Parse INSTALL workflow path
|
|
571
|
+
// Handle both {bmad_folder} placeholder and hardcoded 'bmad'
|
|
572
|
+
// Example: {project-root}/{bmad_folder}/bmgd/workflows/4-production/create-story/workflow.yaml
|
|
573
|
+
const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
574
|
+
if (!installMatch) {
|
|
575
|
+
console.warn(chalk.yellow(` Could not parse workflow-install path: ${installWorkflowPath}`));
|
|
576
|
+
continue;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
const installWorkflowSubPath = installMatch[2];
|
|
580
|
+
|
|
581
|
+
// Determine actual filesystem paths
|
|
582
|
+
const sourceModulePath = path.join(this.modulesSourcePath, sourceModule);
|
|
583
|
+
const actualSourceWorkflowPath = path.join(sourceModulePath, 'workflows', sourceWorkflowSubPath.replace(/\/workflow\.yaml$/, ''));
|
|
584
|
+
|
|
585
|
+
const actualDestWorkflowPath = path.join(targetPath, 'workflows', installWorkflowSubPath.replace(/\/workflow\.yaml$/, ''));
|
|
586
|
+
|
|
587
|
+
// Check if source workflow exists
|
|
588
|
+
if (!(await fs.pathExists(actualSourceWorkflowPath))) {
|
|
589
|
+
console.warn(chalk.yellow(` Source workflow not found: ${actualSourceWorkflowPath}`));
|
|
590
|
+
continue;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
// Copy the entire workflow folder
|
|
594
|
+
console.log(
|
|
595
|
+
chalk.dim(
|
|
596
|
+
` Vendoring: ${sourceModule}/workflows/${sourceWorkflowSubPath.replace(/\/workflow\.yaml$/, '')} → ${moduleName}/workflows/${installWorkflowSubPath.replace(/\/workflow\.yaml$/, '')}`,
|
|
597
|
+
),
|
|
598
|
+
);
|
|
599
|
+
|
|
600
|
+
await fs.ensureDir(path.dirname(actualDestWorkflowPath));
|
|
601
|
+
// Copy the workflow directory recursively with placeholder replacement
|
|
602
|
+
await this.copyDirectoryWithPlaceholderReplacement(actualSourceWorkflowPath, actualDestWorkflowPath);
|
|
603
|
+
|
|
604
|
+
// Update the workflow.yaml config_source reference
|
|
605
|
+
const workflowYamlPath = path.join(actualDestWorkflowPath, 'workflow.yaml');
|
|
606
|
+
if (await fs.pathExists(workflowYamlPath)) {
|
|
607
|
+
await this.updateWorkflowConfigSource(workflowYamlPath, moduleName);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
if (workflowsVendored) {
|
|
613
|
+
console.log(chalk.green(` ✓ Workflow vendoring complete\n`));
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/**
|
|
618
|
+
* Update workflow.yaml config_source to point to new module
|
|
619
|
+
* @param {string} workflowYamlPath - Path to workflow.yaml file
|
|
620
|
+
* @param {string} newModuleName - New module name to reference
|
|
621
|
+
*/
|
|
622
|
+
async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
|
|
623
|
+
let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
|
|
624
|
+
|
|
625
|
+
// Replace config_source: "{project-root}/{bmad_folder}/OLD_MODULE/config.yaml"
|
|
626
|
+
// with config_source: "{project-root}/{bmad_folder}/NEW_MODULE/config.yaml"
|
|
627
|
+
// Note: At this point {bmad_folder} has already been replaced with actual folder name
|
|
628
|
+
const configSourcePattern = /config_source:\s*["']?\{project-root\}\/[^/]+\/[^/]+\/config\.yaml["']?/g;
|
|
629
|
+
const newConfigSource = `config_source: "{project-root}/${this.bmadFolderName}/${newModuleName}/config.yaml"`;
|
|
630
|
+
|
|
631
|
+
const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
|
|
632
|
+
|
|
633
|
+
if (updatedYaml !== yamlContent) {
|
|
634
|
+
await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
|
|
635
|
+
console.log(chalk.dim(` Updated config_source to: ${this.bmadFolderName}/${newModuleName}/config.yaml`));
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
316
639
|
/**
|
|
317
640
|
* Run module-specific installer if it exists
|
|
318
641
|
* @param {string} moduleName - Name of the module
|
|
@@ -414,9 +737,8 @@ class ModuleManager {
|
|
|
414
737
|
}
|
|
415
738
|
}
|
|
416
739
|
|
|
417
|
-
// Copy file
|
|
418
|
-
await
|
|
419
|
-
await fs.copy(sourceFile, targetFile, { overwrite: true });
|
|
740
|
+
// Copy file with placeholder replacement
|
|
741
|
+
await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile);
|
|
420
742
|
}
|
|
421
743
|
}
|
|
422
744
|
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
const fs = require('fs-extra');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const { getSourcePath } = require('./project-root');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Builds activation blocks from fragments based on agent profile
|
|
7
|
+
*/
|
|
8
|
+
class ActivationBuilder {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.fragmentsDir = getSourcePath('utility', 'models', 'fragments');
|
|
11
|
+
this.fragmentCache = new Map();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Load a fragment file
|
|
16
|
+
* @param {string} fragmentName - Name of fragment file (e.g., 'activation-init.xml')
|
|
17
|
+
* @returns {string} Fragment content
|
|
18
|
+
*/
|
|
19
|
+
async loadFragment(fragmentName) {
|
|
20
|
+
// Check cache first
|
|
21
|
+
if (this.fragmentCache.has(fragmentName)) {
|
|
22
|
+
return this.fragmentCache.get(fragmentName);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const fragmentPath = path.join(this.fragmentsDir, fragmentName);
|
|
26
|
+
|
|
27
|
+
if (!(await fs.pathExists(fragmentPath))) {
|
|
28
|
+
throw new Error(`Fragment not found: ${fragmentName}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const content = await fs.readFile(fragmentPath, 'utf8');
|
|
32
|
+
this.fragmentCache.set(fragmentName, content);
|
|
33
|
+
return content;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Build complete activation block based on agent profile
|
|
38
|
+
* @param {Object} profile - Agent profile from AgentAnalyzer
|
|
39
|
+
* @param {Object} metadata - Agent metadata (module, name, etc.)
|
|
40
|
+
* @param {Array} agentSpecificActions - Optional agent-specific critical actions
|
|
41
|
+
* @param {boolean} forWebBundle - Whether this is for a web bundle
|
|
42
|
+
* @returns {string} Complete activation block XML
|
|
43
|
+
*/
|
|
44
|
+
async buildActivation(profile, metadata = {}, agentSpecificActions = [], forWebBundle = false) {
|
|
45
|
+
let activation = '<activation critical="MANDATORY">\n';
|
|
46
|
+
|
|
47
|
+
// 1. Build sequential steps (use web-specific steps for web bundles)
|
|
48
|
+
const steps = await this.buildSteps(metadata, agentSpecificActions, forWebBundle);
|
|
49
|
+
activation += this.indent(steps, 2) + '\n';
|
|
50
|
+
|
|
51
|
+
// 2. Build menu handlers section with dynamic handlers
|
|
52
|
+
const menuHandlers = await this.loadFragment('menu-handlers.xml');
|
|
53
|
+
|
|
54
|
+
// Build handlers (load only needed handlers)
|
|
55
|
+
const handlers = await this.buildHandlers(profile);
|
|
56
|
+
|
|
57
|
+
// Remove the extract line from the final output - it's just build metadata
|
|
58
|
+
// The extract list tells us which attributes to look for during processing
|
|
59
|
+
// but shouldn't appear in the final agent file
|
|
60
|
+
const processedHandlers = menuHandlers
|
|
61
|
+
.replace('<extract>{DYNAMIC_EXTRACT_LIST}</extract>\n', '') // Remove the entire extract line
|
|
62
|
+
.replace('{DYNAMIC_HANDLERS}', handlers);
|
|
63
|
+
|
|
64
|
+
activation += '\n' + this.indent(processedHandlers, 2) + '\n';
|
|
65
|
+
|
|
66
|
+
// 3. Include rules (skip for web bundles as they're in web-bundle-activation-steps.xml)
|
|
67
|
+
if (!forWebBundle) {
|
|
68
|
+
const rules = await this.loadFragment('activation-rules.xml');
|
|
69
|
+
activation += this.indent(rules, 2) + '\n';
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
activation += '</activation>';
|
|
73
|
+
|
|
74
|
+
return activation;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Build handlers section based on profile
|
|
79
|
+
* @param {Object} profile - Agent profile
|
|
80
|
+
* @returns {string} Handlers XML
|
|
81
|
+
*/
|
|
82
|
+
async buildHandlers(profile) {
|
|
83
|
+
const handlerFragments = [];
|
|
84
|
+
|
|
85
|
+
for (const attrType of profile.usedAttributes) {
|
|
86
|
+
const fragmentName = `handler-${attrType}.xml`;
|
|
87
|
+
try {
|
|
88
|
+
const handler = await this.loadFragment(fragmentName);
|
|
89
|
+
handlerFragments.push(handler);
|
|
90
|
+
} catch {
|
|
91
|
+
console.warn(`Warning: Handler fragment not found: ${fragmentName}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return handlerFragments.join('\n');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Build sequential activation steps
|
|
100
|
+
* @param {Object} metadata - Agent metadata
|
|
101
|
+
* @param {Array} agentSpecificActions - Optional agent-specific actions
|
|
102
|
+
* @param {boolean} forWebBundle - Whether this is for a web bundle
|
|
103
|
+
* @returns {string} Steps XML
|
|
104
|
+
*/
|
|
105
|
+
async buildSteps(metadata = {}, agentSpecificActions = [], forWebBundle = false) {
|
|
106
|
+
// Use web-specific fragment for web bundles, standard fragment otherwise
|
|
107
|
+
const fragmentName = forWebBundle ? 'web-bundle-activation-steps.xml' : 'activation-steps.xml';
|
|
108
|
+
const stepsTemplate = await this.loadFragment(fragmentName);
|
|
109
|
+
|
|
110
|
+
// Extract basename from agent ID (e.g., "bmad/bmm/agents/pm.md" → "pm")
|
|
111
|
+
const agentBasename = metadata.id ? metadata.id.split('/').pop().replace('.md', '') : metadata.name || 'agent';
|
|
112
|
+
|
|
113
|
+
// Build agent-specific steps
|
|
114
|
+
let agentStepsXml = '';
|
|
115
|
+
let currentStepNum = 4; // Steps 1-3 are standard
|
|
116
|
+
|
|
117
|
+
if (agentSpecificActions && agentSpecificActions.length > 0) {
|
|
118
|
+
agentStepsXml = agentSpecificActions
|
|
119
|
+
.map((action) => {
|
|
120
|
+
const step = `<step n="${currentStepNum}">${action}</step>`;
|
|
121
|
+
currentStepNum++;
|
|
122
|
+
return step;
|
|
123
|
+
})
|
|
124
|
+
.join('\n');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Calculate final step numbers
|
|
128
|
+
const menuStep = currentStepNum;
|
|
129
|
+
const haltStep = currentStepNum + 1;
|
|
130
|
+
const inputStep = currentStepNum + 2;
|
|
131
|
+
const executeStep = currentStepNum + 3;
|
|
132
|
+
|
|
133
|
+
// Replace placeholders
|
|
134
|
+
const processed = stepsTemplate
|
|
135
|
+
.replace('{agent-file-basename}', agentBasename)
|
|
136
|
+
.replace('{{module}}', metadata.module || 'core') // Fixed to use {{module}}
|
|
137
|
+
.replace('{AGENT_SPECIFIC_STEPS}', agentStepsXml)
|
|
138
|
+
.replace('{MENU_STEP}', menuStep.toString())
|
|
139
|
+
.replace('{HALT_STEP}', haltStep.toString())
|
|
140
|
+
.replace('{INPUT_STEP}', inputStep.toString())
|
|
141
|
+
.replace('{EXECUTE_STEP}', executeStep.toString());
|
|
142
|
+
|
|
143
|
+
return processed;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Indent XML content
|
|
148
|
+
* @param {string} content - Content to indent
|
|
149
|
+
* @param {number} spaces - Number of spaces to indent
|
|
150
|
+
* @returns {string} Indented content
|
|
151
|
+
*/
|
|
152
|
+
indent(content, spaces) {
|
|
153
|
+
const indentation = ' '.repeat(spaces);
|
|
154
|
+
return content
|
|
155
|
+
.split('\n')
|
|
156
|
+
.map((line) => (line ? indentation + line : line))
|
|
157
|
+
.join('\n');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Clear fragment cache (useful for testing or hot reload)
|
|
162
|
+
*/
|
|
163
|
+
clearCache() {
|
|
164
|
+
this.fragmentCache.clear();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
module.exports = { ActivationBuilder };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const yaml = require('js-yaml');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Analyzes agent YAML files to detect which handlers are needed
|
|
6
|
+
*/
|
|
7
|
+
class AgentAnalyzer {
|
|
8
|
+
/**
|
|
9
|
+
* Analyze an agent YAML structure to determine which handlers it needs
|
|
10
|
+
* @param {Object} agentYaml - Parsed agent YAML object
|
|
11
|
+
* @returns {Object} Profile of needed handlers
|
|
12
|
+
*/
|
|
13
|
+
analyzeAgentObject(agentYaml) {
|
|
14
|
+
const profile = {
|
|
15
|
+
usedAttributes: new Set(),
|
|
16
|
+
hasPrompts: false,
|
|
17
|
+
menuItems: [],
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
// Check if agent has prompts section
|
|
21
|
+
if (agentYaml.agent && agentYaml.agent.prompts) {
|
|
22
|
+
profile.hasPrompts = true;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Analyze menu items (support both 'menu' and legacy 'commands')
|
|
26
|
+
const menuItems = agentYaml.agent?.menu || agentYaml.agent?.commands || [];
|
|
27
|
+
|
|
28
|
+
for (const item of menuItems) {
|
|
29
|
+
// Track the menu item
|
|
30
|
+
profile.menuItems.push(item);
|
|
31
|
+
|
|
32
|
+
// Check for each possible attribute
|
|
33
|
+
if (item.workflow) {
|
|
34
|
+
profile.usedAttributes.add('workflow');
|
|
35
|
+
}
|
|
36
|
+
if (item['validate-workflow']) {
|
|
37
|
+
profile.usedAttributes.add('validate-workflow');
|
|
38
|
+
}
|
|
39
|
+
if (item.exec) {
|
|
40
|
+
profile.usedAttributes.add('exec');
|
|
41
|
+
}
|
|
42
|
+
if (item.tmpl) {
|
|
43
|
+
profile.usedAttributes.add('tmpl');
|
|
44
|
+
}
|
|
45
|
+
if (item.data) {
|
|
46
|
+
profile.usedAttributes.add('data');
|
|
47
|
+
}
|
|
48
|
+
if (item.action) {
|
|
49
|
+
profile.usedAttributes.add('action');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Convert Set to Array for easier use
|
|
54
|
+
profile.usedAttributes = [...profile.usedAttributes];
|
|
55
|
+
|
|
56
|
+
return profile;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Analyze an agent YAML file
|
|
61
|
+
* @param {string} filePath - Path to agent YAML file
|
|
62
|
+
* @returns {Object} Profile of needed handlers
|
|
63
|
+
*/
|
|
64
|
+
async analyzeAgentFile(filePath) {
|
|
65
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
66
|
+
const agentYaml = yaml.load(content);
|
|
67
|
+
return this.analyzeAgentObject(agentYaml);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Check if an agent needs a specific handler
|
|
72
|
+
* @param {Object} profile - Agent profile from analyze
|
|
73
|
+
* @param {string} handlerType - Handler type to check
|
|
74
|
+
* @returns {boolean} True if handler is needed
|
|
75
|
+
*/
|
|
76
|
+
needsHandler(profile, handlerType) {
|
|
77
|
+
return profile.usedAttributes.includes(handlerType);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
module.exports = { AgentAnalyzer };
|
|
@@ -3,7 +3,7 @@ const fs = require('fs-extra');
|
|
|
3
3
|
|
|
4
4
|
const AgentPartyGenerator = {
|
|
5
5
|
/**
|
|
6
|
-
* Generate agent-
|
|
6
|
+
* Generate agent-manifest.csv content
|
|
7
7
|
* @param {Array} agentDetails - Array of agent details
|
|
8
8
|
* @param {Object} options - Generation options
|
|
9
9
|
* @returns {string} XML content
|
|
@@ -28,7 +28,7 @@ const AgentPartyGenerator = {
|
|
|
28
28
|
let xmlContent = `<!-- Powered by BMAD-CORE™ -->
|
|
29
29
|
<!-- Agent Manifest - Generated during BMAD ${forWeb ? 'bundling' : 'installation'} -->
|
|
30
30
|
<!-- This file contains a summary of all ${forWeb ? 'bundled' : 'installed'} agents for quick reference -->
|
|
31
|
-
<manifest id="bmad/_cfg/agent-
|
|
31
|
+
<manifest id="bmad/_cfg/agent-manifest.csv" version="1.0" generated="${new Date().toISOString()}">
|
|
32
32
|
<description>
|
|
33
33
|
Complete roster of ${forWeb ? 'bundled' : 'installed'} BMAD agents with summarized personas for efficient multi-agent orchestration.
|
|
34
34
|
Used by party-mode and other multi-agent coordination features.
|
|
@@ -193,7 +193,7 @@ const AgentPartyGenerator = {
|
|
|
193
193
|
},
|
|
194
194
|
|
|
195
195
|
/**
|
|
196
|
-
* Write agent-
|
|
196
|
+
* Write agent-manifest.csv to file
|
|
197
197
|
*/
|
|
198
198
|
async writeAgentParty(filePath, agentDetails, options = {}) {
|
|
199
199
|
const content = this.generateAgentParty(agentDetails, options);
|