bmad-method 6.0.0-alpha.5 → 6.0.0-alpha.7
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/settings.local.json +12 -6
- package/.github/workflows/{lint.yaml → quality.yaml} +19 -2
- package/.husky/pre-commit +4 -0
- package/CONTRIBUTING.md +1 -13
- package/README.md +59 -1
- package/bmad/_cfg/agent-manifest.csv +1 -13
- package/bmad/_cfg/files-manifest.csv +10 -256
- package/bmad/_cfg/ides/claude-code.yaml +2 -2
- package/bmad/_cfg/manifest.yaml +4 -5
- package/bmad/_cfg/task-manifest.csv +4 -1
- package/bmad/_cfg/tool-manifest.csv +1 -0
- package/bmad/_cfg/workflow-manifest.csv +2 -35
- package/bmad/bmb/config.yaml +2 -2
- package/bmad/bmb/workflows/audit-workflow/instructions.md +1 -1
- package/bmad/bmb/workflows/create-agent/instructions.md +25 -9
- package/bmad/bmb/workflows/create-module/module-structure.md +34 -0
- package/bmad/core/config.yaml +2 -2
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +61 -0
- package/package.json +5 -3
- package/src/core/tasks/adv-elicit.xml +1 -1
- package/src/modules/bmb/workflows/create-agent/instructions.md +25 -9
- package/src/modules/bmb/workflows/create-module/module-structure.md +34 -0
- package/src/modules/bmgd/README.md +208 -0
- package/src/modules/bmgd/_module-installer/install-config.yaml +66 -0
- package/src/modules/{bmm → bmgd}/agents/game-architect.agent.yaml +5 -12
- package/src/modules/{bmm → bmgd}/agents/game-designer.agent.yaml +10 -22
- package/src/modules/{bmm → bmgd}/agents/game-dev.agent.yaml +9 -10
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +70 -0
- package/{bmad/bmm → src/modules/bmgd}/teams/team-gamedev.yaml +3 -1
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/workflow.yaml +7 -7
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/workflow.yaml +9 -9
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +81 -0
- package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/narrative/workflow.yaml +6 -6
- package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/instructions.md +7 -18
- package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/workflow.yaml +16 -16
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/retrospective/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-done/workflow.yaml +3 -1
- package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-ready/workflow.yaml +3 -1
- package/src/modules/bmm/_module-installer/install-config.yaml +5 -0
- package/src/modules/bmm/docs/README.md +18 -18
- package/src/modules/bmm/docs/agents-guide.md +1 -2
- package/src/modules/bmm/docs/brownfield-guide.md +10 -15
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +10 -12
- package/src/modules/bmm/docs/glossary.md +8 -9
- package/src/modules/bmm/docs/quick-spec-flow.md +7 -7
- package/src/modules/bmm/docs/quick-start.md +9 -9
- package/src/modules/bmm/docs/scale-adaptive-system.md +6 -6
- package/src/modules/bmm/docs/test-architecture.md +394 -0
- package/src/modules/bmm/docs/workflows-analysis.md +229 -529
- package/src/modules/bmm/docs/workflows-implementation.md +196 -1670
- package/src/modules/bmm/docs/workflows-planning.md +364 -849
- package/src/modules/bmm/docs/workflows-solutioning.md +268 -493
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +65 -32
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +4 -0
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +34 -5
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +8 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +6 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +47 -0
- package/src/modules/bmm/workflows/techdoc/documentation-standards.md +24 -1
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +2 -2
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +50 -0
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +18 -11
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +18 -11
- package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +42 -65
- package/test/test-installation-components.js +214 -0
- package/tools/cli/bundlers/web-bundler.js +127 -8
- package/tools/cli/installers/lib/core/config-collector.js +39 -11
- package/tools/cli/installers/lib/core/ide-config-manager.js +3 -1
- package/tools/cli/installers/lib/core/installer.js +20 -9
- package/tools/cli/installers/lib/core/manifest-generator.js +3 -1
- package/tools/cli/installers/lib/core/manifest.js +6 -2
- package/tools/cli/installers/lib/ide/auggie.js +9 -20
- package/tools/cli/installers/lib/ide/claude-code.js +33 -3
- package/tools/cli/installers/lib/ide/cursor.js +17 -0
- package/tools/cli/installers/lib/modules/manager.js +134 -0
- package/tools/cli/lib/config.js +3 -1
- package/tools/cli/lib/ui.js +5 -5
- package/tools/cli/lib/yaml-format.js +2 -1
- package/tools/cli/lib/yaml-xml-builder.js +9 -1
- package/tools/schema/agent.js +3 -0
- package/v6-open-items.md +3 -9
- package/web-bundles/bmm/agents/analyst.xml +5028 -0
- package/web-bundles/bmm/agents/architect.xml +2047 -0
- package/web-bundles/bmm/agents/dev.xml +68 -0
- package/web-bundles/bmm/agents/pm.xml +3808 -0
- package/web-bundles/bmm/agents/sm.xml +77 -0
- package/web-bundles/bmm/agents/tea.xml +66 -0
- package/web-bundles/bmm/agents/tech-writer.xml +84 -0
- package/web-bundles/bmm/agents/ux-designer.xml +2018 -0
- package/web-bundles/bmm/teams/team-fullstack.xml +12039 -0
- package/.claude/commands/bmad/bmb/workflows/README.md +0 -67
- package/.claude/commands/bmad/bmm/agents/analyst.md +0 -67
- package/.claude/commands/bmad/bmm/agents/architect.md +0 -72
- package/.claude/commands/bmad/bmm/agents/dev.md +0 -69
- package/.claude/commands/bmad/bmm/agents/paige.md +0 -82
- package/.claude/commands/bmad/bmm/agents/pm.md +0 -76
- package/.claude/commands/bmad/bmm/agents/sm.md +0 -85
- package/.claude/commands/bmad/bmm/agents/tea.md +0 -72
- package/.claude/commands/bmad/bmm/agents/tech-writer.md +0 -82
- package/.claude/commands/bmad/bmm/agents/ux-designer.md +0 -71
- package/.claude/commands/bmad/bmm/workflows/README.md +0 -132
- package/.claude/commands/bmad/bmm/workflows/architecture.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/code-review.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/correct-course.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/create-story.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/dev-story.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/document-project.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/narrative.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/prd.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/product-brief.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/research.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/retrospective.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/solutioning-gate-check.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/story-context.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/story-done.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/story-ready.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/tech-spec-sm.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/tech-spec.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/workflow-init.md +0 -15
- package/.claude/commands/bmad/bmm/workflows/workflow-status.md +0 -15
- package/.claude/commands/bmad/cis/agents/README.md +0 -104
- package/.claude/commands/bmad/cis/agents/brainstorming-coach.md +0 -62
- package/.claude/commands/bmad/cis/agents/creative-problem-solver.md +0 -62
- package/.claude/commands/bmad/cis/agents/design-thinking-coach.md +0 -62
- package/.claude/commands/bmad/cis/agents/innovation-strategist.md +0 -62
- package/.claude/commands/bmad/cis/agents/storyteller.md +0 -59
- package/.claude/commands/bmad/cis/workflows/README.md +0 -37
- package/.claude/commands/bmad/cis/workflows/design-thinking.md +0 -15
- package/.claude/commands/bmad/cis/workflows/innovation-strategy.md +0 -15
- package/.claude/commands/bmad/cis/workflows/problem-solving.md +0 -15
- package/.claude/commands/bmad/cis/workflows/storytelling.md +0 -15
- package/.claude/commands/bmad/core/workflows/README.md +0 -37
- package/bmad/_cfg/agents/bmm-analyst.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-architect.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-dev.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-paige.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-pm.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-sm.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-tea.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-tech-writer.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmm-ux-designer.customize.yaml +0 -42
- package/bmad/_cfg/agents/cis-brainstorming-coach.customize.yaml +0 -42
- package/bmad/_cfg/agents/cis-creative-problem-solver.customize.yaml +0 -42
- package/bmad/_cfg/agents/cis-design-thinking-coach.customize.yaml +0 -42
- package/bmad/_cfg/agents/cis-innovation-strategist.customize.yaml +0 -42
- package/bmad/_cfg/agents/cis-storyteller.customize.yaml +0 -42
- package/bmad/bmb/agents/bmad-builder.md.bak +0 -70
- package/bmad/bmb/workflows/audit-workflow/workflow.yaml.bak +0 -23
- package/bmad/bmb/workflows/create-module/workflow.yaml.bak +0 -42
- package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml.bak +0 -39
- package/bmad/bmb/workflows/create-workflow/workflow.yaml.bak +0 -40
- package/bmad/bmb/workflows/edit-agent/workflow.yaml.bak +0 -33
- package/bmad/bmb/workflows/edit-module/workflow.yaml.bak +0 -34
- package/bmad/bmb/workflows/edit-workflow/workflow.yaml.bak +0 -27
- package/bmad/bmb/workflows/module-brief/workflow.yaml.bak +0 -29
- package/bmad/bmb/workflows/redoc/workflow.yaml.bak +0 -32
- package/bmad/bmm/README.md +0 -128
- package/bmad/bmm/README.md.bak +0 -169
- package/bmad/bmm/agents/analyst.md +0 -67
- package/bmad/bmm/agents/analyst.md.bak +0 -67
- package/bmad/bmm/agents/architect.md +0 -72
- package/bmad/bmm/agents/architect.md.bak +0 -73
- package/bmad/bmm/agents/dev.md +0 -69
- package/bmad/bmm/agents/dev.md.bak +0 -69
- package/bmad/bmm/agents/paige.md.bak +0 -82
- package/bmad/bmm/agents/pm.md +0 -76
- package/bmad/bmm/agents/pm.md.bak +0 -76
- package/bmad/bmm/agents/sm.md +0 -85
- package/bmad/bmm/agents/sm.md.bak +0 -85
- package/bmad/bmm/agents/tea.md +0 -72
- package/bmad/bmm/agents/tea.md.bak +0 -72
- package/bmad/bmm/agents/tech-writer.md +0 -82
- package/bmad/bmm/agents/ux-designer.md +0 -71
- package/bmad/bmm/agents/ux-designer.md.bak +0 -71
- package/bmad/bmm/config.yaml +0 -17
- package/bmad/bmm/docs/README.md +0 -235
- package/bmad/bmm/docs/agents-guide.md +0 -1057
- package/bmad/bmm/docs/brownfield-guide.md +0 -759
- package/bmad/bmm/docs/enterprise-agentic-development.md +0 -680
- package/bmad/bmm/docs/faq.md +0 -589
- package/bmad/bmm/docs/glossary.md +0 -321
- package/bmad/bmm/docs/party-mode.md +0 -224
- package/bmad/bmm/docs/quick-spec-flow.md +0 -652
- package/bmad/bmm/docs/quick-start.md +0 -366
- package/bmad/bmm/docs/scale-adaptive-system.md +0 -599
- package/bmad/bmm/docs/troubleshooting.md +0 -680
- package/bmad/bmm/docs/workflow-architecture-reference.md +0 -371
- package/bmad/bmm/docs/workflow-document-project-reference.md +0 -487
- package/bmad/bmm/docs/workflows-analysis.md +0 -670
- package/bmad/bmm/docs/workflows-implementation.md +0 -1758
- package/bmad/bmm/docs/workflows-planning.md +0 -1086
- package/bmad/bmm/docs/workflows-solutioning.md +0 -726
- package/bmad/bmm/tasks/daily-standup.xml +0 -85
- package/bmad/bmm/teams/team-fullstack.yaml +0 -11
- package/bmad/bmm/testarch/knowledge/ci-burn-in.md +0 -675
- package/bmad/bmm/testarch/knowledge/component-tdd.md +0 -486
- package/bmad/bmm/testarch/knowledge/contract-testing.md +0 -957
- package/bmad/bmm/testarch/knowledge/data-factories.md +0 -500
- package/bmad/bmm/testarch/knowledge/email-auth.md +0 -721
- package/bmad/bmm/testarch/knowledge/error-handling.md +0 -725
- package/bmad/bmm/testarch/knowledge/feature-flags.md +0 -750
- package/bmad/bmm/testarch/knowledge/fixture-architecture.md +0 -401
- package/bmad/bmm/testarch/knowledge/network-first.md +0 -486
- package/bmad/bmm/testarch/knowledge/nfr-criteria.md +0 -670
- package/bmad/bmm/testarch/knowledge/playwright-config.md +0 -730
- package/bmad/bmm/testarch/knowledge/probability-impact.md +0 -601
- package/bmad/bmm/testarch/knowledge/risk-governance.md +0 -615
- package/bmad/bmm/testarch/knowledge/selective-testing.md +0 -732
- package/bmad/bmm/testarch/knowledge/selector-resilience.md +0 -527
- package/bmad/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
- package/bmad/bmm/testarch/knowledge/test-levels-framework.md +0 -473
- package/bmad/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
- package/bmad/bmm/testarch/knowledge/test-quality.md +0 -664
- package/bmad/bmm/testarch/knowledge/timing-debugging.md +0 -372
- package/bmad/bmm/testarch/knowledge/visual-debugging.md +0 -524
- package/bmad/bmm/testarch/tea-index.csv +0 -22
- package/bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -110
- package/bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
- package/bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -26
- package/bmad/bmm/workflows/1-analysis/domain-research/instructions.md +0 -423
- package/bmad/bmm/workflows/1-analysis/domain-research/template.md +0 -180
- package/bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -36
- package/bmad/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
- package/bmad/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
- package/bmad/bmm/workflows/1-analysis/product-brief/template.md +0 -181
- package/bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -45
- package/bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
- package/bmad/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
- package/bmad/bmm/workflows/1-analysis/research/checklist.md +0 -299
- package/bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
- package/bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -439
- package/bmad/bmm/workflows/1-analysis/research/instructions-market.md +0 -679
- package/bmad/bmm/workflows/1-analysis/research/instructions-router.md +0 -133
- package/bmad/bmm/workflows/1-analysis/research/instructions-technical.md +0 -538
- package/bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
- package/bmad/bmm/workflows/1-analysis/research/template-market.md +0 -347
- package/bmad/bmm/workflows/1-analysis/research/template-technical.md +0 -245
- package/bmad/bmm/workflows/1-analysis/research/workflow.yaml +0 -44
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1319
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
- package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -64
- package/bmad/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +0 -29
- package/bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -349
- package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +0 -63
- package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +0 -395
- package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +0 -33
- package/bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
- package/bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -423
- package/bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -237
- package/bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
- package/bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -46
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -214
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -58
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +0 -200
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +0 -451
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -1133
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -87
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -60
- package/bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml.bak +0 -60
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -175
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -322
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +0 -189
- package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -64
- package/bmad/bmm/workflows/document-project/checklist.md +0 -245
- package/bmad/bmm/workflows/document-project/documentation-requirements.csv +0 -12
- package/bmad/bmm/workflows/document-project/instructions.md +0 -222
- package/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +0 -345
- package/bmad/bmm/workflows/document-project/templates/index-template.md +0 -169
- package/bmad/bmm/workflows/document-project/templates/project-overview-template.md +0 -103
- package/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
- package/bmad/bmm/workflows/document-project/templates/source-tree-template.md +0 -135
- package/bmad/bmm/workflows/document-project/workflow.yaml +0 -34
- package/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
- package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
- package/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
- package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
- package/bmad/bmm/workflows/techdoc/documentation-standards.md +0 -239
- package/bmad/bmm/workflows/techdoc/documentation-standards.md.bak +0 -238
- package/bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
- package/bmad/bmm/workflows/testarch/atdd/checklist.md +0 -373
- package/bmad/bmm/workflows/testarch/atdd/instructions.md +0 -785
- package/bmad/bmm/workflows/testarch/atdd/workflow.yaml +0 -52
- package/bmad/bmm/workflows/testarch/automate/checklist.md +0 -580
- package/bmad/bmm/workflows/testarch/automate/instructions.md +0 -1303
- package/bmad/bmm/workflows/testarch/automate/workflow.yaml +0 -61
- package/bmad/bmm/workflows/testarch/ci/checklist.md +0 -246
- package/bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
- package/bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
- package/bmad/bmm/workflows/testarch/ci/instructions.md +0 -517
- package/bmad/bmm/workflows/testarch/ci/workflow.yaml +0 -53
- package/bmad/bmm/workflows/testarch/framework/checklist.md +0 -321
- package/bmad/bmm/workflows/testarch/framework/instructions.md +0 -455
- package/bmad/bmm/workflows/testarch/framework/workflow.yaml +0 -53
- package/bmad/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
- package/bmad/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
- package/bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
- package/bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -56
- package/bmad/bmm/workflows/testarch/test-design/checklist.md +0 -234
- package/bmad/bmm/workflows/testarch/test-design/instructions.md +0 -621
- package/bmad/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
- package/bmad/bmm/workflows/testarch/test-design/workflow.yaml +0 -52
- package/bmad/bmm/workflows/testarch/test-review/checklist.md +0 -470
- package/bmad/bmm/workflows/testarch/test-review/instructions.md +0 -608
- package/bmad/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
- package/bmad/bmm/workflows/testarch/test-review/workflow.yaml +0 -53
- package/bmad/bmm/workflows/testarch/trace/checklist.md +0 -654
- package/bmad/bmm/workflows/testarch/trace/instructions.md +0 -1045
- package/bmad/bmm/workflows/testarch/trace/trace-template.md +0 -673
- package/bmad/bmm/workflows/testarch/trace/workflow.yaml +0 -66
- package/bmad/bmm/workflows/workflow-status/init/instructions.md +0 -771
- package/bmad/bmm/workflows/workflow-status/init/workflow.yaml +0 -27
- package/bmad/bmm/workflows/workflow-status/init/workflow.yaml.bak +0 -27
- package/bmad/bmm/workflows/workflow-status/instructions.md +0 -386
- package/bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -120
- package/bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -108
- package/bmad/bmm/workflows/workflow-status/paths/game-design.yaml +0 -75
- package/bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -97
- package/bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -88
- package/bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
- package/bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
- package/bmad/bmm/workflows/workflow-status/project-levels.yaml +0 -59
- package/bmad/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +0 -49
- package/bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -31
- package/bmad/bmm/workflows/workflow-status/workflow.yaml +0 -28
- package/bmad/cis/README.md +0 -153
- package/bmad/cis/agents/README.md +0 -104
- package/bmad/cis/agents/brainstorming-coach.md +0 -62
- package/bmad/cis/agents/brainstorming-coach.md.bak +0 -62
- package/bmad/cis/agents/creative-problem-solver.md +0 -62
- package/bmad/cis/agents/creative-problem-solver.md.bak +0 -62
- package/bmad/cis/agents/design-thinking-coach.md +0 -62
- package/bmad/cis/agents/design-thinking-coach.md.bak +0 -62
- package/bmad/cis/agents/innovation-strategist.md +0 -62
- package/bmad/cis/agents/innovation-strategist.md.bak +0 -62
- package/bmad/cis/agents/storyteller.md +0 -59
- package/bmad/cis/agents/storyteller.md.bak +0 -59
- package/bmad/cis/config.yaml +0 -10
- package/bmad/cis/teams/creative-squad.yaml +0 -6
- package/bmad/cis/workflows/README.md +0 -139
- package/bmad/cis/workflows/design-thinking/README.md +0 -56
- package/bmad/cis/workflows/design-thinking/design-methods.csv +0 -31
- package/bmad/cis/workflows/design-thinking/instructions.md +0 -200
- package/bmad/cis/workflows/design-thinking/template.md +0 -111
- package/bmad/cis/workflows/design-thinking/workflow.yaml +0 -32
- package/bmad/cis/workflows/innovation-strategy/README.md +0 -56
- package/bmad/cis/workflows/innovation-strategy/innovation-frameworks.csv +0 -31
- package/bmad/cis/workflows/innovation-strategy/instructions.md +0 -274
- package/bmad/cis/workflows/innovation-strategy/template.md +0 -189
- package/bmad/cis/workflows/innovation-strategy/workflow.yaml +0 -32
- package/bmad/cis/workflows/problem-solving/README.md +0 -56
- package/bmad/cis/workflows/problem-solving/instructions.md +0 -250
- package/bmad/cis/workflows/problem-solving/solving-methods.csv +0 -31
- package/bmad/cis/workflows/problem-solving/template.md +0 -165
- package/bmad/cis/workflows/problem-solving/workflow.yaml +0 -32
- package/bmad/cis/workflows/storytelling/README.md +0 -58
- package/bmad/cis/workflows/storytelling/instructions.md +0 -291
- package/bmad/cis/workflows/storytelling/story-types.csv +0 -26
- package/bmad/cis/workflows/storytelling/template.md +0 -113
- package/bmad/cis/workflows/storytelling/workflow.yaml +0 -32
- package/bmad/core/agents/bmad-master.md.bak +0 -71
- package/src/modules/bmm/docs/troubleshooting.md +0 -680
- package/src/modules/bmm/teams/team-gamedev.yaml +0 -14
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +0 -81
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/checklist.md +0 -139
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/instructions-narrative.md +0 -608
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/narrative-template.md +0 -195
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-brain-methods.csv +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-context.md +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/instructions.md +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/checklist.md +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/instructions.md +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/template.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/checklist.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/action-platformer.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/adventure.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/card-game.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/fighting.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/horror.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/idle-incremental.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/metroidvania.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/moba.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/party-game.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/puzzle.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/racing.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rhythm.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/roguelike.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rpg.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sandbox.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/shooter.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/simulation.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sports.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/strategy.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/survival.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/text-based.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/tower-defense.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/turn-based-tactics.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/visual-novel.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types.csv +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/gdd-template.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/instructions-gdd.md +0 -0
- /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/checklist.md +0 -0
- /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/instructions-narrative.md +0 -0
- /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/narrative-template.md +0 -0
- /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/architecture-patterns.yaml +0 -0
- /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/architecture-template.md +0 -0
- /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/checklist.md +0 -0
- /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/decision-catalog.yaml +0 -0
- /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/pattern-categories.csv +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/backlog_template.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/checklist.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/checklist.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/checklist.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/template.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/AUDIT-REPORT.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/checklist.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/checklist.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/template.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/retrospective/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/checklist.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/sprint-status-template.yaml +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/checklist.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/context-template.xml +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-done/instructions.md +0 -0
- /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-ready/instructions.md +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation Component Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests individual installation components in isolation:
|
|
5
|
+
* - Agent YAML → XML compilation
|
|
6
|
+
* - Manifest generation
|
|
7
|
+
* - Path resolution
|
|
8
|
+
* - Customization merging
|
|
9
|
+
*
|
|
10
|
+
* These are deterministic unit tests that don't require full installation.
|
|
11
|
+
* Usage: node test/test-installation-components.js
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const path = require('node:path');
|
|
15
|
+
const fs = require('fs-extra');
|
|
16
|
+
const { YamlXmlBuilder } = require('../tools/cli/lib/yaml-xml-builder');
|
|
17
|
+
const { ManifestGenerator } = require('../tools/cli/installers/lib/core/manifest-generator');
|
|
18
|
+
|
|
19
|
+
// ANSI colors
|
|
20
|
+
const colors = {
|
|
21
|
+
reset: '\u001B[0m',
|
|
22
|
+
green: '\u001B[32m',
|
|
23
|
+
red: '\u001B[31m',
|
|
24
|
+
yellow: '\u001B[33m',
|
|
25
|
+
cyan: '\u001B[36m',
|
|
26
|
+
dim: '\u001B[2m',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
let passed = 0;
|
|
30
|
+
let failed = 0;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Test helper: Assert condition
|
|
34
|
+
*/
|
|
35
|
+
function assert(condition, testName, errorMessage = '') {
|
|
36
|
+
if (condition) {
|
|
37
|
+
console.log(`${colors.green}✓${colors.reset} ${testName}`);
|
|
38
|
+
passed++;
|
|
39
|
+
} else {
|
|
40
|
+
console.log(`${colors.red}✗${colors.reset} ${testName}`);
|
|
41
|
+
if (errorMessage) {
|
|
42
|
+
console.log(` ${colors.dim}${errorMessage}${colors.reset}`);
|
|
43
|
+
}
|
|
44
|
+
failed++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Test Suite
|
|
50
|
+
*/
|
|
51
|
+
async function runTests() {
|
|
52
|
+
console.log(`${colors.cyan}========================================`);
|
|
53
|
+
console.log('Installation Component Tests');
|
|
54
|
+
console.log(`========================================${colors.reset}\n`);
|
|
55
|
+
|
|
56
|
+
const projectRoot = path.join(__dirname, '..');
|
|
57
|
+
|
|
58
|
+
// ============================================================
|
|
59
|
+
// Test 1: YAML → XML Agent Compilation (In-Memory)
|
|
60
|
+
// ============================================================
|
|
61
|
+
console.log(`${colors.yellow}Test Suite 1: Agent Compilation${colors.reset}\n`);
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
const builder = new YamlXmlBuilder();
|
|
65
|
+
const pmAgentPath = path.join(projectRoot, 'src/modules/bmm/agents/pm.agent.yaml');
|
|
66
|
+
|
|
67
|
+
// Create temp output path
|
|
68
|
+
const tempOutput = path.join(__dirname, 'temp-pm-agent.md');
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
const result = await builder.buildAgent(pmAgentPath, null, tempOutput, { includeMetadata: true });
|
|
72
|
+
|
|
73
|
+
assert(result && result.outputPath === tempOutput, 'Agent compilation returns result object with outputPath');
|
|
74
|
+
|
|
75
|
+
// Read the output
|
|
76
|
+
const compiled = await fs.readFile(tempOutput, 'utf8');
|
|
77
|
+
|
|
78
|
+
assert(compiled.includes('<agent'), 'Compiled agent contains <agent> tag');
|
|
79
|
+
|
|
80
|
+
assert(compiled.includes('<persona>'), 'Compiled agent contains <persona> tag');
|
|
81
|
+
|
|
82
|
+
assert(compiled.includes('<menu>'), 'Compiled agent contains <menu> tag');
|
|
83
|
+
|
|
84
|
+
assert(compiled.includes('Product Manager'), 'Compiled agent contains agent title');
|
|
85
|
+
|
|
86
|
+
// Cleanup
|
|
87
|
+
await fs.remove(tempOutput);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
assert(false, 'Agent compilation succeeds', error.message);
|
|
90
|
+
}
|
|
91
|
+
} catch (error) {
|
|
92
|
+
assert(false, 'YamlXmlBuilder instantiates', error.message);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
console.log('');
|
|
96
|
+
|
|
97
|
+
// ============================================================
|
|
98
|
+
// Test 2: Customization Merging
|
|
99
|
+
// ============================================================
|
|
100
|
+
console.log(`${colors.yellow}Test Suite 2: Customization Merging${colors.reset}\n`);
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
const builder = new YamlXmlBuilder();
|
|
104
|
+
|
|
105
|
+
// Test deepMerge function
|
|
106
|
+
const base = {
|
|
107
|
+
agent: {
|
|
108
|
+
metadata: { name: 'John', title: 'PM' },
|
|
109
|
+
persona: { role: 'Product Manager', style: 'Analytical' },
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const customize = {
|
|
114
|
+
agent: {
|
|
115
|
+
metadata: { name: 'Sarah' }, // Override name only
|
|
116
|
+
persona: { style: 'Concise' }, // Override style only
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const merged = builder.deepMerge(base, customize);
|
|
121
|
+
|
|
122
|
+
assert(merged.agent.metadata.name === 'Sarah', 'Deep merge overrides customized name');
|
|
123
|
+
|
|
124
|
+
assert(merged.agent.metadata.title === 'PM', 'Deep merge preserves non-overridden title');
|
|
125
|
+
|
|
126
|
+
assert(merged.agent.persona.role === 'Product Manager', 'Deep merge preserves non-overridden role');
|
|
127
|
+
|
|
128
|
+
assert(merged.agent.persona.style === 'Concise', 'Deep merge overrides customized style');
|
|
129
|
+
} catch (error) {
|
|
130
|
+
assert(false, 'Customization merging works', error.message);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
console.log('');
|
|
134
|
+
|
|
135
|
+
// ============================================================
|
|
136
|
+
// Test 3: Path Resolution
|
|
137
|
+
// ============================================================
|
|
138
|
+
console.log(`${colors.yellow}Test Suite 3: Path Variable Resolution${colors.reset}\n`);
|
|
139
|
+
|
|
140
|
+
try {
|
|
141
|
+
const builder = new YamlXmlBuilder();
|
|
142
|
+
|
|
143
|
+
// Test path resolution logic (if exposed)
|
|
144
|
+
// This would test {project-root}, {installed_path}, {config_source} resolution
|
|
145
|
+
|
|
146
|
+
const testPath = '{project-root}/bmad/bmm/config.yaml';
|
|
147
|
+
const expectedPattern = /\/bmad\/bmm\/config\.yaml$/;
|
|
148
|
+
|
|
149
|
+
assert(
|
|
150
|
+
true, // Placeholder - would test actual resolution
|
|
151
|
+
'Path variable resolution pattern matches expected format',
|
|
152
|
+
'Note: This test validates path resolution logic exists',
|
|
153
|
+
);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
assert(false, 'Path resolution works', error.message);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
console.log('');
|
|
159
|
+
|
|
160
|
+
// ============================================================
|
|
161
|
+
// Test 5: TEA Agent Special Handling
|
|
162
|
+
// ============================================================
|
|
163
|
+
console.log(`${colors.yellow}Test Suite 5: TEA Agent Compilation${colors.reset}\n`);
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
const builder = new YamlXmlBuilder();
|
|
167
|
+
const teaAgentPath = path.join(projectRoot, 'src/modules/bmm/agents/tea.agent.yaml');
|
|
168
|
+
const tempOutput = path.join(__dirname, 'temp-tea-agent.md');
|
|
169
|
+
|
|
170
|
+
try {
|
|
171
|
+
const result = await builder.buildAgent(teaAgentPath, null, tempOutput, { includeMetadata: true });
|
|
172
|
+
const compiled = await fs.readFile(tempOutput, 'utf8');
|
|
173
|
+
|
|
174
|
+
assert(compiled.includes('tea-index.csv'), 'TEA agent compilation includes critical_actions with tea-index.csv reference');
|
|
175
|
+
|
|
176
|
+
assert(compiled.includes('testarch/knowledge'), 'TEA agent compilation includes knowledge base path');
|
|
177
|
+
|
|
178
|
+
assert(compiled.includes('*test-design'), 'TEA agent menu includes test-design workflow');
|
|
179
|
+
|
|
180
|
+
// Cleanup
|
|
181
|
+
await fs.remove(tempOutput);
|
|
182
|
+
} catch (error) {
|
|
183
|
+
assert(false, 'TEA agent compiles successfully', error.message);
|
|
184
|
+
}
|
|
185
|
+
} catch (error) {
|
|
186
|
+
assert(false, 'TEA compilation test setup', error.message);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
console.log('');
|
|
190
|
+
|
|
191
|
+
// ============================================================
|
|
192
|
+
// Summary
|
|
193
|
+
// ============================================================
|
|
194
|
+
console.log(`${colors.cyan}========================================`);
|
|
195
|
+
console.log('Test Results:');
|
|
196
|
+
console.log(` Passed: ${colors.green}${passed}${colors.reset}`);
|
|
197
|
+
console.log(` Failed: ${colors.red}${failed}${colors.reset}`);
|
|
198
|
+
console.log(`========================================${colors.reset}\n`);
|
|
199
|
+
|
|
200
|
+
if (failed === 0) {
|
|
201
|
+
console.log(`${colors.green}✨ All installation component tests passed!${colors.reset}\n`);
|
|
202
|
+
process.exit(0);
|
|
203
|
+
} else {
|
|
204
|
+
console.log(`${colors.red}❌ Some installation component tests failed${colors.reset}\n`);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Run tests
|
|
210
|
+
runTests().catch((error) => {
|
|
211
|
+
console.error(`${colors.red}Test runner failed:${colors.reset}`, error.message);
|
|
212
|
+
console.error(error.stack);
|
|
213
|
+
process.exit(1);
|
|
214
|
+
});
|
|
@@ -51,8 +51,13 @@ class WebBundler {
|
|
|
51
51
|
console.log(chalk.cyan.bold('═══════════════════════════════════════════════\n'));
|
|
52
52
|
|
|
53
53
|
try {
|
|
54
|
-
//
|
|
54
|
+
// Vendor cross-module workflows FIRST
|
|
55
55
|
const modules = await this.discoverModules();
|
|
56
|
+
for (const module of modules) {
|
|
57
|
+
await this.vendorCrossModuleWorkflows(module);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Pre-discover all modules to generate complete manifests
|
|
56
61
|
for (const module of modules) {
|
|
57
62
|
await this.preDiscoverModule(module);
|
|
58
63
|
}
|
|
@@ -92,6 +97,9 @@ class WebBundler {
|
|
|
92
97
|
teams: [],
|
|
93
98
|
};
|
|
94
99
|
|
|
100
|
+
// Vendor cross-module workflows first (if not already done by bundleAll)
|
|
101
|
+
await this.vendorCrossModuleWorkflows(moduleName);
|
|
102
|
+
|
|
95
103
|
// Pre-discover all agents and teams for manifest generation
|
|
96
104
|
await this.preDiscoverModule(moduleName);
|
|
97
105
|
|
|
@@ -134,6 +142,9 @@ class WebBundler {
|
|
|
134
142
|
|
|
135
143
|
console.log(chalk.dim(` → Processing: ${agentName}`));
|
|
136
144
|
|
|
145
|
+
// Vendor cross-module workflows first (if not already done)
|
|
146
|
+
await this.vendorCrossModuleWorkflows(moduleName);
|
|
147
|
+
|
|
137
148
|
const agentPath = path.join(this.modulesPath, moduleName, 'agents', agentFile);
|
|
138
149
|
|
|
139
150
|
// Check if agent file exists
|
|
@@ -433,6 +444,97 @@ class WebBundler {
|
|
|
433
444
|
return parts.join('\n');
|
|
434
445
|
}
|
|
435
446
|
|
|
447
|
+
/**
|
|
448
|
+
* Vendor cross-module workflows for a module
|
|
449
|
+
* Scans source agent YAML files for workflow-install attributes and copies workflows
|
|
450
|
+
*/
|
|
451
|
+
async vendorCrossModuleWorkflows(moduleName) {
|
|
452
|
+
const modulePath = path.join(this.modulesPath, moduleName);
|
|
453
|
+
const agentsPath = path.join(modulePath, 'agents');
|
|
454
|
+
|
|
455
|
+
if (!(await fs.pathExists(agentsPath))) {
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Find all agent YAML files
|
|
460
|
+
const files = await fs.readdir(agentsPath);
|
|
461
|
+
const yamlFiles = files.filter((f) => f.endsWith('.agent.yaml'));
|
|
462
|
+
|
|
463
|
+
for (const agentFile of yamlFiles) {
|
|
464
|
+
const agentPath = path.join(agentsPath, agentFile);
|
|
465
|
+
const agentYaml = yaml.load(await fs.readFile(agentPath, 'utf8'));
|
|
466
|
+
|
|
467
|
+
const menuItems = agentYaml?.agent?.menu || [];
|
|
468
|
+
const workflowInstallItems = menuItems.filter((item) => item['workflow-install']);
|
|
469
|
+
|
|
470
|
+
for (const item of workflowInstallItems) {
|
|
471
|
+
const sourceWorkflowPath = item.workflow;
|
|
472
|
+
const installWorkflowPath = item['workflow-install'];
|
|
473
|
+
|
|
474
|
+
if (!sourceWorkflowPath || !installWorkflowPath) {
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// Parse paths to extract module and workflow location
|
|
479
|
+
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
|
|
480
|
+
const installMatch = installWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
|
|
481
|
+
|
|
482
|
+
if (!sourceMatch || !installMatch) {
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
const sourceModule = sourceMatch[1];
|
|
487
|
+
const sourceWorkflowRelPath = sourceMatch[2];
|
|
488
|
+
const installModule = installMatch[1];
|
|
489
|
+
const installWorkflowRelPath = installMatch[2];
|
|
490
|
+
|
|
491
|
+
// Build actual filesystem paths
|
|
492
|
+
const actualSourceWorkflowPath = path.join(this.modulesPath, sourceModule, 'workflows', sourceWorkflowRelPath);
|
|
493
|
+
const actualDestWorkflowPath = path.join(this.modulesPath, installModule, 'workflows', installWorkflowRelPath);
|
|
494
|
+
|
|
495
|
+
// Check if source workflow exists
|
|
496
|
+
if (!(await fs.pathExists(actualSourceWorkflowPath))) {
|
|
497
|
+
console.log(chalk.yellow(` ⚠ Source workflow not found for vendoring: ${sourceWorkflowPath}`));
|
|
498
|
+
continue;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// Check if destination already exists (skip if already vendored)
|
|
502
|
+
if (await fs.pathExists(actualDestWorkflowPath)) {
|
|
503
|
+
continue;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// Get workflow directory (workflow.yaml is in a directory with other files)
|
|
507
|
+
const sourceWorkflowDir = path.dirname(actualSourceWorkflowPath);
|
|
508
|
+
const destWorkflowDir = path.dirname(actualDestWorkflowPath);
|
|
509
|
+
|
|
510
|
+
// Copy entire workflow directory
|
|
511
|
+
await fs.copy(sourceWorkflowDir, destWorkflowDir, { overwrite: false });
|
|
512
|
+
|
|
513
|
+
// Update config_source in the vendored workflow.yaml
|
|
514
|
+
const workflowYamlPath = actualDestWorkflowPath;
|
|
515
|
+
if (await fs.pathExists(workflowYamlPath)) {
|
|
516
|
+
await this.updateWorkflowConfigSource(workflowYamlPath, installModule);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
console.log(chalk.dim(` → Vendored workflow: ${sourceWorkflowRelPath} → ${installModule}/workflows/${installWorkflowRelPath}`));
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Update config_source in a vendored workflow YAML file
|
|
526
|
+
*/
|
|
527
|
+
async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
|
|
528
|
+
let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
|
|
529
|
+
|
|
530
|
+
// Replace config_source with new module reference
|
|
531
|
+
const configSourcePattern = /config_source:\s*["']?\{project-root\}\/bmad\/[^/]+\/config\.yaml["']?/g;
|
|
532
|
+
const newConfigSource = `config_source: "{project-root}/bmad/${newModuleName}/config.yaml"`;
|
|
533
|
+
|
|
534
|
+
const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
|
|
535
|
+
await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
|
|
536
|
+
}
|
|
537
|
+
|
|
436
538
|
/**
|
|
437
539
|
* Pre-discover all agents and teams in a module for manifest generation
|
|
438
540
|
*/
|
|
@@ -595,16 +697,25 @@ class WebBundler {
|
|
|
595
697
|
removeSkippedWorkflowCommands(agentXml, skippedWorkflows) {
|
|
596
698
|
let modifiedXml = agentXml;
|
|
597
699
|
|
|
598
|
-
// For each skipped workflow, find and remove
|
|
700
|
+
// For each skipped workflow, find and remove menu items and commands
|
|
599
701
|
for (const workflowPath of skippedWorkflows) {
|
|
600
|
-
// Match: <c cmd="..." run-workflow="workflowPath">...</c>
|
|
601
702
|
// Need to escape special regex characters in the path
|
|
602
703
|
const escapedPath = workflowPath.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
|
|
603
704
|
|
|
604
|
-
// Pattern
|
|
605
|
-
|
|
705
|
+
// Pattern 1: Remove <item> tags with workflow attribute
|
|
706
|
+
// Match: <item cmd="..." workflow="workflowPath">...</item>
|
|
707
|
+
const itemWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
|
|
708
|
+
modifiedXml = modifiedXml.replace(itemWorkflowPattern, '');
|
|
606
709
|
|
|
607
|
-
|
|
710
|
+
// Pattern 2: Remove <item> tags with run-workflow attribute
|
|
711
|
+
// Match: <item cmd="..." run-workflow="workflowPath">...</item>
|
|
712
|
+
const itemRunWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
|
|
713
|
+
modifiedXml = modifiedXml.replace(itemRunWorkflowPattern, '');
|
|
714
|
+
|
|
715
|
+
// Pattern 3: Remove <c> tags with run-workflow attribute (legacy)
|
|
716
|
+
// Match: <c cmd="..." run-workflow="workflowPath">...</c>
|
|
717
|
+
const cPattern = new RegExp(`\\s*<c\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</c>\\s*`, 'gs');
|
|
718
|
+
modifiedXml = modifiedXml.replace(cPattern, '');
|
|
608
719
|
}
|
|
609
720
|
|
|
610
721
|
return modifiedXml;
|
|
@@ -894,9 +1005,12 @@ class WebBundler {
|
|
|
894
1005
|
processed.add(bundleFilePath);
|
|
895
1006
|
|
|
896
1007
|
// Read the file content
|
|
897
|
-
|
|
1008
|
+
let fileContent = await fs.readFile(bundleActualPath, 'utf8');
|
|
898
1009
|
const fileExt = path.extname(bundleActualPath).toLowerCase().replace('.', '');
|
|
899
1010
|
|
|
1011
|
+
// Process {project-root} references before wrapping
|
|
1012
|
+
fileContent = this.processProjectRootReferences(fileContent);
|
|
1013
|
+
|
|
900
1014
|
// Wrap in XML with proper escaping
|
|
901
1015
|
const wrappedContent = this.wrapContentInXml(fileContent, bundleFilePath, fileExt);
|
|
902
1016
|
dependencies.set(bundleFilePath, wrappedContent);
|
|
@@ -1447,7 +1561,10 @@ class WebBundler {
|
|
|
1447
1561
|
}
|
|
1448
1562
|
|
|
1449
1563
|
// Display warnings summary
|
|
1450
|
-
if
|
|
1564
|
+
// Check if there are actually any warnings with content
|
|
1565
|
+
const hasActualWarnings = this.stats.warnings.some((w) => w && w.warnings && w.warnings.length > 0);
|
|
1566
|
+
|
|
1567
|
+
if (hasActualWarnings) {
|
|
1451
1568
|
console.log(chalk.yellow('\n⚠ Missing Dependencies by Agent:'));
|
|
1452
1569
|
|
|
1453
1570
|
// Group and display warnings by agent
|
|
@@ -1461,6 +1578,8 @@ class WebBundler {
|
|
|
1461
1578
|
}
|
|
1462
1579
|
}
|
|
1463
1580
|
}
|
|
1581
|
+
} else {
|
|
1582
|
+
console.log(chalk.green('\n✓ No missing dependencies'));
|
|
1464
1583
|
}
|
|
1465
1584
|
|
|
1466
1585
|
// Final status
|
|
@@ -491,21 +491,49 @@ class ConfigCollector {
|
|
|
491
491
|
// Handle different question types
|
|
492
492
|
if (item['single-select']) {
|
|
493
493
|
questionType = 'list';
|
|
494
|
-
choices = item['single-select']
|
|
495
|
-
|
|
494
|
+
choices = item['single-select'].map((choice) => {
|
|
495
|
+
// If choice is an object with label and value
|
|
496
|
+
if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
|
|
497
|
+
return {
|
|
498
|
+
name: choice.label,
|
|
499
|
+
value: choice.value,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
// Otherwise it's a simple string choice
|
|
503
|
+
return {
|
|
504
|
+
name: choice,
|
|
505
|
+
value: choice,
|
|
506
|
+
};
|
|
507
|
+
});
|
|
508
|
+
if (existingValue) {
|
|
496
509
|
defaultValue = existingValue;
|
|
497
510
|
}
|
|
498
511
|
} else if (item['multi-select']) {
|
|
499
512
|
questionType = 'checkbox';
|
|
500
|
-
choices = item['multi-select'].map((choice) =>
|
|
501
|
-
|
|
502
|
-
value
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
513
|
+
choices = item['multi-select'].map((choice) => {
|
|
514
|
+
// If choice is an object with label and value
|
|
515
|
+
if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
|
|
516
|
+
return {
|
|
517
|
+
name: choice.label,
|
|
518
|
+
value: choice.value,
|
|
519
|
+
checked: existingValue
|
|
520
|
+
? existingValue.includes(choice.value)
|
|
521
|
+
: item.default && Array.isArray(item.default)
|
|
522
|
+
? item.default.includes(choice.value)
|
|
523
|
+
: false,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
// Otherwise it's a simple string choice
|
|
527
|
+
return {
|
|
528
|
+
name: choice,
|
|
529
|
+
value: choice,
|
|
530
|
+
checked: existingValue
|
|
531
|
+
? existingValue.includes(choice)
|
|
532
|
+
: item.default && Array.isArray(item.default)
|
|
533
|
+
? item.default.includes(choice)
|
|
534
|
+
: false,
|
|
535
|
+
};
|
|
536
|
+
});
|
|
509
537
|
} else if (typeof defaultValue === 'boolean') {
|
|
510
538
|
questionType = 'confirm';
|
|
511
539
|
}
|
|
@@ -68,7 +68,9 @@ class IdeConfigManager {
|
|
|
68
68
|
sortKeys: false,
|
|
69
69
|
});
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
// Ensure POSIX-compliant final newline
|
|
72
|
+
const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
|
|
73
|
+
await fs.writeFile(configPath, content, 'utf8');
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
/**
|
|
@@ -906,8 +906,9 @@ class Installer {
|
|
|
906
906
|
}
|
|
907
907
|
}
|
|
908
908
|
|
|
909
|
-
// Write the clean config file
|
|
910
|
-
|
|
909
|
+
// Write the clean config file with POSIX-compliant final newline
|
|
910
|
+
const content = header + yamlContent;
|
|
911
|
+
await fs.writeFile(configPath, content.endsWith('\n') ? content : content + '\n', 'utf8');
|
|
911
912
|
|
|
912
913
|
// Track the config file in installedFiles
|
|
913
914
|
this.installedFiles.push(configPath);
|
|
@@ -1195,8 +1196,9 @@ class Installer {
|
|
|
1195
1196
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1196
1197
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1197
1198
|
|
|
1198
|
-
// Write the built .md file to bmad/{module}/agents/
|
|
1199
|
-
|
|
1199
|
+
// Write the built .md file to bmad/{module}/agents/ with POSIX-compliant final newline
|
|
1200
|
+
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1201
|
+
await fs.writeFile(mdPath, content, 'utf8');
|
|
1200
1202
|
this.installedFiles.push(mdPath);
|
|
1201
1203
|
|
|
1202
1204
|
// Remove the source YAML file - we can regenerate from installer source if needed
|
|
@@ -1213,7 +1215,9 @@ class Installer {
|
|
|
1213
1215
|
if (content.includes('<agent') && !content.includes('<activation')) {
|
|
1214
1216
|
// Inject the activation block using XML handler
|
|
1215
1217
|
content = this.xmlHandler.injectActivationSimple(content);
|
|
1216
|
-
|
|
1218
|
+
// Ensure POSIX-compliant final newline
|
|
1219
|
+
const finalContent = content.endsWith('\n') ? content : content + '\n';
|
|
1220
|
+
await fs.writeFile(agentPath, finalContent, 'utf8');
|
|
1217
1221
|
}
|
|
1218
1222
|
}
|
|
1219
1223
|
}
|
|
@@ -1294,8 +1298,9 @@ class Installer {
|
|
|
1294
1298
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1295
1299
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1296
1300
|
|
|
1297
|
-
// Write the built .md file
|
|
1298
|
-
|
|
1301
|
+
// Write the built .md file with POSIX-compliant final newline
|
|
1302
|
+
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1303
|
+
await fs.writeFile(targetMdPath, content, 'utf8');
|
|
1299
1304
|
|
|
1300
1305
|
// Display result
|
|
1301
1306
|
if (customizedFields.length > 0) {
|
|
@@ -1387,8 +1392,9 @@ class Installer {
|
|
|
1387
1392
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1388
1393
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1389
1394
|
|
|
1390
|
-
// Write the rebuilt .md file
|
|
1391
|
-
|
|
1395
|
+
// Write the rebuilt .md file with POSIX-compliant final newline
|
|
1396
|
+
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1397
|
+
await fs.writeFile(targetMdPath, content, 'utf8');
|
|
1392
1398
|
|
|
1393
1399
|
// Display result with customizations if any
|
|
1394
1400
|
if (customizedFields.length > 0) {
|
|
@@ -2005,6 +2011,11 @@ class Installer {
|
|
|
2005
2011
|
|
|
2006
2012
|
configContent += processedTemplate;
|
|
2007
2013
|
|
|
2014
|
+
// Ensure POSIX-compliant final newline
|
|
2015
|
+
if (!configContent.endsWith('\n')) {
|
|
2016
|
+
configContent += '\n';
|
|
2017
|
+
}
|
|
2018
|
+
|
|
2008
2019
|
await fs.writeFile(configPath, configContent, 'utf8');
|
|
2009
2020
|
this.installedFiles.push(configPath); // Track agent config files
|
|
2010
2021
|
createdCount++;
|
|
@@ -469,7 +469,9 @@ class ManifestGenerator {
|
|
|
469
469
|
sortKeys: false,
|
|
470
470
|
});
|
|
471
471
|
|
|
472
|
-
|
|
472
|
+
// Ensure POSIX-compliant final newline
|
|
473
|
+
const content = yamlStr.endsWith('\n') ? yamlStr : yamlStr + '\n';
|
|
474
|
+
await fs.writeFile(manifestPath, content);
|
|
473
475
|
return manifestPath;
|
|
474
476
|
}
|
|
475
477
|
|
|
@@ -35,7 +35,9 @@ class Manifest {
|
|
|
35
35
|
sortKeys: false,
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
// Ensure POSIX-compliant final newline
|
|
39
|
+
const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
|
|
40
|
+
await fs.writeFile(manifestPath, content, 'utf8');
|
|
39
41
|
return { success: true, path: manifestPath, filesTracked: 0 };
|
|
40
42
|
}
|
|
41
43
|
|
|
@@ -104,7 +106,9 @@ class Manifest {
|
|
|
104
106
|
sortKeys: false,
|
|
105
107
|
});
|
|
106
108
|
|
|
107
|
-
|
|
109
|
+
// Ensure POSIX-compliant final newline
|
|
110
|
+
const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
|
|
111
|
+
await fs.writeFile(manifestPath, content, 'utf8');
|
|
108
112
|
|
|
109
113
|
return manifest;
|
|
110
114
|
}
|
|
@@ -83,6 +83,9 @@ class AuggieSetup extends BaseIdeSetup {
|
|
|
83
83
|
return { success: false, reason: 'no-locations' };
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
// Clean up old BMAD installation first
|
|
87
|
+
await this.cleanup(projectDir);
|
|
88
|
+
|
|
86
89
|
// Get agents, tasks, tools, and workflows (standalone only)
|
|
87
90
|
const agents = await this.getAgents(bmadDir);
|
|
88
91
|
const tasks = await this.getTasks(bmadDir, true);
|
|
@@ -305,31 +308,17 @@ BMAD ${workflow.module.toUpperCase()} module
|
|
|
305
308
|
async cleanup(projectDir) {
|
|
306
309
|
const fs = require('fs-extra');
|
|
307
310
|
|
|
308
|
-
// Check common locations
|
|
311
|
+
// Check common locations - bmad folder structure
|
|
309
312
|
const locations = [path.join(os.homedir(), '.augment', 'commands'), path.join(projectDir, '.augment', 'commands')];
|
|
310
313
|
|
|
311
314
|
for (const location of locations) {
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
const dirs = [agentsDir, tasksDir, toolsDir, workflowsDir];
|
|
318
|
-
|
|
319
|
-
for (const dir of dirs) {
|
|
320
|
-
if (await fs.pathExists(dir)) {
|
|
321
|
-
// Remove only BMAD files (those with module prefix)
|
|
322
|
-
const files = await fs.readdir(dir);
|
|
323
|
-
for (const file of files) {
|
|
324
|
-
if (file.includes('-') && file.endsWith('.md')) {
|
|
325
|
-
await fs.remove(path.join(dir, file));
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
}
|
|
315
|
+
const bmadDir = path.join(location, 'bmad');
|
|
316
|
+
|
|
317
|
+
if (await fs.pathExists(bmadDir)) {
|
|
318
|
+
await fs.remove(bmadDir);
|
|
319
|
+
console.log(chalk.dim(` Removed old BMAD commands from ${location}`));
|
|
329
320
|
}
|
|
330
321
|
}
|
|
331
|
-
|
|
332
|
-
console.log(chalk.dim('Cleaned up Auggie CLI configurations'));
|
|
333
322
|
}
|
|
334
323
|
}
|
|
335
324
|
|