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,6 +1,7 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const yaml = require('js-yaml');
|
|
4
|
+
const crypto = require('node:crypto');
|
|
4
5
|
const { getSourcePath, getModulePath } = require('../../../lib/project-root');
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -11,22 +12,42 @@ class ManifestGenerator {
|
|
|
11
12
|
this.workflows = [];
|
|
12
13
|
this.agents = [];
|
|
13
14
|
this.tasks = [];
|
|
15
|
+
this.tools = [];
|
|
14
16
|
this.modules = [];
|
|
15
17
|
this.files = [];
|
|
18
|
+
this.selectedIdes = [];
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
/**
|
|
19
22
|
* Generate all manifests for the installation
|
|
20
23
|
* @param {string} bmadDir - BMAD installation directory
|
|
21
24
|
* @param {Array} selectedModules - Selected modules for installation
|
|
25
|
+
* @param {Array} installedFiles - All installed files (optional, for hash tracking)
|
|
22
26
|
*/
|
|
23
|
-
async generateManifests(bmadDir, selectedModules) {
|
|
27
|
+
async generateManifests(bmadDir, selectedModules, installedFiles = [], options = {}) {
|
|
24
28
|
// Create _cfg directory if it doesn't exist
|
|
25
29
|
const cfgDir = path.join(bmadDir, '_cfg');
|
|
26
30
|
await fs.ensureDir(cfgDir);
|
|
27
31
|
|
|
28
|
-
// Store modules list
|
|
29
|
-
|
|
32
|
+
// Store modules list (all modules including preserved ones)
|
|
33
|
+
const preservedModules = options.preservedModules || [];
|
|
34
|
+
this.modules = ['core', ...selectedModules, ...preservedModules];
|
|
35
|
+
this.updatedModules = ['core', ...selectedModules]; // Only these get rescanned
|
|
36
|
+
this.preservedModules = preservedModules; // These stay as-is in CSVs
|
|
37
|
+
this.bmadDir = bmadDir;
|
|
38
|
+
this.allInstalledFiles = installedFiles;
|
|
39
|
+
|
|
40
|
+
if (!Object.prototype.hasOwnProperty.call(options, 'ides')) {
|
|
41
|
+
throw new Error('ManifestGenerator requires `options.ides` to be provided – installer should supply the selected IDEs array.');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const resolvedIdes = options.ides ?? [];
|
|
45
|
+
if (!Array.isArray(resolvedIdes)) {
|
|
46
|
+
throw new TypeError('ManifestGenerator expected `options.ides` to be an array.');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Filter out any undefined/null values from IDE list
|
|
50
|
+
this.selectedIdes = resolvedIdes.filter((ide) => ide && typeof ide === 'string');
|
|
30
51
|
|
|
31
52
|
// Collect workflow data
|
|
32
53
|
await this.collectWorkflows(selectedModules);
|
|
@@ -37,37 +58,51 @@ class ManifestGenerator {
|
|
|
37
58
|
// Collect task data
|
|
38
59
|
await this.collectTasks(selectedModules);
|
|
39
60
|
|
|
40
|
-
//
|
|
41
|
-
await this.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
61
|
+
// Collect tool data
|
|
62
|
+
await this.collectTools(selectedModules);
|
|
63
|
+
|
|
64
|
+
// Write manifest files and collect their paths
|
|
65
|
+
const manifestFiles = [
|
|
66
|
+
await this.writeMainManifest(cfgDir),
|
|
67
|
+
await this.writeWorkflowManifest(cfgDir),
|
|
68
|
+
await this.writeAgentManifest(cfgDir),
|
|
69
|
+
await this.writeTaskManifest(cfgDir),
|
|
70
|
+
await this.writeToolManifest(cfgDir),
|
|
71
|
+
await this.writeFilesManifest(cfgDir),
|
|
72
|
+
];
|
|
46
73
|
|
|
47
74
|
return {
|
|
48
75
|
workflows: this.workflows.length,
|
|
49
76
|
agents: this.agents.length,
|
|
50
77
|
tasks: this.tasks.length,
|
|
78
|
+
tools: this.tools.length,
|
|
51
79
|
files: this.files.length,
|
|
80
|
+
manifestFiles: manifestFiles,
|
|
52
81
|
};
|
|
53
82
|
}
|
|
54
83
|
|
|
55
84
|
/**
|
|
56
85
|
* Collect all workflows from core and selected modules
|
|
86
|
+
* Scans the INSTALLED bmad directory, not the source
|
|
57
87
|
*/
|
|
58
88
|
async collectWorkflows(selectedModules) {
|
|
59
89
|
this.workflows = [];
|
|
60
90
|
|
|
61
|
-
// Get core workflows
|
|
62
|
-
const corePath =
|
|
63
|
-
|
|
64
|
-
|
|
91
|
+
// Get core workflows from installed bmad directory
|
|
92
|
+
const corePath = path.join(this.bmadDir, 'core');
|
|
93
|
+
if (await fs.pathExists(corePath)) {
|
|
94
|
+
const coreWorkflows = await this.getWorkflowsFromPath(corePath, 'core');
|
|
95
|
+
this.workflows.push(...coreWorkflows);
|
|
96
|
+
}
|
|
65
97
|
|
|
66
|
-
// Get module workflows
|
|
98
|
+
// Get module workflows from installed bmad directory
|
|
67
99
|
for (const moduleName of selectedModules) {
|
|
68
|
-
const modulePath =
|
|
69
|
-
|
|
70
|
-
|
|
100
|
+
const modulePath = path.join(this.bmadDir, moduleName);
|
|
101
|
+
|
|
102
|
+
if (await fs.pathExists(modulePath)) {
|
|
103
|
+
const moduleWorkflows = await this.getWorkflowsFromPath(modulePath, moduleName);
|
|
104
|
+
this.workflows.push(...moduleWorkflows);
|
|
105
|
+
}
|
|
71
106
|
}
|
|
72
107
|
}
|
|
73
108
|
|
|
@@ -111,11 +146,15 @@ class ManifestGenerator {
|
|
|
111
146
|
? `bmad/core/workflows/${relativePath}/workflow.yaml`
|
|
112
147
|
: `bmad/${moduleName}/workflows/${relativePath}/workflow.yaml`;
|
|
113
148
|
|
|
149
|
+
// Check for standalone property (default: false)
|
|
150
|
+
const standalone = workflow.standalone === true;
|
|
151
|
+
|
|
114
152
|
workflows.push({
|
|
115
153
|
name: workflow.name,
|
|
116
154
|
description: workflow.description.replaceAll('"', '""'), // Escape quotes for CSV
|
|
117
155
|
module: moduleName,
|
|
118
156
|
path: installPath,
|
|
157
|
+
standalone: standalone,
|
|
119
158
|
});
|
|
120
159
|
|
|
121
160
|
// Add to files list
|
|
@@ -139,59 +178,101 @@ class ManifestGenerator {
|
|
|
139
178
|
|
|
140
179
|
/**
|
|
141
180
|
* Collect all agents from core and selected modules
|
|
181
|
+
* Scans the INSTALLED bmad directory, not the source
|
|
142
182
|
*/
|
|
143
183
|
async collectAgents(selectedModules) {
|
|
144
184
|
this.agents = [];
|
|
145
185
|
|
|
146
|
-
// Get core agents
|
|
147
|
-
const
|
|
148
|
-
const coreAgentsPath = path.join(corePath, 'agents');
|
|
186
|
+
// Get core agents from installed bmad directory
|
|
187
|
+
const coreAgentsPath = path.join(this.bmadDir, 'core', 'agents');
|
|
149
188
|
if (await fs.pathExists(coreAgentsPath)) {
|
|
150
189
|
const coreAgents = await this.getAgentsFromDir(coreAgentsPath, 'core');
|
|
151
190
|
this.agents.push(...coreAgents);
|
|
152
191
|
}
|
|
153
192
|
|
|
154
|
-
// Get module agents
|
|
193
|
+
// Get module agents from installed bmad directory
|
|
155
194
|
for (const moduleName of selectedModules) {
|
|
156
|
-
const
|
|
157
|
-
const agentsPath = path.join(modulePath, 'agents');
|
|
195
|
+
const agentsPath = path.join(this.bmadDir, moduleName, 'agents');
|
|
158
196
|
|
|
159
197
|
if (await fs.pathExists(agentsPath)) {
|
|
160
198
|
const moduleAgents = await this.getAgentsFromDir(agentsPath, moduleName);
|
|
161
199
|
this.agents.push(...moduleAgents);
|
|
162
200
|
}
|
|
163
201
|
}
|
|
202
|
+
|
|
203
|
+
// Get standalone agents from bmad/agents/ directory
|
|
204
|
+
const standaloneAgentsDir = path.join(this.bmadDir, 'agents');
|
|
205
|
+
if (await fs.pathExists(standaloneAgentsDir)) {
|
|
206
|
+
const agentDirs = await fs.readdir(standaloneAgentsDir, { withFileTypes: true });
|
|
207
|
+
|
|
208
|
+
for (const agentDir of agentDirs) {
|
|
209
|
+
if (!agentDir.isDirectory()) continue;
|
|
210
|
+
|
|
211
|
+
const agentDirPath = path.join(standaloneAgentsDir, agentDir.name);
|
|
212
|
+
const standaloneAgents = await this.getAgentsFromDir(agentDirPath, 'standalone');
|
|
213
|
+
this.agents.push(...standaloneAgents);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
164
216
|
}
|
|
165
217
|
|
|
166
218
|
/**
|
|
167
219
|
* Get agents from a directory
|
|
220
|
+
* Only includes compiled .md files (not .agent.yaml source files)
|
|
168
221
|
*/
|
|
169
222
|
async getAgentsFromDir(dirPath, moduleName) {
|
|
170
223
|
const agents = [];
|
|
171
224
|
const files = await fs.readdir(dirPath);
|
|
172
225
|
|
|
173
226
|
for (const file of files) {
|
|
174
|
-
|
|
227
|
+
// Only include .md files, skip .agent.yaml source files and README.md
|
|
228
|
+
if (file.endsWith('.md') && !file.endsWith('.agent.yaml') && file.toLowerCase() !== 'readme.md') {
|
|
175
229
|
const filePath = path.join(dirPath, file);
|
|
176
230
|
const content = await fs.readFile(filePath, 'utf8');
|
|
177
231
|
|
|
232
|
+
// Skip files that don't contain <agent> tag (e.g., README files)
|
|
233
|
+
if (!content.includes('<agent')) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
|
|
178
237
|
// Skip web-only agents
|
|
179
238
|
if (content.includes('localskip="true"')) {
|
|
180
239
|
continue;
|
|
181
240
|
}
|
|
182
241
|
|
|
183
|
-
// Extract agent metadata from
|
|
242
|
+
// Extract agent metadata from the XML structure
|
|
184
243
|
const nameMatch = content.match(/name="([^"]+)"/);
|
|
185
|
-
const
|
|
244
|
+
const titleMatch = content.match(/title="([^"]+)"/);
|
|
245
|
+
const iconMatch = content.match(/icon="([^"]+)"/);
|
|
246
|
+
|
|
247
|
+
// Extract persona fields
|
|
248
|
+
const roleMatch = content.match(/<role>([^<]+)<\/role>/);
|
|
249
|
+
const identityMatch = content.match(/<identity>([\s\S]*?)<\/identity>/);
|
|
250
|
+
const styleMatch = content.match(/<communication_style>([\s\S]*?)<\/communication_style>/);
|
|
251
|
+
const principlesMatch = content.match(/<principles>([\s\S]*?)<\/principles>/);
|
|
186
252
|
|
|
187
253
|
// Build relative path for installation
|
|
188
254
|
const installPath = moduleName === 'core' ? `bmad/core/agents/${file}` : `bmad/${moduleName}/agents/${file}`;
|
|
189
255
|
|
|
190
256
|
const agentName = file.replace('.md', '');
|
|
257
|
+
|
|
258
|
+
// Helper function to clean and escape CSV content
|
|
259
|
+
const cleanForCSV = (text) => {
|
|
260
|
+
if (!text) return '';
|
|
261
|
+
return text
|
|
262
|
+
.trim()
|
|
263
|
+
.replaceAll(/\s+/g, ' ') // Normalize whitespace
|
|
264
|
+
.replaceAll('"', '""'); // Escape quotes for CSV
|
|
265
|
+
};
|
|
266
|
+
|
|
191
267
|
agents.push({
|
|
192
268
|
name: agentName,
|
|
193
269
|
displayName: nameMatch ? nameMatch[1] : agentName,
|
|
194
|
-
|
|
270
|
+
title: titleMatch ? titleMatch[1] : '',
|
|
271
|
+
icon: iconMatch ? iconMatch[1] : '',
|
|
272
|
+
role: roleMatch ? cleanForCSV(roleMatch[1]) : '',
|
|
273
|
+
identity: identityMatch ? cleanForCSV(identityMatch[1]) : '',
|
|
274
|
+
communicationStyle: styleMatch ? cleanForCSV(styleMatch[1]) : '',
|
|
275
|
+
principles: principlesMatch ? cleanForCSV(principlesMatch[1]) : '',
|
|
195
276
|
module: moduleName,
|
|
196
277
|
path: installPath,
|
|
197
278
|
});
|
|
@@ -211,22 +292,21 @@ class ManifestGenerator {
|
|
|
211
292
|
|
|
212
293
|
/**
|
|
213
294
|
* Collect all tasks from core and selected modules
|
|
295
|
+
* Scans the INSTALLED bmad directory, not the source
|
|
214
296
|
*/
|
|
215
297
|
async collectTasks(selectedModules) {
|
|
216
298
|
this.tasks = [];
|
|
217
299
|
|
|
218
|
-
// Get core tasks
|
|
219
|
-
const
|
|
220
|
-
const coreTasksPath = path.join(corePath, 'tasks');
|
|
300
|
+
// Get core tasks from installed bmad directory
|
|
301
|
+
const coreTasksPath = path.join(this.bmadDir, 'core', 'tasks');
|
|
221
302
|
if (await fs.pathExists(coreTasksPath)) {
|
|
222
303
|
const coreTasks = await this.getTasksFromDir(coreTasksPath, 'core');
|
|
223
304
|
this.tasks.push(...coreTasks);
|
|
224
305
|
}
|
|
225
306
|
|
|
226
|
-
// Get module tasks
|
|
307
|
+
// Get module tasks from installed bmad directory
|
|
227
308
|
for (const moduleName of selectedModules) {
|
|
228
|
-
const
|
|
229
|
-
const tasksPath = path.join(modulePath, 'tasks');
|
|
309
|
+
const tasksPath = path.join(this.bmadDir, moduleName, 'tasks');
|
|
230
310
|
|
|
231
311
|
if (await fs.pathExists(tasksPath)) {
|
|
232
312
|
const moduleTasks = await this.getTasksFromDir(tasksPath, moduleName);
|
|
@@ -243,24 +323,34 @@ class ManifestGenerator {
|
|
|
243
323
|
const files = await fs.readdir(dirPath);
|
|
244
324
|
|
|
245
325
|
for (const file of files) {
|
|
246
|
-
|
|
326
|
+
// Check for both .xml and .md files
|
|
327
|
+
if (file.endsWith('.xml') || file.endsWith('.md')) {
|
|
247
328
|
const filePath = path.join(dirPath, file);
|
|
248
329
|
const content = await fs.readFile(filePath, 'utf8');
|
|
249
330
|
|
|
250
331
|
// Extract task metadata from content if possible
|
|
251
332
|
const nameMatch = content.match(/name="([^"]+)"/);
|
|
333
|
+
|
|
334
|
+
// Try description attribute first, fall back to <objective> element
|
|
335
|
+
const descMatch = content.match(/description="([^"]+)"/);
|
|
252
336
|
const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
|
|
337
|
+
const description = descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '';
|
|
338
|
+
|
|
339
|
+
// Check for standalone attribute in <task> tag (default: false)
|
|
340
|
+
const standaloneMatch = content.match(/<task[^>]+standalone="true"/);
|
|
341
|
+
const standalone = !!standaloneMatch;
|
|
253
342
|
|
|
254
343
|
// Build relative path for installation
|
|
255
344
|
const installPath = moduleName === 'core' ? `bmad/core/tasks/${file}` : `bmad/${moduleName}/tasks/${file}`;
|
|
256
345
|
|
|
257
|
-
const taskName = file.replace(
|
|
346
|
+
const taskName = file.replace(/\.(xml|md)$/, '');
|
|
258
347
|
tasks.push({
|
|
259
348
|
name: taskName,
|
|
260
349
|
displayName: nameMatch ? nameMatch[1] : taskName,
|
|
261
|
-
description:
|
|
350
|
+
description: description.replaceAll('"', '""'),
|
|
262
351
|
module: moduleName,
|
|
263
352
|
path: installPath,
|
|
353
|
+
standalone: standalone,
|
|
264
354
|
});
|
|
265
355
|
|
|
266
356
|
// Add to files list
|
|
@@ -276,8 +366,85 @@ class ManifestGenerator {
|
|
|
276
366
|
return tasks;
|
|
277
367
|
}
|
|
278
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Collect all tools from core and selected modules
|
|
371
|
+
* Scans the INSTALLED bmad directory, not the source
|
|
372
|
+
*/
|
|
373
|
+
async collectTools(selectedModules) {
|
|
374
|
+
this.tools = [];
|
|
375
|
+
|
|
376
|
+
// Get core tools from installed bmad directory
|
|
377
|
+
const coreToolsPath = path.join(this.bmadDir, 'core', 'tools');
|
|
378
|
+
if (await fs.pathExists(coreToolsPath)) {
|
|
379
|
+
const coreTools = await this.getToolsFromDir(coreToolsPath, 'core');
|
|
380
|
+
this.tools.push(...coreTools);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Get module tools from installed bmad directory
|
|
384
|
+
for (const moduleName of selectedModules) {
|
|
385
|
+
const toolsPath = path.join(this.bmadDir, moduleName, 'tools');
|
|
386
|
+
|
|
387
|
+
if (await fs.pathExists(toolsPath)) {
|
|
388
|
+
const moduleTools = await this.getToolsFromDir(toolsPath, moduleName);
|
|
389
|
+
this.tools.push(...moduleTools);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Get tools from a directory
|
|
396
|
+
*/
|
|
397
|
+
async getToolsFromDir(dirPath, moduleName) {
|
|
398
|
+
const tools = [];
|
|
399
|
+
const files = await fs.readdir(dirPath);
|
|
400
|
+
|
|
401
|
+
for (const file of files) {
|
|
402
|
+
// Check for both .xml and .md files
|
|
403
|
+
if (file.endsWith('.xml') || file.endsWith('.md')) {
|
|
404
|
+
const filePath = path.join(dirPath, file);
|
|
405
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
406
|
+
|
|
407
|
+
// Extract tool metadata from content if possible
|
|
408
|
+
const nameMatch = content.match(/name="([^"]+)"/);
|
|
409
|
+
|
|
410
|
+
// Try description attribute first, fall back to <objective> element
|
|
411
|
+
const descMatch = content.match(/description="([^"]+)"/);
|
|
412
|
+
const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
|
|
413
|
+
const description = descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '';
|
|
414
|
+
|
|
415
|
+
// Check for standalone attribute in <tool> tag (default: false)
|
|
416
|
+
const standaloneMatch = content.match(/<tool[^>]+standalone="true"/);
|
|
417
|
+
const standalone = !!standaloneMatch;
|
|
418
|
+
|
|
419
|
+
// Build relative path for installation
|
|
420
|
+
const installPath = moduleName === 'core' ? `bmad/core/tools/${file}` : `bmad/${moduleName}/tools/${file}`;
|
|
421
|
+
|
|
422
|
+
const toolName = file.replace(/\.(xml|md)$/, '');
|
|
423
|
+
tools.push({
|
|
424
|
+
name: toolName,
|
|
425
|
+
displayName: nameMatch ? nameMatch[1] : toolName,
|
|
426
|
+
description: description.replaceAll('"', '""'),
|
|
427
|
+
module: moduleName,
|
|
428
|
+
path: installPath,
|
|
429
|
+
standalone: standalone,
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
// Add to files list
|
|
433
|
+
this.files.push({
|
|
434
|
+
type: 'tool',
|
|
435
|
+
name: toolName,
|
|
436
|
+
module: moduleName,
|
|
437
|
+
path: installPath,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
return tools;
|
|
443
|
+
}
|
|
444
|
+
|
|
279
445
|
/**
|
|
280
446
|
* Write main manifest as YAML with installation info only
|
|
447
|
+
* @returns {string} Path to the manifest file
|
|
281
448
|
*/
|
|
282
449
|
async writeMainManifest(cfgDir) {
|
|
283
450
|
const manifestPath = path.join(cfgDir, 'manifest.yaml');
|
|
@@ -288,12 +455,8 @@ class ManifestGenerator {
|
|
|
288
455
|
installDate: new Date().toISOString(),
|
|
289
456
|
lastUpdated: new Date().toISOString(),
|
|
290
457
|
},
|
|
291
|
-
modules: this.modules
|
|
292
|
-
|
|
293
|
-
version: '',
|
|
294
|
-
shortTitle: '',
|
|
295
|
-
})),
|
|
296
|
-
ides: ['claude-code'],
|
|
458
|
+
modules: this.modules,
|
|
459
|
+
ides: this.selectedIdes,
|
|
297
460
|
};
|
|
298
461
|
|
|
299
462
|
const yamlStr = yaml.dump(manifest, {
|
|
@@ -304,81 +467,309 @@ class ManifestGenerator {
|
|
|
304
467
|
});
|
|
305
468
|
|
|
306
469
|
await fs.writeFile(manifestPath, yamlStr);
|
|
470
|
+
return manifestPath;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Read existing CSV and preserve rows for modules NOT being updated
|
|
475
|
+
* @param {string} csvPath - Path to existing CSV file
|
|
476
|
+
* @param {number} moduleColumnIndex - Which column contains the module name (0-indexed)
|
|
477
|
+
* @param {Array<string>} expectedColumns - Expected column names in order
|
|
478
|
+
* @param {Object} defaultValues - Default values for missing columns
|
|
479
|
+
* @returns {Array} Preserved CSV rows (without header), upgraded to match expected columns
|
|
480
|
+
*/
|
|
481
|
+
async getPreservedCsvRows(csvPath, moduleColumnIndex, expectedColumns, defaultValues = {}) {
|
|
482
|
+
if (!(await fs.pathExists(csvPath)) || this.preservedModules.length === 0) {
|
|
483
|
+
return [];
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
try {
|
|
487
|
+
const content = await fs.readFile(csvPath, 'utf8');
|
|
488
|
+
const lines = content.trim().split('\n');
|
|
489
|
+
|
|
490
|
+
if (lines.length < 2) {
|
|
491
|
+
return []; // No data rows
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Parse header to understand old schema
|
|
495
|
+
const header = lines[0];
|
|
496
|
+
const headerColumns = header.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
|
|
497
|
+
const oldColumns = headerColumns.map((c) => c.replaceAll(/^"|"$/g, ''));
|
|
498
|
+
|
|
499
|
+
// Skip header row for data
|
|
500
|
+
const dataRows = lines.slice(1);
|
|
501
|
+
const preservedRows = [];
|
|
502
|
+
|
|
503
|
+
for (const row of dataRows) {
|
|
504
|
+
// Simple CSV parsing (handles quoted values)
|
|
505
|
+
const columns = row.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
|
|
506
|
+
const cleanColumns = columns.map((c) => c.replaceAll(/^"|"$/g, ''));
|
|
507
|
+
|
|
508
|
+
const moduleValue = cleanColumns[moduleColumnIndex];
|
|
509
|
+
|
|
510
|
+
// Keep this row if it belongs to a preserved module
|
|
511
|
+
if (this.preservedModules.includes(moduleValue)) {
|
|
512
|
+
// Upgrade row to match expected schema
|
|
513
|
+
const upgradedRow = this.upgradeRowToSchema(cleanColumns, oldColumns, expectedColumns, defaultValues);
|
|
514
|
+
preservedRows.push(upgradedRow);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return preservedRows;
|
|
519
|
+
} catch (error) {
|
|
520
|
+
console.warn(`Warning: Failed to read existing CSV ${csvPath}:`, error.message);
|
|
521
|
+
return [];
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Upgrade a CSV row from old schema to new schema
|
|
527
|
+
* @param {Array<string>} rowValues - Values from old row
|
|
528
|
+
* @param {Array<string>} oldColumns - Old column names
|
|
529
|
+
* @param {Array<string>} newColumns - New column names
|
|
530
|
+
* @param {Object} defaultValues - Default values for missing columns
|
|
531
|
+
* @returns {string} Upgraded CSV row
|
|
532
|
+
*/
|
|
533
|
+
upgradeRowToSchema(rowValues, oldColumns, newColumns, defaultValues) {
|
|
534
|
+
const upgradedValues = [];
|
|
535
|
+
|
|
536
|
+
for (const newCol of newColumns) {
|
|
537
|
+
const oldIndex = oldColumns.indexOf(newCol);
|
|
538
|
+
|
|
539
|
+
if (oldIndex !== -1 && oldIndex < rowValues.length) {
|
|
540
|
+
// Column exists in old schema, use its value
|
|
541
|
+
upgradedValues.push(rowValues[oldIndex]);
|
|
542
|
+
} else if (defaultValues[newCol] === undefined) {
|
|
543
|
+
// Column missing, no default provided
|
|
544
|
+
upgradedValues.push('');
|
|
545
|
+
} else {
|
|
546
|
+
// Column missing, use default value
|
|
547
|
+
upgradedValues.push(defaultValues[newCol]);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// Properly quote values and join
|
|
552
|
+
return upgradedValues.map((v) => `"${v}"`).join(',');
|
|
307
553
|
}
|
|
308
554
|
|
|
309
555
|
/**
|
|
310
556
|
* Write workflow manifest CSV
|
|
557
|
+
* @returns {string} Path to the manifest file
|
|
311
558
|
*/
|
|
312
559
|
async writeWorkflowManifest(cfgDir) {
|
|
313
560
|
const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
|
|
314
561
|
|
|
315
|
-
//
|
|
316
|
-
|
|
562
|
+
// Define expected columns and defaults for schema upgrade
|
|
563
|
+
const expectedColumns = ['name', 'description', 'module', 'path', 'standalone'];
|
|
564
|
+
const defaultValues = { standalone: 'false' };
|
|
565
|
+
|
|
566
|
+
// Get preserved rows from existing CSV (module is column 2, 0-indexed)
|
|
567
|
+
const preservedRows = await this.getPreservedCsvRows(csvPath, 2, expectedColumns, defaultValues);
|
|
317
568
|
|
|
318
|
-
//
|
|
569
|
+
// Create CSV header with standalone column
|
|
570
|
+
let csv = 'name,description,module,path,standalone\n';
|
|
571
|
+
|
|
572
|
+
// Add new rows for updated modules
|
|
319
573
|
for (const workflow of this.workflows) {
|
|
320
|
-
csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}"\n`;
|
|
574
|
+
csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}","${workflow.standalone}"\n`;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// Add preserved rows for modules we didn't update
|
|
578
|
+
for (const row of preservedRows) {
|
|
579
|
+
csv += row + '\n';
|
|
321
580
|
}
|
|
322
581
|
|
|
323
582
|
await fs.writeFile(csvPath, csv);
|
|
583
|
+
return csvPath;
|
|
324
584
|
}
|
|
325
585
|
|
|
326
586
|
/**
|
|
327
587
|
* Write agent manifest CSV
|
|
588
|
+
* @returns {string} Path to the manifest file
|
|
328
589
|
*/
|
|
329
590
|
async writeAgentManifest(cfgDir) {
|
|
330
591
|
const csvPath = path.join(cfgDir, 'agent-manifest.csv');
|
|
331
592
|
|
|
332
|
-
//
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
593
|
+
// Define expected columns (no schema changes for agents currently)
|
|
594
|
+
const expectedColumns = [
|
|
595
|
+
'name',
|
|
596
|
+
'displayName',
|
|
597
|
+
'title',
|
|
598
|
+
'icon',
|
|
599
|
+
'role',
|
|
600
|
+
'identity',
|
|
601
|
+
'communicationStyle',
|
|
602
|
+
'principles',
|
|
603
|
+
'module',
|
|
604
|
+
'path',
|
|
605
|
+
];
|
|
606
|
+
|
|
607
|
+
// Get preserved rows from existing CSV (module is column 8, 0-indexed)
|
|
608
|
+
const preservedRows = await this.getPreservedCsvRows(csvPath, 8, expectedColumns);
|
|
609
|
+
|
|
610
|
+
// Create CSV header with persona fields
|
|
611
|
+
let csv = 'name,displayName,title,icon,role,identity,communicationStyle,principles,module,path\n';
|
|
612
|
+
|
|
613
|
+
// Add new rows for updated modules
|
|
336
614
|
for (const agent of this.agents) {
|
|
337
|
-
csv += `"${agent.name}","${agent.displayName}","${agent.
|
|
615
|
+
csv += `"${agent.name}","${agent.displayName}","${agent.title}","${agent.icon}","${agent.role}","${agent.identity}","${agent.communicationStyle}","${agent.principles}","${agent.module}","${agent.path}"\n`;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
// Add preserved rows for modules we didn't update
|
|
619
|
+
for (const row of preservedRows) {
|
|
620
|
+
csv += row + '\n';
|
|
338
621
|
}
|
|
339
622
|
|
|
340
623
|
await fs.writeFile(csvPath, csv);
|
|
624
|
+
return csvPath;
|
|
341
625
|
}
|
|
342
626
|
|
|
343
627
|
/**
|
|
344
628
|
* Write task manifest CSV
|
|
629
|
+
* @returns {string} Path to the manifest file
|
|
345
630
|
*/
|
|
346
631
|
async writeTaskManifest(cfgDir) {
|
|
347
632
|
const csvPath = path.join(cfgDir, 'task-manifest.csv');
|
|
348
633
|
|
|
349
|
-
//
|
|
350
|
-
|
|
634
|
+
// Define expected columns and defaults for schema upgrade
|
|
635
|
+
const expectedColumns = ['name', 'displayName', 'description', 'module', 'path', 'standalone'];
|
|
636
|
+
const defaultValues = { standalone: 'false' };
|
|
637
|
+
|
|
638
|
+
// Get preserved rows from existing CSV (module is column 3, 0-indexed)
|
|
639
|
+
const preservedRows = await this.getPreservedCsvRows(csvPath, 3, expectedColumns, defaultValues);
|
|
640
|
+
|
|
641
|
+
// Create CSV header with standalone column
|
|
642
|
+
let csv = 'name,displayName,description,module,path,standalone\n';
|
|
351
643
|
|
|
352
|
-
// Add rows
|
|
644
|
+
// Add new rows for updated modules
|
|
353
645
|
for (const task of this.tasks) {
|
|
354
|
-
csv += `"${task.name}","${task.displayName}","${task.description}","${task.module}","${task.path}"\n`;
|
|
646
|
+
csv += `"${task.name}","${task.displayName}","${task.description}","${task.module}","${task.path}","${task.standalone}"\n`;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
// Add preserved rows for modules we didn't update
|
|
650
|
+
for (const row of preservedRows) {
|
|
651
|
+
csv += row + '\n';
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
await fs.writeFile(csvPath, csv);
|
|
655
|
+
return csvPath;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
/**
|
|
659
|
+
* Write tool manifest CSV
|
|
660
|
+
* @returns {string} Path to the manifest file
|
|
661
|
+
*/
|
|
662
|
+
async writeToolManifest(cfgDir) {
|
|
663
|
+
const csvPath = path.join(cfgDir, 'tool-manifest.csv');
|
|
664
|
+
|
|
665
|
+
// Define expected columns and defaults for schema upgrade
|
|
666
|
+
const expectedColumns = ['name', 'displayName', 'description', 'module', 'path', 'standalone'];
|
|
667
|
+
const defaultValues = { standalone: 'false' };
|
|
668
|
+
|
|
669
|
+
// Get preserved rows from existing CSV (module is column 3, 0-indexed)
|
|
670
|
+
const preservedRows = await this.getPreservedCsvRows(csvPath, 3, expectedColumns, defaultValues);
|
|
671
|
+
|
|
672
|
+
// Create CSV header with standalone column
|
|
673
|
+
let csv = 'name,displayName,description,module,path,standalone\n';
|
|
674
|
+
|
|
675
|
+
// Add new rows for updated modules
|
|
676
|
+
for (const tool of this.tools) {
|
|
677
|
+
csv += `"${tool.name}","${tool.displayName}","${tool.description}","${tool.module}","${tool.path}","${tool.standalone}"\n`;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// Add preserved rows for modules we didn't update
|
|
681
|
+
for (const row of preservedRows) {
|
|
682
|
+
csv += row + '\n';
|
|
355
683
|
}
|
|
356
684
|
|
|
357
685
|
await fs.writeFile(csvPath, csv);
|
|
686
|
+
return csvPath;
|
|
358
687
|
}
|
|
359
688
|
|
|
360
689
|
/**
|
|
361
690
|
* Write files manifest CSV
|
|
362
691
|
*/
|
|
692
|
+
/**
|
|
693
|
+
* Calculate SHA256 hash of a file
|
|
694
|
+
* @param {string} filePath - Path to file
|
|
695
|
+
* @returns {string} SHA256 hash
|
|
696
|
+
*/
|
|
697
|
+
async calculateFileHash(filePath) {
|
|
698
|
+
try {
|
|
699
|
+
const content = await fs.readFile(filePath);
|
|
700
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
701
|
+
} catch {
|
|
702
|
+
return '';
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* @returns {string} Path to the manifest file
|
|
708
|
+
*/
|
|
363
709
|
async writeFilesManifest(cfgDir) {
|
|
364
710
|
const csvPath = path.join(cfgDir, 'files-manifest.csv');
|
|
365
711
|
|
|
366
|
-
//
|
|
367
|
-
|
|
712
|
+
// Get preserved rows from existing CSV (module is column 2, 0-indexed)
|
|
713
|
+
const preservedRows = await this.getPreservedCsvRows(csvPath, 2);
|
|
714
|
+
|
|
715
|
+
// Create CSV header with hash column
|
|
716
|
+
let csv = 'type,name,module,path,hash\n';
|
|
717
|
+
|
|
718
|
+
// If we have ALL installed files, use those instead of just workflows/agents/tasks
|
|
719
|
+
const allFiles = [];
|
|
720
|
+
if (this.allInstalledFiles && this.allInstalledFiles.length > 0) {
|
|
721
|
+
// Process all installed files
|
|
722
|
+
for (const filePath of this.allInstalledFiles) {
|
|
723
|
+
const relativePath = 'bmad' + filePath.replace(this.bmadDir, '').replaceAll('\\', '/');
|
|
724
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
725
|
+
const fileName = path.basename(filePath, ext);
|
|
726
|
+
|
|
727
|
+
// Determine module from path
|
|
728
|
+
const pathParts = relativePath.split('/');
|
|
729
|
+
const module = pathParts.length > 1 ? pathParts[1] : 'unknown';
|
|
730
|
+
|
|
731
|
+
// Calculate hash
|
|
732
|
+
const hash = await this.calculateFileHash(filePath);
|
|
733
|
+
|
|
734
|
+
allFiles.push({
|
|
735
|
+
type: ext.slice(1) || 'file',
|
|
736
|
+
name: fileName,
|
|
737
|
+
module: module,
|
|
738
|
+
path: relativePath,
|
|
739
|
+
hash: hash,
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
} else {
|
|
743
|
+
// Fallback: use the collected workflows/agents/tasks
|
|
744
|
+
for (const file of this.files) {
|
|
745
|
+
const filePath = path.join(this.bmadDir, file.path.replace('bmad/', ''));
|
|
746
|
+
const hash = await this.calculateFileHash(filePath);
|
|
747
|
+
allFiles.push({
|
|
748
|
+
...file,
|
|
749
|
+
hash: hash,
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
}
|
|
368
753
|
|
|
369
|
-
// Sort files by
|
|
370
|
-
|
|
371
|
-
if (a.type !== b.type) return a.type.localeCompare(b.type);
|
|
754
|
+
// Sort files by module, then type, then name
|
|
755
|
+
allFiles.sort((a, b) => {
|
|
372
756
|
if (a.module !== b.module) return a.module.localeCompare(b.module);
|
|
757
|
+
if (a.type !== b.type) return a.type.localeCompare(b.type);
|
|
373
758
|
return a.name.localeCompare(b.name);
|
|
374
759
|
});
|
|
375
760
|
|
|
376
|
-
// Add rows
|
|
377
|
-
for (const file of
|
|
378
|
-
csv += `"${file.type}","${file.name}","${file.module}","${file.path}"\n`;
|
|
761
|
+
// Add rows for updated modules
|
|
762
|
+
for (const file of allFiles) {
|
|
763
|
+
csv += `"${file.type}","${file.name}","${file.module}","${file.path}","${file.hash}"\n`;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
// Add preserved rows for modules we didn't update
|
|
767
|
+
for (const row of preservedRows) {
|
|
768
|
+
csv += row + '\n';
|
|
379
769
|
}
|
|
380
770
|
|
|
381
771
|
await fs.writeFile(csvPath, csv);
|
|
772
|
+
return csvPath;
|
|
382
773
|
}
|
|
383
774
|
}
|
|
384
775
|
|