bmad-method 6.0.0-alpha.0 → 6.0.0-alpha.2
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/.claude/commands/bmad/bmb/agents/bmad-builder.md +70 -0
- package/.claude/commands/bmad/bmb/workflows/README.md +67 -0
- package/.claude/commands/bmad/bmb/workflows/audit-workflow.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/convert-legacy.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/create-agent.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/create-module.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/create-workflow.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/edit-agent.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/edit-module.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/edit-workflow.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/module-brief.md +15 -0
- package/.claude/commands/bmad/bmb/workflows/redoc.md +15 -0
- package/.claude/commands/bmad/bmd/agents/cli-chief.md +108 -0
- package/.claude/commands/bmad/bmd/agents/doc-keeper.md +115 -0
- package/.claude/commands/bmad/bmd/agents/release-chief.md +109 -0
- package/.claude/commands/bmad/core/agents/bmad-master.md +71 -0
- package/.claude/commands/bmad/core/tasks/index-docs.md +9 -0
- package/.claude/commands/bmad/core/tools/shard-doc.md +9 -0
- package/.claude/commands/bmad/core/workflows/README.md +27 -0
- package/.claude/commands/bmad/core/workflows/brainstorming.md +15 -0
- package/.claude/commands/bmad/core/workflows/party-mode.md +15 -0
- package/.claude/hooks/bmad-tts-injector.sh +415 -0
- package/.claude/hooks/bmad-voice-manager.sh +511 -0
- package/.claude/hooks/check-output-style.sh +112 -0
- package/.claude/hooks/download-extra-voices.sh +244 -0
- package/.claude/hooks/github-star-reminder.sh +154 -0
- package/.claude/hooks/language-manager.sh +392 -0
- package/.claude/hooks/learn-manager.sh +475 -0
- package/.claude/hooks/personality-manager.sh +438 -0
- package/.claude/hooks/piper-download-voices.sh +165 -0
- package/.claude/hooks/piper-installer.sh +178 -0
- package/.claude/hooks/piper-multispeaker-registry.sh +165 -0
- package/.claude/hooks/piper-voice-manager.sh +293 -0
- package/.claude/hooks/play-tts-elevenlabs.sh +404 -0
- package/.claude/hooks/play-tts-piper.sh +338 -0
- package/.claude/hooks/play-tts.sh +100 -0
- package/.claude/hooks/provider-commands.sh +540 -0
- package/.claude/hooks/provider-manager.sh +298 -0
- package/.claude/hooks/replay-target-audio.sh +95 -0
- package/.claude/hooks/sentiment-manager.sh +201 -0
- package/.claude/hooks/speed-manager.sh +291 -0
- package/.claude/hooks/voice-manager.sh +594 -0
- package/.claude/hooks/voices-config.sh +70 -0
- package/.claude/settings.local.json +41 -0
- package/.github/ISSUE_TEMPLATE/config.yaml +4 -0
- package/.github/ISSUE_TEMPLATE/idea_submission.md +2 -2
- package/.github/workflows/{format-check.yaml → lint.yaml} +19 -1
- package/.prettierignore +2 -0
- package/CHANGELOG.md +8 -2
- package/CONTRIBUTING.md +1 -0
- package/README.md +263 -0
- package/bmad/_cfg/agent-manifest.csv +7 -0
- package/bmad/_cfg/agents/bmb-bmad-builder.customize.yaml +42 -0
- package/bmad/_cfg/agents/bmd-cli-chief.customize.yaml +32 -0
- package/bmad/_cfg/agents/bmd-doc-keeper.customize.yaml +42 -0
- package/bmad/_cfg/agents/bmd-release-chief.customize.yaml +42 -0
- package/bmad/_cfg/agents/core-bmad-master.customize.yaml +42 -0
- package/bmad/_cfg/files-manifest.csv +83 -0
- package/bmad/_cfg/manifest.yaml +12 -0
- package/bmad/_cfg/task-manifest.csv +5 -0
- package/bmad/_cfg/tool-manifest.csv +2 -0
- package/bmad/_cfg/workflow-manifest.csv +15 -0
- package/bmad/bmb/README.md +132 -0
- package/bmad/bmb/agents/bmad-builder.md +70 -0
- package/bmad/bmb/config.yaml +14 -0
- package/bmad/bmb/workflows/audit-workflow/checklist.md +143 -0
- package/bmad/bmb/workflows/audit-workflow/instructions.md +341 -0
- package/bmad/bmb/workflows/audit-workflow/template.md +118 -0
- package/bmad/bmb/workflows/audit-workflow/workflow.yaml +23 -0
- package/bmad/bmb/workflows/audit-workflow/workflow.yaml.bak +21 -0
- package/bmad/bmb/workflows/convert-legacy/README.md +262 -0
- package/bmad/bmb/workflows/convert-legacy/checklist.md +205 -0
- package/bmad/bmb/workflows/convert-legacy/instructions.md +377 -0
- package/bmad/bmb/workflows/convert-legacy/workflow.yaml +32 -0
- package/bmad/bmb/workflows/create-agent/README.md +320 -0
- package/bmad/bmb/workflows/create-agent/agent-architecture.md +419 -0
- package/bmad/bmb/workflows/create-agent/agent-architecture.md.bak +412 -0
- package/bmad/bmb/workflows/create-agent/agent-command-patterns.md +759 -0
- package/bmad/bmb/workflows/create-agent/agent-command-patterns.md.bak +759 -0
- package/bmad/bmb/workflows/create-agent/agent-types.md +292 -0
- package/bmad/bmb/workflows/create-agent/brainstorm-context.md +174 -0
- package/bmad/bmb/workflows/create-agent/checklist.md +62 -0
- package/bmad/bmb/workflows/create-agent/communication-styles.md +202 -0
- package/bmad/bmb/workflows/create-agent/instructions.md +430 -0
- package/bmad/bmb/workflows/create-agent/workflow.yaml +37 -0
- package/bmad/bmb/workflows/create-module/README.md +220 -0
- package/bmad/bmb/workflows/create-module/README.md.bak +218 -0
- package/bmad/bmb/workflows/create-module/brainstorm-context.md +137 -0
- package/bmad/bmb/workflows/create-module/checklist.md +244 -0
- package/bmad/bmb/workflows/create-module/checklist.md.bak +245 -0
- package/bmad/bmb/workflows/create-module/installer-templates/install-config.yaml +92 -0
- package/bmad/bmb/workflows/create-module/installer-templates/installer.js +231 -0
- package/bmad/bmb/workflows/create-module/installer-templates/installer.js.bak +231 -0
- package/bmad/bmb/workflows/create-module/instructions.md +581 -0
- package/bmad/bmb/workflows/create-module/instructions.md.bak +521 -0
- package/bmad/bmb/workflows/create-module/module-structure.md +366 -0
- package/bmad/bmb/workflows/create-module/module-structure.md.bak +310 -0
- package/bmad/bmb/workflows/create-module/workflow.yaml +42 -0
- package/bmad/bmb/workflows/create-module/workflow.yaml.bak +40 -0
- package/bmad/bmb/workflows/create-workflow/README.md +277 -0
- package/bmad/bmb/workflows/create-workflow/brainstorm-context.md +197 -0
- package/bmad/bmb/workflows/create-workflow/checklist.md +94 -0
- package/bmad/bmb/workflows/create-workflow/instructions.md +716 -0
- package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +1150 -0
- package/bmad/bmb/workflows/create-workflow/workflow-template/checklist.md +24 -0
- package/bmad/bmb/workflows/create-workflow/workflow-template/instructions.md +13 -0
- package/bmad/bmb/workflows/create-workflow/workflow-template/template.md +9 -0
- package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml +39 -0
- package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml.bak +39 -0
- package/bmad/bmb/workflows/create-workflow/workflow.yaml +40 -0
- package/bmad/bmb/workflows/create-workflow/workflow.yaml.bak +38 -0
- package/bmad/bmb/workflows/edit-agent/README.md +112 -0
- package/bmad/bmb/workflows/edit-agent/checklist.md +112 -0
- package/bmad/bmb/workflows/edit-agent/instructions.md +290 -0
- package/bmad/bmb/workflows/edit-agent/workflow.yaml +33 -0
- package/bmad/bmb/workflows/edit-module/README.md +187 -0
- package/bmad/bmb/workflows/edit-module/checklist.md +165 -0
- package/bmad/bmb/workflows/edit-module/instructions.md +339 -0
- package/bmad/bmb/workflows/edit-module/workflow.yaml +34 -0
- package/bmad/bmb/workflows/edit-workflow/README.md +119 -0
- package/bmad/bmb/workflows/edit-workflow/checklist.md +70 -0
- package/bmad/bmb/workflows/edit-workflow/instructions.md +342 -0
- package/bmad/bmb/workflows/edit-workflow/workflow.yaml +27 -0
- package/bmad/bmb/workflows/edit-workflow/workflow.yaml.bak +25 -0
- package/bmad/bmb/workflows/module-brief/README.md +264 -0
- package/bmad/bmb/workflows/module-brief/checklist.md +116 -0
- package/bmad/bmb/workflows/module-brief/instructions.md +267 -0
- package/bmad/bmb/workflows/module-brief/template.md +275 -0
- package/bmad/bmb/workflows/module-brief/workflow.yaml +29 -0
- package/bmad/bmb/workflows/module-brief/workflow.yaml.bak +27 -0
- package/bmad/bmb/workflows/redoc/README.md +87 -0
- package/bmad/bmb/workflows/redoc/checklist.md +99 -0
- package/bmad/bmb/workflows/redoc/instructions.md +265 -0
- package/bmad/bmb/workflows/redoc/workflow.yaml +32 -0
- package/bmad/bmb/workflows/redoc/workflow.yaml.bak +31 -0
- package/bmad/bmd/README.md +193 -0
- package/bmad/bmd/README.md.bak +193 -0
- package/bmad/bmd/agents/cli-chief-sidecar/instructions.md +102 -0
- package/bmad/bmd/agents/cli-chief-sidecar/instructions.md.bak +102 -0
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md +68 -0
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md.bak +68 -0
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +123 -0
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md.bak +123 -0
- package/bmad/bmd/agents/cli-chief-sidecar/memories.md +53 -0
- package/bmad/bmd/agents/cli-chief-sidecar/memories.md.bak +53 -0
- package/bmad/bmd/agents/cli-chief.md +108 -0
- package/bmad/bmd/agents/cli-chief.md.bak +108 -0
- package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md +177 -0
- package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md.bak +177 -0
- package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md +81 -0
- package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md.bak +81 -0
- package/bmad/bmd/agents/doc-keeper-sidecar/memories.md +88 -0
- package/bmad/bmd/agents/doc-keeper-sidecar/memories.md.bak +88 -0
- package/bmad/bmd/agents/doc-keeper.md +115 -0
- package/bmad/bmd/agents/doc-keeper.md.bak +115 -0
- package/bmad/bmd/agents/release-chief-sidecar/instructions.md +164 -0
- package/bmad/bmd/agents/release-chief-sidecar/instructions.md.bak +164 -0
- package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md +82 -0
- package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md.bak +82 -0
- package/bmad/bmd/agents/release-chief-sidecar/memories.md +73 -0
- package/bmad/bmd/agents/release-chief-sidecar/memories.md.bak +73 -0
- package/bmad/bmd/agents/release-chief.md +109 -0
- package/bmad/bmd/agents/release-chief.md.bak +109 -0
- package/bmad/bmd/config.yaml +10 -0
- package/bmad/core/agents/bmad-master.md +71 -0
- package/bmad/core/agents/bmad-web-orchestrator.agent.xml +122 -0
- package/bmad/core/config.yaml +9 -0
- package/bmad/core/tasks/adv-elicit-methods.csv +39 -0
- package/{src/core/tasks/adv-elicit.md → bmad/core/tasks/adv-elicit.xml} +6 -11
- package/{src/core/tasks/index-docs.md → bmad/core/tasks/index-docs.xml} +6 -10
- package/{src/core/tasks/validate-workflow.md → bmad/core/tasks/validate-workflow.xml} +4 -7
- package/bmad/core/tasks/workflow.xml +174 -0
- package/bmad/core/tools/shard-doc.xml +100 -0
- package/{src/modules/cis → bmad/core}/workflows/brainstorming/README.md +2 -2
- package/{src/modules/cis → bmad/core}/workflows/brainstorming/instructions.md +26 -22
- package/{src/modules/cis → bmad/core}/workflows/brainstorming/template.md +2 -2
- package/{src/modules/cis → bmad/core}/workflows/brainstorming/workflow.yaml +16 -3
- package/bmad/core/workflows/party-mode/instructions.md +188 -0
- package/bmad/core/workflows/party-mode/workflow.yaml +23 -0
- package/bmad/docs/claude-code-instructions.md +25 -0
- package/bmad/docs/codex-instructions.md +21 -0
- package/bmd/README.md +193 -0
- package/bmd/agents/cli-chief-sidecar/instructions.md +102 -0
- package/bmd/agents/cli-chief-sidecar/knowledge/README.md +68 -0
- package/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +123 -0
- package/bmd/agents/cli-chief-sidecar/memories.md +53 -0
- package/bmd/agents/cli-chief.agent.yaml +126 -0
- package/bmd/agents/doc-keeper-sidecar/instructions.md +177 -0
- package/bmd/agents/doc-keeper-sidecar/knowledge/README.md +81 -0
- package/bmd/agents/doc-keeper-sidecar/memories.md +88 -0
- package/bmd/agents/doc-keeper.agent.yaml +137 -0
- package/bmd/agents/release-chief-sidecar/instructions.md +164 -0
- package/bmd/agents/release-chief-sidecar/knowledge/README.md +82 -0
- package/bmd/agents/release-chief-sidecar/memories.md +73 -0
- package/bmd/agents/release-chief.agent.yaml +127 -0
- package/bmd/bmad-custom-module-installer-plan.md +1176 -0
- package/bmd/config.yaml +12 -0
- package/docs/bmad-brownfield-guide.md +1260 -0
- package/docs/conversion-report-shard-doc-2025-10-26.md +188 -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/opencode.md +24 -0
- package/docs/installers-bundlers/ide-injections.md +0 -10
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +22 -50
- package/docs/v4-to-v6-upgrade.md +225 -0
- package/eslint.config.mjs +4 -2
- package/package.json +11 -6
- package/src/core/_module-installer/{install-menu-config.yaml → install-config.yaml} +8 -4
- package/src/core/_module-installer/installer.js +1 -1
- package/src/core/agents/bmad-master.agent.yaml +39 -0
- package/src/core/agents/bmad-web-orchestrator.agent.xml +122 -0
- package/src/core/tasks/adv-elicit.xml +104 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/validate-workflow.xml +89 -0
- package/src/core/tasks/{workflow.md → workflow.xml} +42 -17
- package/src/core/tools/shard-doc.xml +100 -0
- package/src/core/workflows/brainstorming/README.md +271 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +36 -0
- package/src/core/workflows/brainstorming/instructions.md +314 -0
- package/src/core/workflows/brainstorming/template.md +102 -0
- package/src/core/workflows/brainstorming/workflow.yaml +43 -0
- package/src/core/workflows/party-mode/instructions.md +30 -23
- package/src/core/workflows/party-mode/workflow.yaml +7 -8
- package/src/modules/bmb/README.md +132 -0
- package/src/modules/bmb/_module-installer/install-config.yaml +26 -0
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +58 -0
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +143 -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 +32 -32
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +21 -20
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +130 -81
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +7 -8
- package/src/modules/bmb/workflows/create-agent/README.md +96 -44
- package/src/modules/bmb/workflows/create-agent/agent-architecture.md +58 -51
- package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +153 -151
- package/src/modules/bmb/workflows/create-agent/agent-types.md +137 -22
- 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 +309 -219
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +24 -14
- package/src/modules/bmb/workflows/create-module/README.md +23 -21
- package/src/modules/bmb/workflows/create-module/brainstorm-context.md +1 -1
- package/src/modules/bmb/workflows/create-module/checklist.md +20 -21
- 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 +309 -237
- package/src/modules/bmb/workflows/create-module/module-structure.md +104 -48
- package/src/modules/bmb/workflows/create-module/workflow.yaml +14 -17
- package/src/modules/bmb/workflows/create-workflow/README.md +68 -7
- 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 +496 -47
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +753 -59
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +4 -3
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +30 -0
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +11 -11
- 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 +35 -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 +339 -0
- package/src/modules/bmb/workflows/edit-module/workflow.yaml +36 -0
- package/src/modules/bmb/workflows/edit-workflow/README.md +58 -2
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +289 -117
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +5 -10
- package/src/modules/bmb/workflows/module-brief/README.md +16 -16
- package/src/modules/bmb/workflows/module-brief/checklist.md +4 -4
- package/src/modules/bmb/workflows/module-brief/instructions.md +9 -7
- package/src/modules/bmb/workflows/module-brief/template.md +9 -9
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +5 -4
- 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 +5 -4
- package/src/modules/bmm/README.md +141 -0
- package/src/modules/bmm/_module-installer/install-config.yaml +74 -0
- package/src/modules/bmm/_module-installer/installer.js +1 -1
- 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 +43 -0
- package/src/modules/bmm/agents/architect.agent.yaml +41 -0
- package/src/modules/bmm/agents/dev.agent.yaml +43 -0
- package/src/modules/bmm/agents/game-architect.agent.yaml +35 -0
- package/src/modules/bmm/agents/game-designer.agent.yaml +47 -0
- package/src/modules/bmm/agents/game-dev.agent.yaml +39 -0
- package/src/modules/bmm/agents/pm.agent.yaml +50 -0
- package/src/modules/bmm/agents/sm.agent.yaml +67 -0
- package/src/modules/bmm/agents/tea.agent.yaml +59 -0
- package/src/modules/bmm/agents/ux-designer.agent.yaml +33 -0
- package/src/modules/bmm/sub-modules/claude-code/injections.yaml +1 -1
- package/src/modules/bmm/sub-modules/claude-code/readme.md +1 -1
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{api-documenter.md → bmad-analysis/api-documenter.md} +17 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{codebase-analyzer.md → bmad-analysis/codebase-analyzer.md} +19 -1
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{data-analyst.md → bmad-analysis/data-analyst.md} +17 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{pattern-detector.md → bmad-analysis/pattern-detector.md} +17 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{dependency-mapper.md → bmad-planning/dependency-mapper.md} +16 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{epic-optimizer.md → bmad-planning/epic-optimizer.md} +15 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{technical-decisions-curator.md → bmad-planning/technical-decisions-curator.md} +24 -2
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{trend-spotter.md → bmad-planning/trend-spotter.md} +16 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{user-journey-mapper.md → bmad-planning/user-journey-mapper.md} +22 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{user-researcher.md → bmad-planning/user-researcher.md} +16 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{market-researcher.md → bmad-research/market-researcher.md} +17 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{tech-debt-auditor.md → bmad-research/tech-debt-auditor.md} +17 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{document-reviewer.md → bmad-review/document-reviewer.md} +17 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{technical-evaluator.md → bmad-review/technical-evaluator.md} +17 -0
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/{test-coverage-analyzer.md → bmad-review/test-coverage-analyzer.md} +17 -0
- package/src/modules/bmm/tasks/{daily-standup.md → daily-standup.xml} +21 -27
- package/src/modules/bmm/tasks/{retrospective.md → retrospective.xml} +22 -28
- package/src/modules/bmm/teams/team-fullstack.yaml +11 -0
- package/src/modules/bmm/teams/team-gamedev.yaml +5 -0
- package/src/modules/bmm/testarch/README.md +311 -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-game/README.md +38 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-context.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +74 -12
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/workflow.yaml +22 -3
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/README.md +29 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +61 -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 +21 -3
- package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +5 -5
- package/src/modules/bmm/workflows/1-analysis/game-brief/checklist.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +151 -311
- package/src/modules/bmm/workflows/1-analysis/game-brief/template.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/game-brief/workflow.yaml +16 -6
- package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +4 -4
- package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +147 -179
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +4 -4
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +16 -6
- package/src/modules/bmm/workflows/1-analysis/research/README.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +80 -17
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +71 -11
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +72 -38
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +73 -14
- 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 +1 -1
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +21 -121
- package/src/modules/bmm/workflows/2-plan-workflows/README.md +258 -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 +1283 -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 +42 -0
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/README.md +16 -16
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/checklist.md +148 -0
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/action-platformer.md +1 -1
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/adventure.md +1 -1
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/card-game.md +2 -2
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/fighting.md +1 -1
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/horror.md +2 -2
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/idle-incremental.md +1 -1
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/moba.md +4 -4
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/party-game.md +1 -1
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/racing.md +3 -3
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/rhythm.md +1 -1
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/roguelike.md +2 -2
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/rpg.md +3 -3
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/sandbox.md +4 -4
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/shooter.md +3 -3
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/simulation.md +3 -3
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/sports.md +3 -3
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/strategy.md +3 -3
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/survival.md +2 -2
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/text-based.md +3 -3
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/tower-defense.md +5 -5
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/turn-based-tactics.md +4 -4
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/visual-novel.md +1 -1
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/gdd-template.md +6 -12
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/instructions-gdd.md +475 -0
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +67 -0
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/checklist.md +139 -0
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/narrative/instructions-narrative.md +52 -12
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/narrative/narrative-template.md +8 -8
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +38 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +117 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/epics-template.md +63 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +449 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +62 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +46 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +107 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +11 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +167 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +278 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +269 -0
- package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/tech-spec/tech-spec-template.md +0 -4
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +56 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +52 -0
- package/src/modules/bmm/workflows/3-solutioning/README.md +1 -565
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +347 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +103 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +244 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +222 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +703 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +13 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/readme.md +318 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +54 -0
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/README.md +177 -0
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +175 -0
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +273 -0
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +146 -0
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +189 -0
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +40 -0
- package/src/modules/bmm/workflows/4-implementation/README.md +221 -0
- package/src/modules/bmm/workflows/4-implementation/{review-story → code-review}/README.md +4 -7
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +391 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +56 -0
- package/src/modules/bmm/workflows/4-implementation/correct-course/README.md +73 -0
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +5 -5
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +64 -53
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +10 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/README.md +117 -30
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +240 -39
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +193 -22
- package/src/modules/bmm/workflows/4-implementation/create-story/template.md +2 -8
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +11 -34
- package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +367 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/README.md +189 -67
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +215 -40
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +12 -37
- package/src/modules/bmm/workflows/{3-solutioning/tech-spec → 4-implementation/epic-tech-context}/README.md +6 -6
- package/src/modules/bmm/workflows/{3-solutioning/tech-spec → 4-implementation/epic-tech-context}/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +160 -0
- package/src/modules/bmm/workflows/{3-solutioning/tech-spec → 4-implementation/epic-tech-context}/template.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +34 -0
- package/src/modules/bmm/workflows/4-implementation/retrospective/README.md +77 -0
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +236 -148
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +8 -4
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/README.md +156 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +221 -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 +41 -0
- package/src/modules/bmm/workflows/4-implementation/story-context/README.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +146 -21
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +8 -32
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +111 -0
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +27 -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 +27 -0
- package/src/modules/bmm/workflows/README.md +577 -0
- package/src/modules/bmm/workflows/document-project/README.md +444 -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/README.md +38 -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 +36 -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/testarch/README.md +26 -0
- package/src/modules/bmm/workflows/testarch/atdd/README.md +672 -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 +54 -0
- package/src/modules/bmm/workflows/testarch/automate/README.md +869 -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 +63 -0
- package/src/modules/bmm/workflows/testarch/ci/README.md +493 -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 +55 -0
- package/src/modules/bmm/workflows/testarch/framework/README.md +340 -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 +55 -0
- package/src/modules/bmm/workflows/testarch/nfr-assess/README.md +469 -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 +58 -0
- package/src/modules/bmm/workflows/testarch/test-design/README.md +493 -0
- package/src/modules/bmm/workflows/testarch/test-design/checklist.md +234 -0
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +621 -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 +54 -0
- package/src/modules/bmm/workflows/testarch/test-review/README.md +775 -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 +55 -0
- package/src/modules/bmm/workflows/testarch/trace/README.md +802 -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 +68 -0
- package/src/modules/bmm/workflows/workflow-status/README.md +241 -0
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +297 -0
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +28 -0
- package/src/modules/bmm/workflows/workflow-status/instructions.md +324 -0
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-0.yaml +54 -0
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-1.yaml +58 -0
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-2.yaml +76 -0
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-3.yaml +95 -0
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-4.yaml +88 -0
- package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +75 -0
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-0.yaml +45 -0
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-1.yaml +49 -0
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-2.yaml +78 -0
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-3.yaml +73 -0
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-4.yaml +75 -0
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +59 -0
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.md +30 -0
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +30 -0
- package/src/modules/cis/_module-installer/installer.js +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +23 -0
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +23 -0
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +23 -0
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +23 -0
- package/src/modules/cis/agents/storyteller.agent.yaml +23 -0
- package/src/modules/cis/workflows/design-thinking/design-methods.csv +1 -1
- package/src/modules/cis/workflows/design-thinking/instructions.md +1 -1
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +14 -0
- package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +2 -2
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +1 -1
- package/src/modules/cis/workflows/innovation-strategy/template.md +4 -4
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +14 -0
- package/src/modules/cis/workflows/problem-solving/instructions.md +1 -1
- 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 +14 -0
- package/src/modules/cis/workflows/storytelling/instructions.md +35 -27
- package/src/modules/cis/workflows/storytelling/template.md +2 -2
- package/src/modules/cis/workflows/storytelling/workflow.yaml +14 -0
- package/src/utility/models/agent-activation-ide.xml +3 -3
- package/src/utility/models/agent-activation-web.xml +60 -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 +15 -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/persona/principles-as-string.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/unit-test-schema.js +133 -0
- package/tools/bmad-npx-wrapper.js +38 -0
- package/tools/cli/README.md +590 -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 +639 -40
- package/tools/cli/commands/build.js +458 -0
- package/tools/cli/commands/install.js +49 -8
- package/tools/cli/installers/lib/core/config-collector.js +222 -15
- package/tools/cli/installers/lib/core/dependency-resolver.js +5 -1
- package/tools/cli/installers/lib/core/detector.js +80 -14
- package/tools/cli/installers/lib/core/ide-config-manager.js +152 -0
- package/tools/cli/installers/lib/core/installer.js +1175 -150
- package/tools/cli/installers/lib/core/manifest-generator.js +454 -63
- package/tools/cli/installers/lib/core/manifest.js +95 -43
- package/tools/cli/installers/lib/ide/_base-ide.js +311 -20
- package/tools/cli/installers/lib/ide/auggie.js +92 -27
- package/tools/cli/installers/lib/ide/claude-code.js +132 -308
- package/tools/cli/installers/lib/ide/cline.js +149 -227
- package/tools/cli/installers/lib/ide/codex.js +141 -174
- package/tools/cli/installers/lib/ide/crush.js +109 -37
- package/tools/cli/installers/lib/ide/cursor.js +81 -13
- package/tools/cli/installers/lib/ide/gemini.js +24 -28
- package/tools/cli/installers/lib/ide/github-copilot.js +15 -14
- package/tools/cli/installers/lib/ide/manager.js +26 -35
- package/tools/cli/installers/lib/ide/opencode.js +213 -0
- package/tools/cli/installers/lib/ide/qwen.js +172 -70
- 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/task-tool-command-generator.js +119 -0
- package/tools/cli/installers/lib/ide/trae.js +120 -24
- package/tools/cli/installers/lib/ide/windsurf.js +88 -36
- package/tools/cli/installers/lib/ide/workflow-command-generator.js +119 -46
- package/tools/cli/installers/lib/ide/workflow-command-template.md +7 -3
- package/tools/cli/installers/lib/modules/manager.js +123 -7
- 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/ui.js +78 -3
- package/tools/cli/lib/xml-handler.js +46 -1
- package/tools/cli/lib/yaml-xml-builder.js +439 -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 +231 -0
- package/tools/validate-agent-schema.js +110 -0
- package/v6-open-items.md +23 -0
- package/docs/codebase-flattener.md +0 -19
- package/readme.md +0 -216
- 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/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/teams/team-all.yaml +0 -7
- package/src/modules/bmm/teams/team-dev.yaml +0 -14
- 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/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/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/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/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/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/review-story/instructions.md +0 -176
- package/src/modules/bmm/workflows/4-implementation/review-story/workflow.yaml +0 -99
- 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/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 → bmad/core}/workflows/brainstorming/brain-methods.csv +0 -0
- /package/src/modules/bmm/_module-installer/assets/{technical-decisions-template.md → technical-decisions.md} +0 -0
- /package/src/modules/bmm/sub-modules/claude-code/sub-agents/{requirements-analyst.md → bmad-planning/requirements-analyst.md} +0 -0
- /package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/metroidvania.md +0 -0
- /package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/puzzle.md +0 -0
- /package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types.csv +0 -0
- /package/src/modules/bmm/workflows/4-implementation/{review-story → code-review}/backlog_template.md +0 -0
- /package/src/modules/bmm/workflows/4-implementation/{review-story → code-review}/checklist.md +0 -0
- /package/src/modules/cis/_module-installer/{install-menu-config.yaml → install-config.yaml} +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
|
+
const yaml = require('js-yaml');
|
|
4
5
|
const { DependencyResolver } = require('../installers/lib/core/dependency-resolver');
|
|
5
6
|
const { XmlHandler } = require('../lib/xml-handler');
|
|
7
|
+
const { YamlXmlBuilder } = require('../lib/yaml-xml-builder');
|
|
6
8
|
const { AgentPartyGenerator } = require('../lib/agent-party-generator');
|
|
7
9
|
const xml2js = require('xml2js');
|
|
8
10
|
const { getProjectRoot, getSourcePath, getModulePath } = require('../lib/project-root');
|
|
@@ -16,6 +18,7 @@ class WebBundler {
|
|
|
16
18
|
|
|
17
19
|
this.dependencyResolver = new DependencyResolver();
|
|
18
20
|
this.xmlHandler = new XmlHandler();
|
|
21
|
+
this.yamlBuilder = new YamlXmlBuilder();
|
|
19
22
|
|
|
20
23
|
// Cache for resolved dependencies to avoid duplicates
|
|
21
24
|
this.dependencyCache = new Map();
|
|
@@ -108,16 +111,16 @@ class WebBundler {
|
|
|
108
111
|
}
|
|
109
112
|
}
|
|
110
113
|
|
|
111
|
-
// Process teams
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
114
|
+
// Process teams
|
|
115
|
+
const teams = await this.discoverTeams(modulePath);
|
|
116
|
+
for (const team of teams) {
|
|
117
|
+
try {
|
|
118
|
+
await this.bundleTeam(moduleName, team);
|
|
119
|
+
results.teams.push(team);
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.error(` Failed to bundle team ${team}:`, error.message);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
121
124
|
|
|
122
125
|
return results;
|
|
123
126
|
}
|
|
@@ -126,7 +129,7 @@ class WebBundler {
|
|
|
126
129
|
* Bundle a single agent
|
|
127
130
|
*/
|
|
128
131
|
async bundleAgent(moduleName, agentFile, shouldTrack = true) {
|
|
129
|
-
const agentName = path.basename(agentFile, '.md');
|
|
132
|
+
const agentName = agentFile.endsWith('.agent.yaml') ? path.basename(agentFile, '.agent.yaml') : path.basename(agentFile, '.md');
|
|
130
133
|
this.stats.totalAgents++;
|
|
131
134
|
|
|
132
135
|
console.log(chalk.dim(` → Processing: ${agentName}`));
|
|
@@ -140,11 +143,24 @@ class WebBundler {
|
|
|
140
143
|
throw new Error(`Agent file not found: ${agentPath}`);
|
|
141
144
|
}
|
|
142
145
|
|
|
143
|
-
|
|
144
|
-
|
|
146
|
+
let content;
|
|
147
|
+
let agentXml;
|
|
145
148
|
|
|
146
|
-
//
|
|
147
|
-
|
|
149
|
+
// Handle YAML agents - build in-memory to XML
|
|
150
|
+
if (agentFile.endsWith('.agent.yaml')) {
|
|
151
|
+
// Build agent from YAML (no customize file for web bundles)
|
|
152
|
+
const xmlContent = await this.yamlBuilder.buildFromYaml(agentPath, null, {
|
|
153
|
+
includeMetadata: false, // Don't include build metadata in web bundles
|
|
154
|
+
forWebBundle: true, // Use web-specific activation fragments
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
content = xmlContent;
|
|
158
|
+
agentXml = this.extractAgentXml(xmlContent);
|
|
159
|
+
} else {
|
|
160
|
+
// Legacy MD format - read and extract XML
|
|
161
|
+
content = await fs.readFile(agentPath, 'utf8');
|
|
162
|
+
agentXml = this.extractAgentXml(content);
|
|
163
|
+
}
|
|
148
164
|
|
|
149
165
|
if (!agentXml) {
|
|
150
166
|
this.stats.failedAgents++;
|
|
@@ -172,12 +188,17 @@ class WebBundler {
|
|
|
172
188
|
|
|
173
189
|
// Resolve dependencies with warning tracking
|
|
174
190
|
const dependencyWarnings = [];
|
|
175
|
-
const dependencies = await this.resolveAgentDependencies(agentXml, moduleName, dependencyWarnings);
|
|
191
|
+
const { dependencies, skippedWorkflows } = await this.resolveAgentDependencies(agentXml, moduleName, dependencyWarnings);
|
|
176
192
|
|
|
177
193
|
if (dependencyWarnings.length > 0) {
|
|
178
194
|
this.stats.warnings.push({ agent: agentName, warnings: dependencyWarnings });
|
|
179
195
|
}
|
|
180
196
|
|
|
197
|
+
// Remove commands for skipped workflows from agent XML
|
|
198
|
+
if (skippedWorkflows.length > 0) {
|
|
199
|
+
agentXml = this.removeSkippedWorkflowCommands(agentXml, skippedWorkflows);
|
|
200
|
+
}
|
|
201
|
+
|
|
181
202
|
// Build the bundle (no manifests for individual agents)
|
|
182
203
|
const bundle = this.buildAgentBundle(agentXml, dependencies);
|
|
183
204
|
|
|
@@ -198,6 +219,220 @@ class WebBundler {
|
|
|
198
219
|
console.log(` ${statusIcon} Bundled: ${agentName}.xml${isValid ? '' : chalk.yellow(' (invalid XML)')}`);
|
|
199
220
|
}
|
|
200
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Bundle a team - includes orchestrator and all agents with their dependencies
|
|
224
|
+
*/
|
|
225
|
+
async bundleTeam(moduleName, teamFile) {
|
|
226
|
+
const teamName = path.basename(teamFile, path.extname(teamFile));
|
|
227
|
+
console.log(chalk.dim(` → Processing team: ${teamName}`));
|
|
228
|
+
|
|
229
|
+
const teamPath = path.join(this.modulesPath, moduleName, 'teams', teamFile);
|
|
230
|
+
|
|
231
|
+
// Check if team file exists
|
|
232
|
+
if (!(await fs.pathExists(teamPath))) {
|
|
233
|
+
console.log(chalk.red(` ✗ Team file not found`));
|
|
234
|
+
throw new Error(`Team file not found: ${teamPath}`);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Read and parse team YAML
|
|
238
|
+
const teamContent = await fs.readFile(teamPath, 'utf8');
|
|
239
|
+
const teamConfig = yaml.load(teamContent);
|
|
240
|
+
|
|
241
|
+
if (!teamConfig || !teamConfig.bundle) {
|
|
242
|
+
console.log(chalk.red(` ✗ Invalid team configuration`));
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Start building the team bundle
|
|
247
|
+
const dependencies = new Map();
|
|
248
|
+
const processed = new Set();
|
|
249
|
+
const allAgentXmls = [];
|
|
250
|
+
const warnings = [];
|
|
251
|
+
|
|
252
|
+
// 1. First, always add the bmad-web-orchestrator (XML file only, no transformation needed)
|
|
253
|
+
const orchestratorXmlPath = path.join(this.sourceDir, 'core', 'agents', 'bmad-web-orchestrator.agent.xml');
|
|
254
|
+
|
|
255
|
+
if (await fs.pathExists(orchestratorXmlPath)) {
|
|
256
|
+
// Read the XML file directly - no transformation needed
|
|
257
|
+
const xmlContent = await fs.readFile(orchestratorXmlPath, 'utf8');
|
|
258
|
+
let orchestratorXml = xmlContent.trim();
|
|
259
|
+
|
|
260
|
+
// Process {project-root} references
|
|
261
|
+
orchestratorXml = this.processProjectRootReferences(orchestratorXml);
|
|
262
|
+
|
|
263
|
+
// Inject help/exit menu items only (orchestrator has its own activation)
|
|
264
|
+
orchestratorXml = this.injectHelpExitMenuItems(orchestratorXml);
|
|
265
|
+
|
|
266
|
+
// Resolve orchestrator dependencies
|
|
267
|
+
const { dependencies: orchDeps } = await this.resolveAgentDependencies(orchestratorXml, 'core', warnings);
|
|
268
|
+
|
|
269
|
+
// Merge orchestrator dependencies
|
|
270
|
+
for (const [id, content] of orchDeps) {
|
|
271
|
+
if (!dependencies.has(id)) {
|
|
272
|
+
dependencies.set(id, content);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Add orchestrator XML first
|
|
277
|
+
allAgentXmls.push(orchestratorXml);
|
|
278
|
+
console.log(chalk.gray(` + Added orchestrator: bmad-web-orchestrator`));
|
|
279
|
+
} else {
|
|
280
|
+
console.log(chalk.yellow(` ⚠ Orchestrator not found at: ${orchestratorXmlPath}`));
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// 2. Determine which agents to include
|
|
284
|
+
let agentsToBundle = [];
|
|
285
|
+
|
|
286
|
+
if (teamConfig.agents === '*' || (Array.isArray(teamConfig.agents) && teamConfig.agents.includes('*'))) {
|
|
287
|
+
// Include all agents from the module
|
|
288
|
+
const agentsPath = path.join(this.modulesPath, moduleName, 'agents');
|
|
289
|
+
if (await fs.pathExists(agentsPath)) {
|
|
290
|
+
const agentFiles = await fs.readdir(agentsPath);
|
|
291
|
+
agentsToBundle = agentFiles
|
|
292
|
+
.filter((file) => file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme')))
|
|
293
|
+
.map((file) => file.replace(/\.(agent\.yaml|md)$/, ''));
|
|
294
|
+
}
|
|
295
|
+
} else if (Array.isArray(teamConfig.agents)) {
|
|
296
|
+
// Include specific agents listed
|
|
297
|
+
agentsToBundle = teamConfig.agents;
|
|
298
|
+
} else {
|
|
299
|
+
console.log(chalk.yellow(` ⚠ No agents specified in team configuration`));
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// 3. Process each agent and their dependencies
|
|
303
|
+
for (const agentName of agentsToBundle) {
|
|
304
|
+
// Try YAML first, then MD
|
|
305
|
+
let agentPath = path.join(this.modulesPath, moduleName, 'agents', `${agentName}.agent.yaml`);
|
|
306
|
+
let isYaml = await fs.pathExists(agentPath);
|
|
307
|
+
|
|
308
|
+
if (!isYaml) {
|
|
309
|
+
agentPath = path.join(this.modulesPath, moduleName, 'agents', `${agentName}.md`);
|
|
310
|
+
if (!(await fs.pathExists(agentPath))) {
|
|
311
|
+
console.log(chalk.yellow(` ⚠ Agent not found: ${agentName}`));
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
let agentXml;
|
|
317
|
+
|
|
318
|
+
if (isYaml) {
|
|
319
|
+
// Build YAML agent in-memory - skip activation for team agents (orchestrator handles it)
|
|
320
|
+
const xmlContent = await this.yamlBuilder.buildFromYaml(agentPath, null, {
|
|
321
|
+
includeMetadata: false,
|
|
322
|
+
skipActivation: true, // Skip activation for team agents
|
|
323
|
+
});
|
|
324
|
+
agentXml = this.extractAgentXml(xmlContent);
|
|
325
|
+
} else {
|
|
326
|
+
// Read legacy MD agent
|
|
327
|
+
const agentContent = await fs.readFile(agentPath, 'utf8');
|
|
328
|
+
agentXml = this.extractAgentXml(agentContent);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
if (!agentXml) {
|
|
332
|
+
console.log(chalk.yellow(` ⚠ No XML found in agent: ${agentName}`));
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Skip agents with bundle="false"
|
|
337
|
+
if (this.shouldSkipBundling(agentXml)) {
|
|
338
|
+
console.log(chalk.gray(` ⊘ Skipped agent (bundle="false"): ${agentName}`));
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Process {project-root} references
|
|
343
|
+
agentXml = this.processProjectRootReferences(agentXml);
|
|
344
|
+
|
|
345
|
+
// Resolve agent dependencies
|
|
346
|
+
const agentWarnings = [];
|
|
347
|
+
const { dependencies: agentDeps, skippedWorkflows } = await this.resolveAgentDependencies(agentXml, moduleName, agentWarnings);
|
|
348
|
+
|
|
349
|
+
if (agentWarnings.length > 0) {
|
|
350
|
+
warnings.push({ agent: agentName, warnings: agentWarnings });
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Remove commands for skipped workflows from agent XML
|
|
354
|
+
if (skippedWorkflows.length > 0) {
|
|
355
|
+
agentXml = this.removeSkippedWorkflowCommands(agentXml, skippedWorkflows);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Merge agent dependencies (deduplicate)
|
|
359
|
+
for (const [id, content] of agentDeps) {
|
|
360
|
+
if (!dependencies.has(id)) {
|
|
361
|
+
dependencies.set(id, content);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Skip web activation injection for team agents - orchestrator handles everything
|
|
366
|
+
// Only inject help/exit menu items if missing
|
|
367
|
+
agentXml = this.injectHelpExitMenuItems(agentXml);
|
|
368
|
+
|
|
369
|
+
// Add agent XML to the collection
|
|
370
|
+
allAgentXmls.push(agentXml);
|
|
371
|
+
console.log(chalk.gray(` + Added agent: ${agentName}`));
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// 4. Build the team bundle XML
|
|
375
|
+
const bundle = this.buildTeamBundle(teamConfig.bundle, allAgentXmls, dependencies);
|
|
376
|
+
|
|
377
|
+
// 5. Validate XML
|
|
378
|
+
const isValid = await this.validateXml(bundle);
|
|
379
|
+
if (!isValid) {
|
|
380
|
+
console.log(chalk.red(` ⚠ Invalid XML generated for team!`));
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// 6. Write bundle to output
|
|
384
|
+
const outputPath = path.join(this.outputDir, moduleName, 'teams', `${teamName}.xml`);
|
|
385
|
+
await fs.ensureDir(path.dirname(outputPath));
|
|
386
|
+
await fs.writeFile(outputPath, bundle, 'utf8');
|
|
387
|
+
|
|
388
|
+
const statusIcon = isValid ? chalk.green('✓') : chalk.yellow('⚠');
|
|
389
|
+
console.log(` ${statusIcon} Bundled team: ${teamName}.xml${isValid ? '' : chalk.yellow(' (invalid XML)')}`);
|
|
390
|
+
|
|
391
|
+
// Track warnings
|
|
392
|
+
if (warnings.length > 0) {
|
|
393
|
+
this.stats.warnings.push(...warnings);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Build the final team bundle XML
|
|
399
|
+
*/
|
|
400
|
+
buildTeamBundle(teamMetadata, agentXmls, dependencies) {
|
|
401
|
+
const parts = ['<?xml version="1.0" encoding="UTF-8"?>', '<team-bundle>', ' <!-- Agent Definitions -->', ' <agents>'];
|
|
402
|
+
|
|
403
|
+
for (const agentXml of agentXmls) {
|
|
404
|
+
// Indent each agent XML properly (add 4 spaces to each line)
|
|
405
|
+
const indentedAgent = agentXml
|
|
406
|
+
.split('\n')
|
|
407
|
+
.map((line) => ' ' + line)
|
|
408
|
+
.join('\n');
|
|
409
|
+
parts.push(indentedAgent);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
parts.push(' </agents>');
|
|
413
|
+
|
|
414
|
+
// Add all dependencies
|
|
415
|
+
if (dependencies && dependencies.size > 0) {
|
|
416
|
+
parts.push('', ' <!-- Shared Dependencies -->', ' <dependencies>');
|
|
417
|
+
|
|
418
|
+
for (const [id, content] of dependencies) {
|
|
419
|
+
// All dependencies are now consistently wrapped in <file> elements
|
|
420
|
+
// Indent properly (add 4 spaces to each line)
|
|
421
|
+
const indentedContent = content
|
|
422
|
+
.split('\n')
|
|
423
|
+
.map((line) => ' ' + line)
|
|
424
|
+
.join('\n');
|
|
425
|
+
parts.push(indentedContent);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
parts.push(' </dependencies>');
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
parts.push('</team-bundle>');
|
|
432
|
+
|
|
433
|
+
return parts.join('\n');
|
|
434
|
+
}
|
|
435
|
+
|
|
201
436
|
/**
|
|
202
437
|
* Pre-discover all agents and teams in a module for manifest generation
|
|
203
438
|
*/
|
|
@@ -212,9 +447,20 @@ class WebBundler {
|
|
|
212
447
|
if (await fs.pathExists(agentsPath)) {
|
|
213
448
|
const files = await fs.readdir(agentsPath);
|
|
214
449
|
for (const file of files) {
|
|
215
|
-
if (file.endsWith('.md')) {
|
|
450
|
+
if (file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme'))) {
|
|
216
451
|
const agentPath = path.join(agentsPath, file);
|
|
217
|
-
|
|
452
|
+
let content;
|
|
453
|
+
|
|
454
|
+
if (file.endsWith('.agent.yaml')) {
|
|
455
|
+
// Build YAML agent in-memory
|
|
456
|
+
content = await this.yamlBuilder.buildFromYaml(agentPath, null, {
|
|
457
|
+
includeMetadata: false,
|
|
458
|
+
});
|
|
459
|
+
} else {
|
|
460
|
+
// Read legacy MD agent
|
|
461
|
+
content = await fs.readFile(agentPath, 'utf8');
|
|
462
|
+
}
|
|
463
|
+
|
|
218
464
|
const agentXml = this.extractAgentXml(content);
|
|
219
465
|
|
|
220
466
|
if (agentXml) {
|
|
@@ -223,7 +469,7 @@ class WebBundler {
|
|
|
223
469
|
continue;
|
|
224
470
|
}
|
|
225
471
|
|
|
226
|
-
const agentName = path.basename(file, '.md');
|
|
472
|
+
const agentName = file.endsWith('.agent.yaml') ? path.basename(file, '.agent.yaml') : path.basename(file, '.md');
|
|
227
473
|
// Use the shared generator to extract agent details (pass full content)
|
|
228
474
|
const agentDetails = AgentPartyGenerator.extractAgentDetails(content, moduleName, agentName);
|
|
229
475
|
if (agentDetails) {
|
|
@@ -265,16 +511,25 @@ class WebBundler {
|
|
|
265
511
|
async resolveAgentDependencies(agentXml, moduleName, warnings = []) {
|
|
266
512
|
const dependencies = new Map();
|
|
267
513
|
const processed = new Set();
|
|
514
|
+
const skippedWorkflows = [];
|
|
268
515
|
|
|
269
516
|
// Extract file references from agent XML
|
|
270
|
-
const
|
|
517
|
+
const { refs, workflowRefs } = this.extractFileReferences(agentXml);
|
|
271
518
|
|
|
272
|
-
// Process
|
|
273
|
-
for (const ref of
|
|
519
|
+
// Process regular file references
|
|
520
|
+
for (const ref of refs) {
|
|
274
521
|
await this.processFileDependency(ref, dependencies, processed, moduleName, warnings);
|
|
275
522
|
}
|
|
276
523
|
|
|
277
|
-
|
|
524
|
+
// Process workflow references with special handling
|
|
525
|
+
for (const workflowRef of workflowRefs) {
|
|
526
|
+
const result = await this.processWorkflowDependency(workflowRef, dependencies, processed, moduleName, warnings);
|
|
527
|
+
if (result && result.skipped) {
|
|
528
|
+
skippedWorkflows.push(workflowRef);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
return { dependencies, skippedWorkflows };
|
|
278
533
|
}
|
|
279
534
|
|
|
280
535
|
/**
|
|
@@ -282,6 +537,7 @@ class WebBundler {
|
|
|
282
537
|
*/
|
|
283
538
|
extractFileReferences(xml) {
|
|
284
539
|
const refs = new Set();
|
|
540
|
+
const workflowRefs = new Set();
|
|
285
541
|
|
|
286
542
|
// Match various file reference patterns
|
|
287
543
|
const patterns = [
|
|
@@ -292,7 +548,6 @@ class WebBundler {
|
|
|
292
548
|
/src="([^"]+)"/g, // Source paths
|
|
293
549
|
/system-prompts="([^"]+)"/g,
|
|
294
550
|
/tools="([^"]+)"/g,
|
|
295
|
-
/workflows="([^"]+)"/g,
|
|
296
551
|
/knowledge="([^"]+)"/g,
|
|
297
552
|
/{project-root}\/([^"'\s<>]+)/g,
|
|
298
553
|
];
|
|
@@ -303,13 +558,56 @@ class WebBundler {
|
|
|
303
558
|
let filePath = match[1];
|
|
304
559
|
// Remove {project-root} prefix if present
|
|
305
560
|
filePath = filePath.replace(/^{project-root}\//, '');
|
|
306
|
-
|
|
561
|
+
|
|
562
|
+
// Skip obvious placeholder/example paths
|
|
563
|
+
if (filePath && !filePath.includes('path/to/') && !filePath.includes('example')) {
|
|
307
564
|
refs.add(filePath);
|
|
308
565
|
}
|
|
309
566
|
}
|
|
310
567
|
}
|
|
311
568
|
|
|
312
|
-
|
|
569
|
+
// Extract workflow references - both 'workflow' and 'run-workflow' attributes
|
|
570
|
+
const workflowPatterns = [
|
|
571
|
+
/workflow="([^"]+)"/g, // Menu items with workflow attribute
|
|
572
|
+
/run-workflow="([^"]+)"/g, // Commands with run-workflow attribute
|
|
573
|
+
/validate-workflow="([^"]+)"/g, // Validation workflow references
|
|
574
|
+
];
|
|
575
|
+
|
|
576
|
+
for (const pattern of workflowPatterns) {
|
|
577
|
+
let match;
|
|
578
|
+
while ((match = pattern.exec(xml)) !== null) {
|
|
579
|
+
let workflowPath = match[1];
|
|
580
|
+
workflowPath = workflowPath.replace(/^{project-root}\//, '');
|
|
581
|
+
|
|
582
|
+
// Skip obvious placeholder/example paths
|
|
583
|
+
if (workflowPath && workflowPath.endsWith('.yaml') && !workflowPath.includes('path/to/') && !workflowPath.includes('example')) {
|
|
584
|
+
workflowRefs.add(workflowPath);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
return { refs: [...refs], workflowRefs: [...workflowRefs] };
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* Remove commands from agent XML that reference skipped workflows
|
|
594
|
+
*/
|
|
595
|
+
removeSkippedWorkflowCommands(agentXml, skippedWorkflows) {
|
|
596
|
+
let modifiedXml = agentXml;
|
|
597
|
+
|
|
598
|
+
// For each skipped workflow, find and remove the corresponding <c> command
|
|
599
|
+
for (const workflowPath of skippedWorkflows) {
|
|
600
|
+
// Match: <c cmd="..." run-workflow="workflowPath">...</c>
|
|
601
|
+
// Need to escape special regex characters in the path
|
|
602
|
+
const escapedPath = workflowPath.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
|
|
603
|
+
|
|
604
|
+
// Pattern to match the command line with this workflow
|
|
605
|
+
const pattern = new RegExp(`\\s*<c\\s+cmd="[^"]*"\\s+run-workflow="[^"]*${escapedPath}"[^>]*>.*?</c>\\s*`, 'gs');
|
|
606
|
+
|
|
607
|
+
modifiedXml = modifiedXml.replace(pattern, '');
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
return modifiedXml;
|
|
313
611
|
}
|
|
314
612
|
|
|
315
613
|
/**
|
|
@@ -322,6 +620,11 @@ class WebBundler {
|
|
|
322
620
|
}
|
|
323
621
|
processed.add(filePath);
|
|
324
622
|
|
|
623
|
+
// Skip agent-manifest.csv manifest for web bundles (agents are already bundled)
|
|
624
|
+
if (filePath === 'bmad/_cfg/agent-manifest.csv' || filePath.endsWith('/agent-manifest.csv')) {
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
|
|
325
628
|
// Handle wildcard patterns
|
|
326
629
|
if (filePath.includes('*')) {
|
|
327
630
|
await this.processWildcardDependency(filePath, dependencies, processed, moduleName, warnings);
|
|
@@ -447,8 +750,10 @@ class WebBundler {
|
|
|
447
750
|
|
|
448
751
|
indexParts.push(' </items>', '</file-index>');
|
|
449
752
|
|
|
450
|
-
// Store the XML version
|
|
451
|
-
|
|
753
|
+
// Store the XML version wrapped in a file element
|
|
754
|
+
const csvXml = indexParts.join('\n');
|
|
755
|
+
const wrappedCsv = `<file id="${filePath}" type="xml">\n${csvXml}\n</file>`;
|
|
756
|
+
dependencies.set(filePath, wrappedCsv);
|
|
452
757
|
|
|
453
758
|
// Process referenced files from CSV
|
|
454
759
|
for (const refId of referencedFiles) {
|
|
@@ -470,16 +775,207 @@ class WebBundler {
|
|
|
470
775
|
}
|
|
471
776
|
}
|
|
472
777
|
|
|
473
|
-
//
|
|
474
|
-
|
|
778
|
+
// Determine file type for wrapping
|
|
779
|
+
let fileType = 'text';
|
|
780
|
+
if (ext === '.xml' || (ext === '.md' && processedContent.trim().startsWith('<'))) {
|
|
781
|
+
fileType = 'xml';
|
|
782
|
+
} else
|
|
783
|
+
switch (ext) {
|
|
784
|
+
case '.yaml':
|
|
785
|
+
case '.yml': {
|
|
786
|
+
fileType = 'yaml';
|
|
787
|
+
|
|
788
|
+
break;
|
|
789
|
+
}
|
|
790
|
+
case '.json': {
|
|
791
|
+
fileType = 'json';
|
|
792
|
+
|
|
793
|
+
break;
|
|
794
|
+
}
|
|
795
|
+
case '.md': {
|
|
796
|
+
fileType = 'md';
|
|
797
|
+
|
|
798
|
+
break;
|
|
799
|
+
}
|
|
800
|
+
// No default
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
// Wrap content in file element and store
|
|
804
|
+
const wrappedContent = this.wrapContentInXml(processedContent, filePath, fileType);
|
|
805
|
+
dependencies.set(filePath, wrappedContent);
|
|
475
806
|
|
|
476
807
|
// Recursively scan for more dependencies
|
|
477
|
-
const nestedRefs = this.extractFileReferences(processedContent);
|
|
808
|
+
const { refs: nestedRefs } = this.extractFileReferences(processedContent);
|
|
478
809
|
for (const ref of nestedRefs) {
|
|
479
810
|
await this.processFileDependency(ref, dependencies, processed, moduleName, warnings);
|
|
480
811
|
}
|
|
481
812
|
}
|
|
482
813
|
|
|
814
|
+
/**
|
|
815
|
+
* Process a workflow YAML file and its bundle files
|
|
816
|
+
*/
|
|
817
|
+
async processWorkflowDependency(workflowPath, dependencies, processed, moduleName, warnings = []) {
|
|
818
|
+
// Skip if already processed
|
|
819
|
+
if (processed.has(workflowPath)) {
|
|
820
|
+
return { skipped: false };
|
|
821
|
+
}
|
|
822
|
+
processed.add(workflowPath);
|
|
823
|
+
|
|
824
|
+
// Resolve actual file path
|
|
825
|
+
const actualPath = this.resolveFilePath(workflowPath, moduleName);
|
|
826
|
+
|
|
827
|
+
if (!actualPath || !(await fs.pathExists(actualPath))) {
|
|
828
|
+
warnings.push(workflowPath);
|
|
829
|
+
return { skipped: true };
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
// Read and parse YAML file
|
|
833
|
+
const yamlContent = await fs.readFile(actualPath, 'utf8');
|
|
834
|
+
let workflowConfig;
|
|
835
|
+
|
|
836
|
+
try {
|
|
837
|
+
workflowConfig = yaml.load(yamlContent);
|
|
838
|
+
} catch (error) {
|
|
839
|
+
warnings.push(`${workflowPath} (invalid YAML: ${error.message})`);
|
|
840
|
+
return { skipped: true };
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
// Check if web_bundle is explicitly set to false
|
|
844
|
+
if (workflowConfig.web_bundle === false) {
|
|
845
|
+
// Mark this workflow as skipped so we can remove the command from agent
|
|
846
|
+
return { skipped: true, workflowPath };
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
// Create YAML content with only web_bundle section (flattened)
|
|
850
|
+
let bundleYamlContent;
|
|
851
|
+
if (workflowConfig.web_bundle && typeof workflowConfig.web_bundle === 'object') {
|
|
852
|
+
// Only include the web_bundle content, flattened to root level
|
|
853
|
+
bundleYamlContent = yaml.dump(workflowConfig.web_bundle);
|
|
854
|
+
} else {
|
|
855
|
+
// If no web_bundle section, include full YAML
|
|
856
|
+
bundleYamlContent = yamlContent;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// Include the YAML file with only web_bundle content, wrapped in XML
|
|
860
|
+
const yamlId = workflowPath.replace(/^{project-root}\//, '');
|
|
861
|
+
const wrappedYaml = this.wrapContentInXml(bundleYamlContent, yamlId, 'yaml');
|
|
862
|
+
dependencies.set(yamlId, wrappedYaml);
|
|
863
|
+
|
|
864
|
+
// Always include core workflow task when processing workflows
|
|
865
|
+
await this.includeCoreWorkflowFiles(dependencies, processed, moduleName, warnings);
|
|
866
|
+
|
|
867
|
+
// Check if advanced elicitation is enabled
|
|
868
|
+
if (workflowConfig.web_bundle && workflowConfig.web_bundle.use_advanced_elicitation) {
|
|
869
|
+
await this.includeAdvancedElicitationFiles(dependencies, processed, moduleName, warnings);
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
// Process web_bundle_files if they exist
|
|
873
|
+
if (workflowConfig.web_bundle && workflowConfig.web_bundle.web_bundle_files) {
|
|
874
|
+
const bundleFiles = workflowConfig.web_bundle.web_bundle_files;
|
|
875
|
+
|
|
876
|
+
for (const bundleFilePath of bundleFiles) {
|
|
877
|
+
if (processed.has(bundleFilePath)) {
|
|
878
|
+
continue;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
const bundleActualPath = this.resolveFilePath(bundleFilePath, moduleName);
|
|
882
|
+
|
|
883
|
+
if (!bundleActualPath || !(await fs.pathExists(bundleActualPath))) {
|
|
884
|
+
warnings.push(bundleFilePath);
|
|
885
|
+
continue;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
// Check if this is another workflow.yaml file - if so, recursively process it
|
|
889
|
+
if (bundleFilePath.endsWith('workflow.yaml')) {
|
|
890
|
+
// Recursively process this workflow and its dependencies
|
|
891
|
+
await this.processWorkflowDependency(bundleFilePath, dependencies, processed, moduleName, warnings);
|
|
892
|
+
} else {
|
|
893
|
+
// Regular file - process normally
|
|
894
|
+
processed.add(bundleFilePath);
|
|
895
|
+
|
|
896
|
+
// Read the file content
|
|
897
|
+
const fileContent = await fs.readFile(bundleActualPath, 'utf8');
|
|
898
|
+
const fileExt = path.extname(bundleActualPath).toLowerCase().replace('.', '');
|
|
899
|
+
|
|
900
|
+
// Wrap in XML with proper escaping
|
|
901
|
+
const wrappedContent = this.wrapContentInXml(fileContent, bundleFilePath, fileExt);
|
|
902
|
+
dependencies.set(bundleFilePath, wrappedContent);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
return { skipped: false };
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* Include core workflow task files
|
|
912
|
+
*/
|
|
913
|
+
async includeCoreWorkflowFiles(dependencies, processed, moduleName, warnings = []) {
|
|
914
|
+
const coreWorkflowPath = 'bmad/core/tasks/workflow.xml';
|
|
915
|
+
|
|
916
|
+
if (processed.has(coreWorkflowPath)) {
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
919
|
+
processed.add(coreWorkflowPath);
|
|
920
|
+
|
|
921
|
+
const actualPath = this.resolveFilePath(coreWorkflowPath, moduleName);
|
|
922
|
+
|
|
923
|
+
if (!actualPath || !(await fs.pathExists(actualPath))) {
|
|
924
|
+
warnings.push(coreWorkflowPath);
|
|
925
|
+
return;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
const fileContent = await fs.readFile(actualPath, 'utf8');
|
|
929
|
+
const wrappedContent = this.wrapContentInXml(fileContent, coreWorkflowPath, 'xml');
|
|
930
|
+
dependencies.set(coreWorkflowPath, wrappedContent);
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
/**
|
|
934
|
+
* Include advanced elicitation files
|
|
935
|
+
*/
|
|
936
|
+
async includeAdvancedElicitationFiles(dependencies, processed, moduleName, warnings = []) {
|
|
937
|
+
const elicitationFiles = ['bmad/core/tasks/adv-elicit.xml', 'bmad/core/tasks/adv-elicit-methods.csv'];
|
|
938
|
+
|
|
939
|
+
for (const filePath of elicitationFiles) {
|
|
940
|
+
if (processed.has(filePath)) {
|
|
941
|
+
continue;
|
|
942
|
+
}
|
|
943
|
+
processed.add(filePath);
|
|
944
|
+
|
|
945
|
+
const actualPath = this.resolveFilePath(filePath, moduleName);
|
|
946
|
+
|
|
947
|
+
if (!actualPath || !(await fs.pathExists(actualPath))) {
|
|
948
|
+
warnings.push(filePath);
|
|
949
|
+
continue;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
const fileContent = await fs.readFile(actualPath, 'utf8');
|
|
953
|
+
const fileExt = path.extname(actualPath).toLowerCase().replace('.', '');
|
|
954
|
+
const wrappedContent = this.wrapContentInXml(fileContent, filePath, fileExt);
|
|
955
|
+
dependencies.set(filePath, wrappedContent);
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
/**
|
|
960
|
+
* Wrap file content in XML with proper escaping
|
|
961
|
+
*/
|
|
962
|
+
wrapContentInXml(content, id, type = 'text') {
|
|
963
|
+
// For XML files, include directly without CDATA (they're already valid XML)
|
|
964
|
+
if (type === 'xml') {
|
|
965
|
+
// XML files can be included directly as they're already well-formed
|
|
966
|
+
// Just wrap in a file element
|
|
967
|
+
return `<file id="${id}" type="${type}">\n${content}\n</file>`;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
// For all other file types, use CDATA to preserve content exactly
|
|
971
|
+
// Escape any ]]> sequences in the content by splitting CDATA sections
|
|
972
|
+
// Replace ]]> with ]]]]><![CDATA[> to properly escape it within CDATA
|
|
973
|
+
const escapedContent = content.replaceAll(']]>', ']]]]><![CDATA[>');
|
|
974
|
+
|
|
975
|
+
// Use CDATA to preserve content exactly as-is, including special characters
|
|
976
|
+
return `<file id="${id}" type="${type}"><![CDATA[${escapedContent}]]></file>`;
|
|
977
|
+
}
|
|
978
|
+
|
|
483
979
|
/**
|
|
484
980
|
* Process wildcard dependency patterns
|
|
485
981
|
*/
|
|
@@ -665,10 +1161,113 @@ class WebBundler {
|
|
|
665
1161
|
return parts.join('');
|
|
666
1162
|
}
|
|
667
1163
|
|
|
1164
|
+
/**
|
|
1165
|
+
* Inject help and exit menu items into agent XML
|
|
1166
|
+
*/
|
|
1167
|
+
injectHelpExitMenuItems(agentXml) {
|
|
1168
|
+
// Check if menu already has help and exit
|
|
1169
|
+
const hasHelp = agentXml.includes('cmd="*help"') || agentXml.includes('trigger="*help"');
|
|
1170
|
+
const hasExit = agentXml.includes('cmd="*exit"') || agentXml.includes('trigger="*exit"');
|
|
1171
|
+
|
|
1172
|
+
if (hasHelp && hasExit) {
|
|
1173
|
+
return agentXml; // Already has both, skip injection
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
// Find the menu section
|
|
1177
|
+
const menuMatch = agentXml.match(/(<menu>[\s\S]*?<\/menu>)/);
|
|
1178
|
+
if (!menuMatch) {
|
|
1179
|
+
return agentXml; // No menu found, skip injection
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
const menuContent = menuMatch[1];
|
|
1183
|
+
const menuClosingMatch = menuContent.match(/(\s*)<\/menu>/);
|
|
1184
|
+
if (!menuClosingMatch) {
|
|
1185
|
+
return agentXml;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
const indent = menuClosingMatch[1];
|
|
1189
|
+
const menuItems = [];
|
|
1190
|
+
|
|
1191
|
+
if (!hasHelp) {
|
|
1192
|
+
menuItems.push(`${indent}<item cmd="*help">Show numbered menu</item>`);
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
if (!hasExit) {
|
|
1196
|
+
menuItems.push(`${indent}<item cmd="*exit">Exit with confirmation</item>`);
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
if (menuItems.length === 0) {
|
|
1200
|
+
return agentXml;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
// Inject menu items before closing </menu> tag
|
|
1204
|
+
const newMenuContent = menuContent.replace(/(\s*)<\/menu>/, `\n${menuItems.join('\n')}\n${indent}</menu>`);
|
|
1205
|
+
return agentXml.replace(menuContent, newMenuContent);
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
/**
|
|
1209
|
+
* Inject web activation instructions into agent XML
|
|
1210
|
+
*/
|
|
1211
|
+
injectWebActivation(agentXml) {
|
|
1212
|
+
// First, always inject help/exit menu items
|
|
1213
|
+
agentXml = this.injectHelpExitMenuItems(agentXml);
|
|
1214
|
+
|
|
1215
|
+
// Load the web activation template
|
|
1216
|
+
const activationPath = path.join(this.sourceDir, 'utility', 'models', 'agent-activation-web.xml');
|
|
1217
|
+
|
|
1218
|
+
if (!fs.existsSync(activationPath)) {
|
|
1219
|
+
console.warn(chalk.yellow('Warning: agent-activation-web.xml not found, skipping activation injection'));
|
|
1220
|
+
return agentXml;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
const activationXml = fs.readFileSync(activationPath, 'utf8');
|
|
1224
|
+
|
|
1225
|
+
// For web bundles, ALWAYS replace existing activation with web activation
|
|
1226
|
+
// This is because fragment-based activation assumes filesystem access which won't work in web bundles
|
|
1227
|
+
const hasActivation = agentXml.includes('<activation');
|
|
1228
|
+
|
|
1229
|
+
if (hasActivation) {
|
|
1230
|
+
// Replace existing activation block with web activation
|
|
1231
|
+
const injectedXml = agentXml.replace(/<activation[^>]*>[\s\S]*?<\/activation>/, activationXml);
|
|
1232
|
+
return injectedXml;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
// Check for critical-actions block (legacy)
|
|
1236
|
+
const hasCriticalActions = agentXml.includes('<critical-actions');
|
|
1237
|
+
|
|
1238
|
+
if (hasCriticalActions) {
|
|
1239
|
+
// Replace critical-actions block with activation
|
|
1240
|
+
const injectedXml = agentXml.replace(/<critical-actions>[\s\S]*?<\/critical-actions>/, activationXml);
|
|
1241
|
+
return injectedXml;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
// If no critical-actions, inject before closing </agent> tag
|
|
1245
|
+
const closingTagMatch = agentXml.match(/(\s*)<\/agent>/);
|
|
1246
|
+
if (!closingTagMatch) {
|
|
1247
|
+
console.warn(chalk.yellow('Warning: Could not find </agent> tag for activation injection'));
|
|
1248
|
+
return agentXml;
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
// Inject the activation block before the closing </agent> tag
|
|
1252
|
+
// Properly indent each line of the activation XML
|
|
1253
|
+
const indent = closingTagMatch[1];
|
|
1254
|
+
const indentedActivation = activationXml
|
|
1255
|
+
.split('\n')
|
|
1256
|
+
.map((line) => (line.trim() ? indent + line : ''))
|
|
1257
|
+
.join('\n');
|
|
1258
|
+
|
|
1259
|
+
const injectedXml = agentXml.replace(/(\s*)<\/agent>/, `\n${indentedActivation}\n${indent}</agent>`);
|
|
1260
|
+
|
|
1261
|
+
return injectedXml;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
668
1264
|
/**
|
|
669
1265
|
* Build the final agent bundle XML
|
|
670
1266
|
*/
|
|
671
1267
|
buildAgentBundle(agentXml, dependencies) {
|
|
1268
|
+
// Web activation is now handled by fragments during YAML building
|
|
1269
|
+
// agentXml = this.injectWebActivation(agentXml);
|
|
1270
|
+
|
|
672
1271
|
const parts = [
|
|
673
1272
|
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
674
1273
|
'<agent-bundle>',
|
|
@@ -676,14 +1275,13 @@ class WebBundler {
|
|
|
676
1275
|
' ' + agentXml.replaceAll('\n', '\n '),
|
|
677
1276
|
];
|
|
678
1277
|
|
|
679
|
-
// Add dependencies
|
|
1278
|
+
// Add dependencies (all are now consistently wrapped in <file> elements)
|
|
680
1279
|
if (dependencies && dependencies.size > 0) {
|
|
681
1280
|
parts.push('\n <!-- Dependencies -->');
|
|
682
1281
|
for (const [id, content] of dependencies) {
|
|
683
|
-
//
|
|
684
|
-
const escapedContent = this.escapeXmlContent(content);
|
|
1282
|
+
// All dependencies are now wrapped in <file> elements
|
|
685
1283
|
// Indent properly
|
|
686
|
-
const indentedContent =
|
|
1284
|
+
const indentedContent = content
|
|
687
1285
|
.split('\n')
|
|
688
1286
|
.map((line) => ' ' + line)
|
|
689
1287
|
.join('\n');
|
|
@@ -732,7 +1330,8 @@ class WebBundler {
|
|
|
732
1330
|
const files = await fs.readdir(agentsPath);
|
|
733
1331
|
|
|
734
1332
|
for (const file of files) {
|
|
735
|
-
|
|
1333
|
+
// Look for .agent.yaml files (new format) or .md files (legacy format)
|
|
1334
|
+
if (file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme'))) {
|
|
736
1335
|
agents.push(file);
|
|
737
1336
|
}
|
|
738
1337
|
}
|
|
@@ -754,7 +1353,7 @@ class WebBundler {
|
|
|
754
1353
|
const files = await fs.readdir(teamsPath);
|
|
755
1354
|
|
|
756
1355
|
for (const file of files) {
|
|
757
|
-
if (file.endsWith('.
|
|
1356
|
+
if (file.endsWith('.yaml') || file.endsWith('.yml')) {
|
|
758
1357
|
teams.push(file);
|
|
759
1358
|
}
|
|
760
1359
|
}
|
|
@@ -794,8 +1393,8 @@ class WebBundler {
|
|
|
794
1393
|
// Ensure temp directory exists
|
|
795
1394
|
await fs.ensureDir(this.tempManifestDir);
|
|
796
1395
|
|
|
797
|
-
// Generate agent-
|
|
798
|
-
const agentPartyPath = path.join(this.tempManifestDir, 'agent-
|
|
1396
|
+
// Generate agent-manifest.csv using shared generator
|
|
1397
|
+
const agentPartyPath = path.join(this.tempManifestDir, 'agent-manifest.csv');
|
|
799
1398
|
await AgentPartyGenerator.writeAgentParty(agentPartyPath, this.discoveredAgents, { forWeb: true });
|
|
800
1399
|
|
|
801
1400
|
console.log(chalk.dim(' ✓ Created temporary manifest files'));
|
|
@@ -853,7 +1452,7 @@ class WebBundler {
|
|
|
853
1452
|
|
|
854
1453
|
// Group and display warnings by agent
|
|
855
1454
|
for (const agentWarning of this.stats.warnings) {
|
|
856
|
-
if (agentWarning.warnings.length > 0) {
|
|
1455
|
+
if (agentWarning && agentWarning.warnings && agentWarning.warnings.length > 0) {
|
|
857
1456
|
console.log(chalk.bold(`\n ${agentWarning.agent}:`));
|
|
858
1457
|
// Display unique warnings for this agent
|
|
859
1458
|
const uniqueWarnings = [...new Set(agentWarning.warnings)];
|