bmad-method 6.0.0-alpha.7 → 6.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
- package/.github/workflows/bundle-latest.yaml +277 -0
- package/.github/workflows/manual-release.yaml +55 -16
- package/.vscode/settings.json +2 -1
- package/CHANGELOG.md +439 -1
- package/README.md +12 -4
- package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/docs/agent-customization-guide.md +208 -0
- package/docs/ide-info/crush.md +1 -1
- package/docs/ide-info/cursor.md +7 -7
- package/docs/ide-info/iflow.md +3 -3
- package/docs/ide-info/opencode.md +1 -1
- package/docs/index.md +3 -1
- package/docs/installers-bundlers/ide-injections.md +2 -2
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +23 -23
- package/docs/v4-to-v6-upgrade.md +12 -12
- package/docs/web-bundles-gemini-gpt-guide.md +473 -0
- package/package.json +1 -1
- package/src/core/_module-installer/install-config.yaml +17 -10
- package/src/core/_module-installer/installer.js +0 -8
- package/src/core/agents/bmad-master.agent.yaml +5 -5
- package/src/core/agents/bmad-web-orchestrator.agent.xml +8 -17
- package/src/core/tasks/{adv-elicit.xml → advanced-elicitation.xml} +6 -4
- package/src/core/tasks/index-docs.xml +1 -1
- package/src/core/tasks/validate-workflow.xml +1 -1
- package/src/core/tasks/workflow.xml +125 -11
- package/src/core/tools/shard-doc.xml +45 -1
- package/src/core/workflows/brainstorming/README.md +6 -16
- package/src/core/workflows/brainstorming/instructions.md +6 -5
- package/src/core/workflows/brainstorming/template.md +4 -0
- package/src/core/workflows/brainstorming/workflow.yaml +8 -8
- package/src/core/workflows/party-mode/instructions.md +2 -7
- package/src/core/workflows/party-mode/workflow.yaml +10 -6
- package/src/modules/bmb/_module-installer/install-config.yaml +9 -4
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +11 -10
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +5 -6
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +5 -5
- package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +2 -2
- package/src/modules/bmb/workflows/convert-legacy/README.md +5 -5
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +2 -2
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +17 -17
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +6 -6
- package/src/modules/bmb/workflows/create-agent/README.md +5 -5
- package/src/modules/bmb/workflows/create-agent/agent-architecture.md +15 -19
- package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +28 -28
- package/src/modules/bmb/workflows/create-agent/agent-types.md +15 -15
- package/src/modules/bmb/workflows/create-agent/checklist.md +3 -3
- package/src/modules/bmb/workflows/create-agent/instructions.md +24 -27
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +12 -12
- package/src/modules/bmb/workflows/create-module/README.md +1 -1
- package/src/modules/bmb/workflows/create-module/checklist.md +1 -10
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +1 -1
- package/src/modules/bmb/workflows/create-module/instructions.md +12 -17
- package/src/modules/bmb/workflows/create-module/module-structure.md +7 -7
- package/src/modules/bmb/workflows/create-module/workflow.yaml +9 -9
- package/src/modules/bmb/workflows/create-workflow/README.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/checklist.md +1 -1
- package/src/modules/bmb/workflows/create-workflow/instructions.md +29 -29
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +40 -42
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +2 -2
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +12 -12
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +5 -5
- package/src/modules/bmb/workflows/edit-agent/checklist.md +1 -1
- package/src/modules/bmb/workflows/edit-agent/instructions.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +8 -8
- package/src/modules/bmb/workflows/edit-module/README.md +2 -2
- package/src/modules/bmb/workflows/edit-module/checklist.md +2 -2
- package/src/modules/bmb/workflows/edit-module/instructions.md +4 -4
- package/src/modules/bmb/workflows/edit-module/workflow.yaml +10 -10
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +4 -4
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +5 -5
- package/src/modules/bmb/workflows/module-brief/README.md +2 -2
- package/src/modules/bmb/workflows/module-brief/checklist.md +2 -2
- package/src/modules/bmb/workflows/module-brief/instructions.md +2 -2
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +4 -4
- package/src/modules/bmb/workflows/redoc/README.md +5 -5
- package/src/modules/bmb/workflows/redoc/instructions.md +1 -1
- package/src/modules/bmb/workflows/redoc/workflow.yaml +1 -1
- package/src/modules/bmgd/README.md +1 -1
- package/src/modules/bmgd/_module-installer/install-config.yaml +12 -24
- package/src/modules/bmgd/agents/game-architect.agent.yaml +15 -10
- package/src/modules/bmgd/agents/game-designer.agent.yaml +16 -11
- package/src/modules/bmgd/agents/game-dev.agent.yaml +18 -12
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +30 -25
- package/src/modules/bmgd/teams/default-party.csv +10 -0
- package/src/modules/bmgd/teams/team-gamedev.yaml +2 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
- package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +5 -10
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
- package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -6
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +0 -26
- package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +2 -6
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +2 -7
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +25 -47
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +13 -32
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +7 -2
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +32 -25
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +20 -47
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +16 -24
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +8 -3
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +30 -5
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +10 -35
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +16 -24
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +18 -36
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +16 -37
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +11 -15
- package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +1 -1
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +8 -7
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +1 -1
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +20 -45
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +15 -17
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +5 -4
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +6 -6
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +5 -7
- package/src/modules/bmm/_module-installer/install-config.yaml +9 -28
- package/src/modules/bmm/_module-installer/installer.js +2 -2
- package/src/modules/bmm/agents/analyst.agent.yaml +20 -15
- package/src/modules/bmm/agents/architect.agent.yaml +17 -12
- package/src/modules/bmm/agents/dev.agent.yaml +9 -12
- package/src/modules/bmm/agents/pm.agent.yaml +24 -23
- package/src/modules/bmm/agents/sm.agent.yaml +24 -19
- package/src/modules/bmm/agents/tea.agent.yaml +23 -17
- package/src/modules/bmm/agents/tech-writer.agent.yaml +15 -11
- package/src/modules/bmm/agents/ux-designer.agent.yaml +16 -11
- package/src/modules/bmm/docs/agents-guide.md +4 -4
- package/src/modules/bmm/docs/brownfield-guide.md +4 -4
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +1 -1
- package/src/modules/bmm/docs/party-mode.md +3 -3
- package/src/modules/bmm/docs/quick-start.md +1 -1
- package/src/modules/bmm/docs/test-architecture.md +1 -1
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/teams/default-party.csv +19 -0
- package/src/modules/bmm/teams/team-fullstack.yaml +1 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +8 -8
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +8 -21
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +10 -12
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +13 -9
- package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +1 -3
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +2 -7
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +1 -6
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +14 -14
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +7 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +16 -10
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +8 -12
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +28 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +146 -23
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +7 -9
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +152 -35
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +20 -16
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +12 -9
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -6
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +434 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +129 -266
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +15 -37
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -26
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +3 -7
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +30 -38
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +25 -43
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +7 -13
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +57 -60
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +12 -12
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +25 -47
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +13 -32
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +7 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +32 -25
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +20 -47
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +16 -24
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +8 -3
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +30 -5
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +10 -35
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +16 -24
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +18 -36
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +16 -37
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +11 -15
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +1 -1
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +8 -7
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +20 -45
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +15 -17
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +5 -4
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +6 -6
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +5 -7
- package/src/modules/bmm/workflows/document-project/checklist.md +1 -1
- package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
- package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +4 -4
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
- package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +13 -13
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +4 -4
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/framework/checklist.md +4 -4
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/test-design/checklist.md +4 -4
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +175 -14
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +4 -4
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +7 -3
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +9 -9
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +33 -31
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +5 -4
- package/src/modules/bmm/workflows/workflow-status/instructions.md +5 -4
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +9 -16
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +11 -18
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +8 -1
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +9 -2
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +2 -9
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
- package/src/modules/cis/README.md +1 -1
- package/src/modules/cis/_module-installer/install-config.yaml +6 -4
- package/src/modules/cis/agents/README.md +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +13 -8
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +13 -8
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +13 -8
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +13 -8
- package/src/modules/cis/agents/storyteller.agent.yaml +13 -8
- package/src/modules/cis/teams/creative-squad.yaml +1 -0
- package/src/modules/cis/teams/default-party.csv +11 -0
- package/src/modules/cis/workflows/README.md +1 -1
- package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
- package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
- package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
- package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
- package/src/utility/models/action-command-header.md +0 -0
- package/src/utility/models/agent-activation-ide.xml +3 -3
- package/src/utility/models/agent-activation-web.xml +4 -4
- package/src/utility/models/agent-command-header.md +1 -0
- package/src/utility/models/fragments/activation-steps.xml +3 -2
- package/src/utility/models/fragments/handler-validate-workflow.xml +1 -1
- package/src/utility/models/fragments/handler-workflow.xml +1 -1
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +3 -3
- package/tools/cli/README.md +50 -32
- package/tools/cli/bundlers/web-bundler.js +86 -17
- package/tools/cli/commands/install.js +1 -4
- package/tools/cli/installers/lib/core/config-collector.js +201 -28
- package/tools/cli/installers/lib/core/detector.js +62 -7
- package/tools/cli/installers/lib/core/installer.js +175 -33
- package/tools/cli/installers/lib/core/manifest-generator.js +26 -115
- package/tools/cli/installers/lib/ide/_base-ide.js +57 -3
- package/tools/cli/installers/lib/ide/auggie.js +78 -224
- package/tools/cli/installers/lib/ide/claude-code.js +14 -22
- package/tools/cli/installers/lib/ide/cline.js +15 -18
- package/tools/cli/installers/lib/ide/codex.js +17 -48
- package/tools/cli/installers/lib/ide/crush.js +14 -50
- package/tools/cli/installers/lib/ide/cursor.js +51 -8
- package/tools/cli/installers/lib/ide/gemini.js +87 -37
- package/tools/cli/installers/lib/ide/github-copilot.js +47 -35
- package/tools/cli/installers/lib/ide/iflow.js +13 -30
- package/tools/cli/installers/lib/ide/kilo.js +20 -16
- package/tools/cli/installers/lib/ide/manager.js +15 -0
- package/tools/cli/installers/lib/ide/opencode.js +16 -17
- package/tools/cli/installers/lib/ide/qwen.js +39 -11
- package/tools/cli/installers/lib/ide/roo.js +27 -62
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +90 -0
- package/tools/cli/installers/lib/ide/{task-tool-command-generator.js → shared/task-tool-command-generator.js} +1 -1
- package/tools/cli/installers/lib/ide/{workflow-command-generator.js → shared/workflow-command-generator.js} +11 -9
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
- package/tools/cli/installers/lib/ide/{workflow-command-template.md → templates/workflow-command-template.md} +3 -5
- package/tools/cli/installers/lib/ide/trae.js +20 -32
- package/tools/cli/installers/lib/ide/windsurf.js +18 -8
- package/tools/cli/installers/lib/modules/manager.js +89 -17
- package/tools/cli/lib/cli-utils.js +52 -50
- package/tools/cli/lib/ui.js +29 -12
- package/tools/cli/lib/yaml-xml-builder.js +20 -2
- package/tools/schema/agent.js +7 -3
- package/.claude/commands/bmad/bmb/agents/bmad-builder.md +0 -70
- package/.claude/commands/bmad/bmb/workflows/audit-workflow.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/convert-legacy.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/create-agent.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/create-module.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/create-workflow.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/edit-agent.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/edit-module.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/edit-workflow.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/module-brief.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/redoc.md +0 -15
- package/.claude/commands/bmad/core/agents/bmad-master.md +0 -71
- package/.claude/commands/bmad/core/tasks/index-docs.md +0 -9
- package/.claude/commands/bmad/core/tools/shard-doc.md +0 -9
- package/.claude/commands/bmad/core/workflows/brainstorming.md +0 -15
- package/.claude/commands/bmad/core/workflows/party-mode.md +0 -15
- package/.claude/settings.local.json +0 -22
- package/bmad/_cfg/agent-manifest.csv +0 -5
- package/bmad/_cfg/agents/bmb-bmad-builder.customize.yaml +0 -42
- package/bmad/_cfg/agents/core-bmad-master.customize.yaml +0 -42
- package/bmad/_cfg/files-manifest.csv +0 -82
- package/bmad/_cfg/ides/claude-code.yaml +0 -6
- package/bmad/_cfg/manifest.yaml +0 -11
- package/bmad/_cfg/task-manifest.csv +0 -13
- package/bmad/_cfg/tool-manifest.csv +0 -4
- package/bmad/_cfg/workflow-manifest.csv +0 -17
- package/bmad/bmb/README.md +0 -194
- package/bmad/bmb/agents/bmad-builder.md +0 -70
- package/bmad/bmb/config.yaml +0 -14
- package/bmad/bmb/workflows/audit-workflow/checklist.md +0 -143
- package/bmad/bmb/workflows/audit-workflow/instructions.md +0 -341
- package/bmad/bmb/workflows/audit-workflow/template.md +0 -118
- package/bmad/bmb/workflows/audit-workflow/workflow.yaml +0 -23
- package/bmad/bmb/workflows/convert-legacy/README.md +0 -262
- package/bmad/bmb/workflows/convert-legacy/checklist.md +0 -205
- package/bmad/bmb/workflows/convert-legacy/instructions.md +0 -377
- package/bmad/bmb/workflows/convert-legacy/workflow.yaml +0 -32
- package/bmad/bmb/workflows/create-agent/README.md +0 -203
- package/bmad/bmb/workflows/create-agent/agent-architecture.md +0 -419
- package/bmad/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
- package/bmad/bmb/workflows/create-agent/agent-types.md +0 -292
- package/bmad/bmb/workflows/create-agent/brainstorm-context.md +0 -174
- package/bmad/bmb/workflows/create-agent/checklist.md +0 -62
- package/bmad/bmb/workflows/create-agent/communication-styles.md +0 -202
- package/bmad/bmb/workflows/create-agent/instructions.md +0 -459
- package/bmad/bmb/workflows/create-agent/workflow.yaml +0 -37
- package/bmad/bmb/workflows/create-module/README.md +0 -229
- package/bmad/bmb/workflows/create-module/brainstorm-context.md +0 -137
- package/bmad/bmb/workflows/create-module/checklist.md +0 -244
- package/bmad/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
- package/bmad/bmb/workflows/create-module/installer-templates/installer.js +0 -231
- package/bmad/bmb/workflows/create-module/instructions.md +0 -581
- package/bmad/bmb/workflows/create-module/module-structure.md +0 -400
- package/bmad/bmb/workflows/create-module/workflow.yaml +0 -42
- package/bmad/bmb/workflows/create-workflow/README.md +0 -277
- package/bmad/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
- package/bmad/bmb/workflows/create-workflow/checklist.md +0 -94
- package/bmad/bmb/workflows/create-workflow/instructions.md +0 -724
- package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1308
- package/bmad/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
- package/bmad/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
- package/bmad/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
- package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -39
- package/bmad/bmb/workflows/create-workflow/workflow.yaml +0 -40
- package/bmad/bmb/workflows/edit-agent/README.md +0 -112
- package/bmad/bmb/workflows/edit-agent/checklist.md +0 -112
- package/bmad/bmb/workflows/edit-agent/instructions.md +0 -290
- package/bmad/bmb/workflows/edit-agent/workflow.yaml +0 -33
- package/bmad/bmb/workflows/edit-module/README.md +0 -187
- package/bmad/bmb/workflows/edit-module/checklist.md +0 -165
- package/bmad/bmb/workflows/edit-module/instructions.md +0 -339
- package/bmad/bmb/workflows/edit-module/workflow.yaml +0 -34
- package/bmad/bmb/workflows/edit-workflow/README.md +0 -119
- package/bmad/bmb/workflows/edit-workflow/checklist.md +0 -70
- package/bmad/bmb/workflows/edit-workflow/instructions.md +0 -342
- package/bmad/bmb/workflows/edit-workflow/workflow.yaml +0 -27
- package/bmad/bmb/workflows/module-brief/README.md +0 -264
- package/bmad/bmb/workflows/module-brief/checklist.md +0 -116
- package/bmad/bmb/workflows/module-brief/instructions.md +0 -267
- package/bmad/bmb/workflows/module-brief/template.md +0 -275
- package/bmad/bmb/workflows/module-brief/workflow.yaml +0 -29
- package/bmad/bmb/workflows/redoc/README.md +0 -87
- package/bmad/bmb/workflows/redoc/checklist.md +0 -99
- package/bmad/bmb/workflows/redoc/instructions.md +0 -265
- package/bmad/bmb/workflows/redoc/workflow.yaml +0 -32
- package/bmad/core/agents/bmad-master.md +0 -71
- package/bmad/core/agents/bmad-web-orchestrator.agent.xml +0 -122
- package/bmad/core/config.yaml +0 -9
- package/bmad/core/tasks/adv-elicit-methods.csv +0 -39
- package/bmad/core/tasks/adv-elicit.xml +0 -104
- package/bmad/core/tasks/index-docs.xml +0 -65
- package/bmad/core/tasks/validate-workflow.xml +0 -89
- package/bmad/core/tasks/workflow.xml +0 -156
- package/bmad/core/tools/shard-doc.xml +0 -65
- package/bmad/core/workflows/brainstorming/README.md +0 -271
- package/bmad/core/workflows/brainstorming/brain-methods.csv +0 -36
- package/bmad/core/workflows/brainstorming/instructions.md +0 -314
- package/bmad/core/workflows/brainstorming/template.md +0 -102
- package/bmad/core/workflows/brainstorming/workflow.yaml +0 -43
- package/bmad/core/workflows/party-mode/instructions.md +0 -188
- package/bmad/core/workflows/party-mode/workflow.yaml +0 -23
- package/bmad/docs/claude-code-instructions.md +0 -25
- package/bmd/README.md +0 -193
- package/bmd/agents/cli-chief-sidecar/instructions.md +0 -102
- package/bmd/agents/cli-chief-sidecar/knowledge/README.md +0 -68
- package/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +0 -123
- package/bmd/agents/cli-chief-sidecar/memories.md +0 -53
- package/bmd/agents/cli-chief.agent.yaml +0 -126
- package/bmd/agents/doc-keeper-sidecar/instructions.md +0 -177
- package/bmd/agents/doc-keeper-sidecar/knowledge/README.md +0 -81
- package/bmd/agents/doc-keeper-sidecar/memories.md +0 -88
- package/bmd/agents/doc-keeper.agent.yaml +0 -137
- package/bmd/agents/release-chief-sidecar/instructions.md +0 -164
- package/bmd/agents/release-chief-sidecar/knowledge/README.md +0 -82
- package/bmd/agents/release-chief-sidecar/memories.md +0 -73
- package/bmd/agents/release-chief.agent.yaml +0 -127
- package/bmd/bmad-custom-module-installer-plan.md +0 -1176
- package/bmd/config.yaml +0 -12
- package/src/modules/bmgd/workflows/4-production/dev-story/AUDIT-REPORT.md +0 -367
- package/src/modules/bmm/sub-modules/claude-code/README.md +0 -87
- package/src/modules/bmm/sub-modules/claude-code/config.yaml +0 -5
- package/src/modules/bmm/sub-modules/claude-code/injections.yaml +0 -242
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/api-documenter.md +0 -102
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/codebase-analyzer.md +0 -82
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/data-analyst.md +0 -101
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/pattern-detector.md +0 -84
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/dependency-mapper.md +0 -83
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/epic-optimizer.md +0 -81
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/requirements-analyst.md +0 -61
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/technical-decisions-curator.md +0 -168
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/trend-spotter.md +0 -115
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-journey-mapper.md +0 -123
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-researcher.md +0 -72
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/market-researcher.md +0 -51
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/tech-debt-auditor.md +0 -106
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/document-reviewer.md +0 -102
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/technical-evaluator.md +0 -68
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/test-coverage-analyzer.md +0 -108
- package/src/modules/bmm/tasks/daily-standup.xml +0 -85
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +0 -200
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +0 -451
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +0 -189
- package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +0 -367
- package/src/modules/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +0 -49
- package/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +0 -23
- package/web-bundles/bmm/agents/analyst.xml +0 -5028
- package/web-bundles/bmm/agents/architect.xml +0 -2047
- package/web-bundles/bmm/agents/dev.xml +0 -68
- package/web-bundles/bmm/agents/pm.xml +0 -3808
- package/web-bundles/bmm/agents/sm.xml +0 -77
- package/web-bundles/bmm/agents/tea.xml +0 -66
- package/web-bundles/bmm/agents/tech-writer.xml +0 -84
- package/web-bundles/bmm/agents/ux-designer.xml +0 -2018
- package/web-bundles/bmm/teams/team-fullstack.xml +0 -12039
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: '{{name}}'
|
|
3
|
+
description: '{{description}}'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
|
+
|
|
8
|
+
<agent-activation CRITICAL="TRUE">
|
|
9
|
+
1. LOAD the FULL agent file from @{bmad_folder}/{{module}}/agents/{{name}}.md
|
|
10
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
|
+
3. Execute ALL activation steps exactly as written in the agent file
|
|
12
|
+
4. Follow the agent's persona and menu system precisely
|
|
13
|
+
5. Stay in character throughout the session
|
|
14
|
+
</agent-activation>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
description = "Activates the {{title}} agent from the BMad Method."
|
|
2
|
+
prompt = """
|
|
3
|
+
CRITICAL: You are now the BMad '{{title}}' agent.
|
|
4
|
+
|
|
5
|
+
PRE-FLIGHT CHECKLIST:
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{{bmad_folder}}/{{module}}/config.yaml - store ALL config values in memory for use throughout the session.
|
|
7
|
+
2. [ ] IMMEDIATE ACTION: Read and internalize the full agent definition at @{{bmad_folder}}/{{module}}/agents/{{name}}.md.
|
|
8
|
+
3. [ ] CONFIRM: The user's name from config is {user_name}.
|
|
9
|
+
|
|
10
|
+
Only after all checks are complete, greet the user by name and display the menu.
|
|
11
|
+
Acknowledge this checklist is complete in your first response.
|
|
12
|
+
|
|
13
|
+
AGENT DEFINITION: @{{bmad_folder}}/{{module}}/agents/{{name}}.md
|
|
14
|
+
"""
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
description = "Executes the {{taskName}} task from the BMad Method."
|
|
2
|
+
prompt = """
|
|
3
|
+
Execute the following BMad Method task workflow:
|
|
4
|
+
|
|
5
|
+
PRE-FLIGHT CHECKLIST:
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{{bmad_folder}}/{{module}}/config.yaml.
|
|
7
|
+
2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{{bmad_folder}}/{{module}}/tasks/{{filename}}.
|
|
8
|
+
|
|
9
|
+
Follow all instructions and complete the task as defined.
|
|
10
|
+
|
|
11
|
+
TASK DEFINITION: @{{bmad_folder}}/{{module}}/tasks/{{filename}}
|
|
12
|
+
"""
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
description: '{{description}}'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# {{name}}
|
|
6
|
-
|
|
7
5
|
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
|
|
8
6
|
|
|
9
7
|
<steps CRITICAL="TRUE">
|
|
10
|
-
1. Always LOAD the FULL {
|
|
11
|
-
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config {{workflow_path}}
|
|
8
|
+
1. Always LOAD the FULL @{bmad_folder}/core/tasks/workflow.xml
|
|
9
|
+
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config @{{workflow_path}}
|
|
12
10
|
3. Pass the yaml path {{workflow_path}} as 'workflow-config' parameter to the workflow.xml instructions
|
|
13
|
-
4. Follow workflow.xml instructions EXACTLY as written
|
|
11
|
+
4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
|
|
14
12
|
5. Save outputs after EACH section when generating any documents from templates
|
|
15
13
|
</steps>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
|
+
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Trae IDE setup handler
|
|
@@ -30,20 +31,22 @@ class TraeSetup extends BaseIdeSetup {
|
|
|
30
31
|
// Clean up any existing BMAD files before reinstalling
|
|
31
32
|
await this.cleanup(projectDir);
|
|
32
33
|
|
|
33
|
-
//
|
|
34
|
-
const
|
|
34
|
+
// Generate agent launchers
|
|
35
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
36
|
+
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
37
|
+
|
|
38
|
+
// Get tasks, tools, and workflows (standalone only)
|
|
35
39
|
const tasks = await this.getTasks(bmadDir, true);
|
|
36
40
|
const tools = await this.getTools(bmadDir, true);
|
|
37
41
|
const workflows = await this.getWorkflows(bmadDir, true);
|
|
38
42
|
|
|
39
43
|
// Process agents as rules with bmad- prefix
|
|
40
44
|
let agentCount = 0;
|
|
41
|
-
for (const
|
|
42
|
-
const
|
|
43
|
-
const processedContent = this.createAgentRule(agent, content, bmadDir, projectDir);
|
|
45
|
+
for (const artifact of agentArtifacts) {
|
|
46
|
+
const processedContent = await this.createAgentRule(artifact, bmadDir, projectDir);
|
|
44
47
|
|
|
45
48
|
// Use bmad- prefix: bmad-agent-{module}-{name}.md
|
|
46
|
-
const targetPath = path.join(rulesDir, `bmad-agent-${
|
|
49
|
+
const targetPath = path.join(rulesDir, `bmad-agent-${artifact.module}-${artifact.name}.md`);
|
|
47
50
|
await this.writeFile(targetPath, processedContent);
|
|
48
51
|
agentCount++;
|
|
49
52
|
}
|
|
@@ -108,44 +111,29 @@ class TraeSetup extends BaseIdeSetup {
|
|
|
108
111
|
/**
|
|
109
112
|
* Create rule content for an agent
|
|
110
113
|
*/
|
|
111
|
-
createAgentRule(
|
|
112
|
-
//
|
|
113
|
-
const
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
const iconMatch = content.match(/icon="([^"]+)"/);
|
|
117
|
-
const icon = iconMatch ? iconMatch[1] : '🤖';
|
|
114
|
+
async createAgentRule(artifact, bmadDir, projectDir) {
|
|
115
|
+
// Strip frontmatter from launcher
|
|
116
|
+
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
|
117
|
+
const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
|
|
118
118
|
|
|
119
|
-
// Extract
|
|
120
|
-
const
|
|
121
|
-
const
|
|
119
|
+
// Extract metadata from launcher content
|
|
120
|
+
const titleMatch = artifact.content.match(/description:\s*"([^"]+)"/);
|
|
121
|
+
const title = titleMatch ? titleMatch[1] : this.formatTitle(artifact.name);
|
|
122
122
|
|
|
123
123
|
// Calculate relative path for reference
|
|
124
|
-
const relativePath = path.relative(projectDir,
|
|
124
|
+
const relativePath = path.relative(projectDir, artifact.sourcePath).replaceAll('\\', '/');
|
|
125
125
|
|
|
126
126
|
let ruleContent = `# ${title} Agent Rule
|
|
127
127
|
|
|
128
|
-
This rule is triggered when the user types \`@${
|
|
128
|
+
This rule is triggered when the user types \`@${artifact.name}\` and activates the ${title} agent persona.
|
|
129
129
|
|
|
130
130
|
## Agent Activation
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
\`\`\`yaml
|
|
135
|
-
${yamlContent}
|
|
136
|
-
\`\`\`
|
|
132
|
+
${contentWithoutFrontmatter}
|
|
137
133
|
|
|
138
134
|
## File Reference
|
|
139
135
|
|
|
140
|
-
The
|
|
141
|
-
|
|
142
|
-
## Usage
|
|
143
|
-
|
|
144
|
-
When the user types \`@${agent.name}\`, activate this ${title} persona and follow all instructions defined in the YAML configuration above.
|
|
145
|
-
|
|
146
|
-
## Module
|
|
147
|
-
|
|
148
|
-
Part of the BMAD ${agent.module.toUpperCase()} module.
|
|
136
|
+
The full agent definition is located at: \`${relativePath}\`
|
|
149
137
|
`;
|
|
150
138
|
|
|
151
139
|
return ruleContent;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
|
+
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Windsurf IDE setup handler
|
|
@@ -31,8 +32,14 @@ class WindsurfSetup extends BaseIdeSetup {
|
|
|
31
32
|
// Clean up any existing BMAD workflows before reinstalling
|
|
32
33
|
await this.cleanup(projectDir);
|
|
33
34
|
|
|
34
|
-
//
|
|
35
|
-
const
|
|
35
|
+
// Generate agent launchers
|
|
36
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
37
|
+
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
38
|
+
|
|
39
|
+
// Convert artifacts to agent format for module organization
|
|
40
|
+
const agents = agentArtifacts.map((a) => ({ module: a.module, name: a.name }));
|
|
41
|
+
|
|
42
|
+
// Get tasks, tools, and workflows (standalone only)
|
|
36
43
|
const tasks = await this.getTasks(bmadDir, true);
|
|
37
44
|
const tools = await this.getTools(bmadDir, true);
|
|
38
45
|
const workflows = await this.getWorkflows(bmadDir, true);
|
|
@@ -49,14 +56,13 @@ class WindsurfSetup extends BaseIdeSetup {
|
|
|
49
56
|
await this.ensureDir(path.join(bmadWorkflowsDir, module, 'workflows'));
|
|
50
57
|
}
|
|
51
58
|
|
|
52
|
-
// Process
|
|
59
|
+
// Process agent launchers as workflows with organized structure
|
|
53
60
|
let agentCount = 0;
|
|
54
|
-
for (const
|
|
55
|
-
const
|
|
56
|
-
const processedContent = this.createWorkflowContent(agent, content);
|
|
61
|
+
for (const artifact of agentArtifacts) {
|
|
62
|
+
const processedContent = this.createWorkflowContent({ module: artifact.module, name: artifact.name }, artifact.content);
|
|
57
63
|
|
|
58
64
|
// Organized path: bmad/module/agents/agent-name.md
|
|
59
|
-
const targetPath = path.join(bmadWorkflowsDir,
|
|
65
|
+
const targetPath = path.join(bmadWorkflowsDir, artifact.module, 'agents', `${artifact.name}.md`);
|
|
60
66
|
await this.writeFile(targetPath, processedContent);
|
|
61
67
|
agentCount++;
|
|
62
68
|
}
|
|
@@ -127,13 +133,17 @@ class WindsurfSetup extends BaseIdeSetup {
|
|
|
127
133
|
* Create workflow content for an agent
|
|
128
134
|
*/
|
|
129
135
|
createWorkflowContent(agent, content) {
|
|
136
|
+
// Strip existing frontmatter from launcher
|
|
137
|
+
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
|
138
|
+
const contentWithoutFrontmatter = content.replace(frontmatterRegex, '');
|
|
139
|
+
|
|
130
140
|
// Create simple Windsurf frontmatter matching original format
|
|
131
141
|
let workflowContent = `---
|
|
132
142
|
description: ${agent.name}
|
|
133
143
|
auto_execution_mode: 3
|
|
134
144
|
---
|
|
135
145
|
|
|
136
|
-
${
|
|
146
|
+
${contentWithoutFrontmatter}`;
|
|
137
147
|
|
|
138
148
|
return workflowContent;
|
|
139
149
|
}
|
|
@@ -26,6 +26,70 @@ class ModuleManager {
|
|
|
26
26
|
// Path to source modules directory
|
|
27
27
|
this.modulesSourcePath = getSourcePath('modules');
|
|
28
28
|
this.xmlHandler = new XmlHandler();
|
|
29
|
+
this.bmadFolderName = 'bmad'; // Default, can be overridden
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Set the bmad folder name for placeholder replacement
|
|
34
|
+
* @param {string} bmadFolderName - The bmad folder name
|
|
35
|
+
*/
|
|
36
|
+
setBmadFolderName(bmadFolderName) {
|
|
37
|
+
this.bmadFolderName = bmadFolderName;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Copy a file and replace {bmad_folder} placeholder with actual folder name
|
|
42
|
+
* @param {string} sourcePath - Source file path
|
|
43
|
+
* @param {string} targetPath - Target file path
|
|
44
|
+
*/
|
|
45
|
+
async copyFileWithPlaceholderReplacement(sourcePath, targetPath) {
|
|
46
|
+
// List of text file extensions that should have placeholder replacement
|
|
47
|
+
const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json', '.js', '.ts', '.html', '.css', '.sh', '.bat', '.csv'];
|
|
48
|
+
const ext = path.extname(sourcePath).toLowerCase();
|
|
49
|
+
|
|
50
|
+
// Check if this is a text file that might contain placeholders
|
|
51
|
+
if (textExtensions.includes(ext)) {
|
|
52
|
+
try {
|
|
53
|
+
// Read the file content
|
|
54
|
+
let content = await fs.readFile(sourcePath, 'utf8');
|
|
55
|
+
|
|
56
|
+
// Replace {bmad_folder} placeholder with actual folder name
|
|
57
|
+
if (content.includes('{bmad_folder}')) {
|
|
58
|
+
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Write to target with replaced content
|
|
62
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
63
|
+
await fs.writeFile(targetPath, content, 'utf8');
|
|
64
|
+
} catch {
|
|
65
|
+
// If reading as text fails (might be binary despite extension), fall back to regular copy
|
|
66
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
// Binary file or other file type - just copy directly
|
|
70
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Copy a directory recursively with placeholder replacement
|
|
76
|
+
* @param {string} sourceDir - Source directory path
|
|
77
|
+
* @param {string} targetDir - Target directory path
|
|
78
|
+
*/
|
|
79
|
+
async copyDirectoryWithPlaceholderReplacement(sourceDir, targetDir) {
|
|
80
|
+
await fs.ensureDir(targetDir);
|
|
81
|
+
const entries = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
82
|
+
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
const sourcePath = path.join(sourceDir, entry.name);
|
|
85
|
+
const targetPath = path.join(targetDir, entry.name);
|
|
86
|
+
|
|
87
|
+
if (entry.isDirectory()) {
|
|
88
|
+
await this.copyDirectoryWithPlaceholderReplacement(sourcePath, targetPath);
|
|
89
|
+
} else {
|
|
90
|
+
await this.copyFileWithPlaceholderReplacement(sourcePath, targetPath);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
29
93
|
}
|
|
30
94
|
|
|
31
95
|
/**
|
|
@@ -311,9 +375,8 @@ class ModuleManager {
|
|
|
311
375
|
await fs.ensureDir(path.dirname(targetFile));
|
|
312
376
|
await this.copyWorkflowYamlStripped(sourceFile, targetFile);
|
|
313
377
|
} else {
|
|
314
|
-
// Copy the file
|
|
315
|
-
await
|
|
316
|
-
await fs.copy(sourceFile, targetFile, { overwrite: true });
|
|
378
|
+
// Copy the file with placeholder replacement
|
|
379
|
+
await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile);
|
|
317
380
|
}
|
|
318
381
|
|
|
319
382
|
// Track the file if callback provided
|
|
@@ -333,12 +396,16 @@ class ModuleManager {
|
|
|
333
396
|
// Read the source YAML file
|
|
334
397
|
let yamlContent = await fs.readFile(sourceFile, 'utf8');
|
|
335
398
|
|
|
399
|
+
// IMPORTANT: Replace {bmad_folder} BEFORE parsing YAML
|
|
400
|
+
// Otherwise parsing will fail on the placeholder
|
|
401
|
+
yamlContent = yamlContent.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
402
|
+
|
|
336
403
|
try {
|
|
337
404
|
// First check if web_bundle exists by parsing
|
|
338
405
|
const workflowConfig = yaml.load(yamlContent);
|
|
339
406
|
|
|
340
407
|
if (workflowConfig.web_bundle === undefined) {
|
|
341
|
-
// No web_bundle section, just
|
|
408
|
+
// No web_bundle section, just write (placeholders already replaced above)
|
|
342
409
|
await fs.writeFile(targetFile, yamlContent, 'utf8');
|
|
343
410
|
return;
|
|
344
411
|
}
|
|
@@ -400,6 +467,7 @@ class ModuleManager {
|
|
|
400
467
|
// Clean up any double blank lines that might result
|
|
401
468
|
const strippedYaml = newLines.join('\n').replaceAll(/\n\n\n+/g, '\n\n');
|
|
402
469
|
|
|
470
|
+
// Placeholders already replaced at the beginning of this function
|
|
403
471
|
await fs.writeFile(targetFile, strippedYaml, 'utf8');
|
|
404
472
|
} catch {
|
|
405
473
|
// If anything fails, just copy the file as-is
|
|
@@ -488,8 +556,10 @@ class ModuleManager {
|
|
|
488
556
|
const installWorkflowPath = item['workflow-install']; // Where to copy TO
|
|
489
557
|
|
|
490
558
|
// Parse SOURCE workflow path
|
|
491
|
-
//
|
|
492
|
-
|
|
559
|
+
// Handle both {bmad_folder} placeholder and hardcoded 'bmad'
|
|
560
|
+
// Example: {project-root}/{bmad_folder}/bmm/workflows/4-implementation/create-story/workflow.yaml
|
|
561
|
+
// Or: {project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
|
|
562
|
+
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
493
563
|
if (!sourceMatch) {
|
|
494
564
|
console.warn(chalk.yellow(` Could not parse workflow path: ${sourceWorkflowPath}`));
|
|
495
565
|
continue;
|
|
@@ -498,8 +568,9 @@ class ModuleManager {
|
|
|
498
568
|
const [, sourceModule, sourceWorkflowSubPath] = sourceMatch;
|
|
499
569
|
|
|
500
570
|
// Parse INSTALL workflow path
|
|
501
|
-
//
|
|
502
|
-
|
|
571
|
+
// Handle both {bmad_folder} placeholder and hardcoded 'bmad'
|
|
572
|
+
// Example: {project-root}/{bmad_folder}/bmgd/workflows/4-production/create-story/workflow.yaml
|
|
573
|
+
const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
503
574
|
if (!installMatch) {
|
|
504
575
|
console.warn(chalk.yellow(` Could not parse workflow-install path: ${installWorkflowPath}`));
|
|
505
576
|
continue;
|
|
@@ -527,7 +598,8 @@ class ModuleManager {
|
|
|
527
598
|
);
|
|
528
599
|
|
|
529
600
|
await fs.ensureDir(path.dirname(actualDestWorkflowPath));
|
|
530
|
-
|
|
601
|
+
// Copy the workflow directory recursively with placeholder replacement
|
|
602
|
+
await this.copyDirectoryWithPlaceholderReplacement(actualSourceWorkflowPath, actualDestWorkflowPath);
|
|
531
603
|
|
|
532
604
|
// Update the workflow.yaml config_source reference
|
|
533
605
|
const workflowYamlPath = path.join(actualDestWorkflowPath, 'workflow.yaml');
|
|
@@ -550,16 +622,17 @@ class ModuleManager {
|
|
|
550
622
|
async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
|
|
551
623
|
let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
|
|
552
624
|
|
|
553
|
-
// Replace config_source: "{project-root}/
|
|
554
|
-
// with config_source: "{project-root}/
|
|
555
|
-
|
|
556
|
-
const
|
|
625
|
+
// Replace config_source: "{project-root}/{bmad_folder}/OLD_MODULE/config.yaml"
|
|
626
|
+
// with config_source: "{project-root}/{bmad_folder}/NEW_MODULE/config.yaml"
|
|
627
|
+
// Note: At this point {bmad_folder} has already been replaced with actual folder name
|
|
628
|
+
const configSourcePattern = /config_source:\s*["']?\{project-root\}\/[^/]+\/[^/]+\/config\.yaml["']?/g;
|
|
629
|
+
const newConfigSource = `config_source: "{project-root}/${this.bmadFolderName}/${newModuleName}/config.yaml"`;
|
|
557
630
|
|
|
558
631
|
const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
|
|
559
632
|
|
|
560
633
|
if (updatedYaml !== yamlContent) {
|
|
561
634
|
await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
|
|
562
|
-
console.log(chalk.dim(` Updated config_source to:
|
|
635
|
+
console.log(chalk.dim(` Updated config_source to: ${this.bmadFolderName}/${newModuleName}/config.yaml`));
|
|
563
636
|
}
|
|
564
637
|
}
|
|
565
638
|
|
|
@@ -664,9 +737,8 @@ class ModuleManager {
|
|
|
664
737
|
}
|
|
665
738
|
}
|
|
666
739
|
|
|
667
|
-
// Copy file
|
|
668
|
-
await
|
|
669
|
-
await fs.copy(sourceFile, targetFile, { overwrite: true });
|
|
740
|
+
// Copy file with placeholder replacement
|
|
741
|
+
await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile);
|
|
670
742
|
}
|
|
671
743
|
}
|
|
672
744
|
|
|
@@ -2,13 +2,31 @@ const chalk = require('chalk');
|
|
|
2
2
|
const boxen = require('boxen');
|
|
3
3
|
const wrapAnsi = require('wrap-ansi');
|
|
4
4
|
const figlet = require('figlet');
|
|
5
|
+
const path = require('node:path');
|
|
5
6
|
|
|
6
7
|
const CLIUtils = {
|
|
8
|
+
/**
|
|
9
|
+
* Get version from package.json
|
|
10
|
+
*/
|
|
11
|
+
getVersion() {
|
|
12
|
+
try {
|
|
13
|
+
const packageJson = require(path.join(__dirname, '..', '..', '..', 'package.json'));
|
|
14
|
+
return packageJson.version || 'Unknown';
|
|
15
|
+
} catch {
|
|
16
|
+
return 'Unknown';
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
|
|
7
20
|
/**
|
|
8
21
|
* Display BMAD logo
|
|
22
|
+
* @param {boolean} clearScreen - Whether to clear the screen first (default: true for initial display only)
|
|
9
23
|
*/
|
|
10
|
-
displayLogo() {
|
|
11
|
-
|
|
24
|
+
displayLogo(clearScreen = true) {
|
|
25
|
+
if (clearScreen) {
|
|
26
|
+
console.clear();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const version = this.getVersion();
|
|
12
30
|
|
|
13
31
|
// ASCII art logo
|
|
14
32
|
const logo = `
|
|
@@ -20,7 +38,7 @@ const CLIUtils = {
|
|
|
20
38
|
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝`;
|
|
21
39
|
|
|
22
40
|
console.log(chalk.cyan(logo));
|
|
23
|
-
console.log(chalk.dim(
|
|
41
|
+
console.log(chalk.dim(` Build More, Architect Dreams`) + chalk.cyan.bold(` v${version}`) + '\n');
|
|
24
42
|
},
|
|
25
43
|
|
|
26
44
|
/**
|
|
@@ -64,18 +82,35 @@ const CLIUtils = {
|
|
|
64
82
|
},
|
|
65
83
|
|
|
66
84
|
/**
|
|
67
|
-
* Display
|
|
68
|
-
* @param {string
|
|
85
|
+
* Display module configuration header
|
|
86
|
+
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
87
|
+
* @param {string} header - Custom header from install-config.yaml
|
|
88
|
+
* @param {string} subheader - Custom subheader from install-config.yaml
|
|
69
89
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
90
|
+
displayModuleConfigHeader(moduleName, header = null, subheader = null) {
|
|
91
|
+
// Simple blue banner with custom header/subheader if provided
|
|
92
|
+
console.log('\n' + chalk.cyan('─'.repeat(80)));
|
|
93
|
+
console.log(chalk.cyan(header || `Configuring ${moduleName.toUpperCase()} Module`));
|
|
94
|
+
if (subheader) {
|
|
95
|
+
console.log(chalk.dim(`${subheader}`));
|
|
96
|
+
}
|
|
97
|
+
console.log(chalk.cyan('─'.repeat(80)) + '\n');
|
|
98
|
+
},
|
|
74
99
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Display module with no custom configuration
|
|
102
|
+
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
103
|
+
* @param {string} header - Custom header from install-config.yaml
|
|
104
|
+
* @param {string} subheader - Custom subheader from install-config.yaml
|
|
105
|
+
*/
|
|
106
|
+
displayModuleNoConfig(moduleName, header = null, subheader = null) {
|
|
107
|
+
// Show full banner with header/subheader, just like modules with config
|
|
108
|
+
console.log('\n' + chalk.cyan('─'.repeat(80)));
|
|
109
|
+
console.log(chalk.cyan(header || `${moduleName.toUpperCase()} Module - No Custom Configuration`));
|
|
110
|
+
if (subheader) {
|
|
111
|
+
console.log(chalk.dim(`${subheader}`));
|
|
112
|
+
}
|
|
113
|
+
console.log(chalk.cyan('─'.repeat(80)) + '\n');
|
|
79
114
|
},
|
|
80
115
|
|
|
81
116
|
/**
|
|
@@ -164,44 +199,11 @@ const CLIUtils = {
|
|
|
164
199
|
/**
|
|
165
200
|
* Display module completion message
|
|
166
201
|
* @param {string} moduleName - Name of the completed module
|
|
167
|
-
* @param {boolean} clearScreen - Whether to clear the screen first
|
|
202
|
+
* @param {boolean} clearScreen - Whether to clear the screen first (deprecated, always false now)
|
|
168
203
|
*/
|
|
169
|
-
displayModuleComplete(moduleName, clearScreen =
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
this.displayLogo();
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
let message;
|
|
176
|
-
|
|
177
|
-
// Special messages for specific modules
|
|
178
|
-
if (moduleName.toLowerCase() === 'bmm') {
|
|
179
|
-
message = `Thank you for configuring the BMAD™ Method Module (BMM)!
|
|
180
|
-
|
|
181
|
-
Your responses have been saved and will be used to configure your installation.`;
|
|
182
|
-
} else if (moduleName.toLowerCase() === 'cis') {
|
|
183
|
-
message = `Thank you for choosing the BMAD™ Creative Innovation Suite, an early beta
|
|
184
|
-
release with much more planned!
|
|
185
|
-
|
|
186
|
-
With this BMAD™ Creative Innovation Suite Configuration, remember that all
|
|
187
|
-
paths are relative to project root, with no leading slash.`;
|
|
188
|
-
} else if (moduleName.toLowerCase() === 'core') {
|
|
189
|
-
message = `Thank you for choosing the BMAD™ Method, your gateway to dreaming, planning
|
|
190
|
-
and building with real world proven techniques.
|
|
191
|
-
|
|
192
|
-
All paths are relative to project root, with no leading slash.`;
|
|
193
|
-
} else {
|
|
194
|
-
message = `Thank you for configuring the BMAD™ ${moduleName.toUpperCase()} module!
|
|
195
|
-
|
|
196
|
-
Your responses have been saved and will be used to configure your installation.`;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
this.displayBox(message, {
|
|
200
|
-
borderColor: 'yellow',
|
|
201
|
-
borderStyle: 'double',
|
|
202
|
-
padding: 1,
|
|
203
|
-
margin: 1,
|
|
204
|
-
});
|
|
204
|
+
displayModuleComplete(moduleName, clearScreen = false) {
|
|
205
|
+
// No longer clear screen or show boxes - just a simple completion message
|
|
206
|
+
// This is deprecated but kept for backwards compatibility
|
|
205
207
|
},
|
|
206
208
|
};
|
|
207
209
|
|
package/tools/cli/lib/ui.js
CHANGED
|
@@ -17,14 +17,26 @@ class UI {
|
|
|
17
17
|
*/
|
|
18
18
|
async promptInstall() {
|
|
19
19
|
CLIUtils.displayLogo();
|
|
20
|
-
CLIUtils.
|
|
20
|
+
const version = CLIUtils.getVersion();
|
|
21
|
+
CLIUtils.displaySection('BMAD™ Setup', `Build More, Architect Dreams v${version}`);
|
|
21
22
|
|
|
22
23
|
const confirmedDirectory = await this.getConfirmedDirectory();
|
|
23
24
|
|
|
25
|
+
// Preflight: Check for legacy BMAD v4 footprints immediately after getting directory
|
|
26
|
+
const { Detector } = require('../installers/lib/core/detector');
|
|
27
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
28
|
+
const detector = new Detector();
|
|
29
|
+
const installer = new Installer();
|
|
30
|
+
const legacyV4 = await detector.detectLegacyV4(confirmedDirectory);
|
|
31
|
+
if (legacyV4.hasLegacyV4) {
|
|
32
|
+
await installer.handleLegacyV4Migration(confirmedDirectory, legacyV4);
|
|
33
|
+
}
|
|
34
|
+
|
|
24
35
|
// Check if there's an existing BMAD installation
|
|
25
36
|
const fs = require('fs-extra');
|
|
26
37
|
const path = require('node:path');
|
|
27
|
-
|
|
38
|
+
// Use findBmadDir to detect any custom folder names (V6+)
|
|
39
|
+
const bmadDir = await installer.findBmadDir(confirmedDirectory);
|
|
28
40
|
const hasExistingInstall = await fs.pathExists(bmadDir);
|
|
29
41
|
|
|
30
42
|
// Track action type (only set if there's an existing installation)
|
|
@@ -91,9 +103,7 @@ class UI {
|
|
|
91
103
|
// This allows text-based prompts to complete before the checkbox prompt
|
|
92
104
|
const toolSelection = await this.promptToolSelection(confirmedDirectory, selectedModules);
|
|
93
105
|
|
|
94
|
-
|
|
95
|
-
CLIUtils.displayLogo();
|
|
96
|
-
CLIUtils.displayModuleComplete('core', false); // false = don't clear the screen again
|
|
106
|
+
// No more screen clearing - keep output flowing
|
|
97
107
|
|
|
98
108
|
return {
|
|
99
109
|
actionType: actionType || 'update', // Preserve reinstall or update action
|
|
@@ -114,10 +124,12 @@ class UI {
|
|
|
114
124
|
* @returns {Object} Tool configuration
|
|
115
125
|
*/
|
|
116
126
|
async promptToolSelection(projectDir, selectedModules) {
|
|
117
|
-
// Check for existing configured IDEs
|
|
127
|
+
// Check for existing configured IDEs - use findBmadDir to detect custom folder names
|
|
118
128
|
const { Detector } = require('../installers/lib/core/detector');
|
|
129
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
119
130
|
const detector = new Detector();
|
|
120
|
-
const
|
|
131
|
+
const installer = new Installer();
|
|
132
|
+
const bmadDir = await installer.findBmadDir(projectDir || process.cwd());
|
|
121
133
|
const existingInstall = await detector.detect(bmadDir);
|
|
122
134
|
const configuredIdes = existingInstall.ides || [];
|
|
123
135
|
|
|
@@ -322,8 +334,10 @@ class UI {
|
|
|
322
334
|
*/
|
|
323
335
|
async getExistingInstallation(directory) {
|
|
324
336
|
const { Detector } = require('../installers/lib/core/detector');
|
|
337
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
325
338
|
const detector = new Detector();
|
|
326
|
-
const
|
|
339
|
+
const installer = new Installer();
|
|
340
|
+
const bmadDir = await installer.findBmadDir(directory);
|
|
327
341
|
const existingInstall = await detector.detect(bmadDir);
|
|
328
342
|
const installedModuleIds = new Set(existingInstall.modules.map((mod) => mod.id));
|
|
329
343
|
|
|
@@ -421,17 +435,20 @@ class UI {
|
|
|
421
435
|
if (stats.isDirectory()) {
|
|
422
436
|
const files = await fs.readdir(directory);
|
|
423
437
|
if (files.length > 0) {
|
|
438
|
+
// Check for any bmad installation (any folder with _cfg/manifest.yaml)
|
|
439
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
440
|
+
const installer = new Installer();
|
|
441
|
+
const bmadDir = await installer.findBmadDir(directory);
|
|
442
|
+
const hasBmadInstall = (await fs.pathExists(bmadDir)) && (await fs.pathExists(path.join(bmadDir, '_cfg', 'manifest.yaml')));
|
|
443
|
+
|
|
424
444
|
console.log(
|
|
425
445
|
chalk.gray(`Directory exists and contains ${files.length} item(s)`) +
|
|
426
|
-
(
|
|
446
|
+
(hasBmadInstall ? chalk.yellow(` including existing BMAD installation (${path.basename(bmadDir)})`) : ''),
|
|
427
447
|
);
|
|
428
448
|
} else {
|
|
429
449
|
console.log(chalk.gray('Directory exists and is empty'));
|
|
430
450
|
}
|
|
431
451
|
}
|
|
432
|
-
} else {
|
|
433
|
-
const existingParent = await this.findExistingParent(directory);
|
|
434
|
-
console.log(chalk.gray(`Will create in: ${existingParent}`));
|
|
435
452
|
}
|
|
436
453
|
}
|
|
437
454
|
|
|
@@ -270,13 +270,31 @@ class YamlXmlBuilder {
|
|
|
270
270
|
|
|
271
271
|
/**
|
|
272
272
|
* Build prompts XML section
|
|
273
|
+
* Handles both array format and object/dictionary format
|
|
273
274
|
*/
|
|
274
275
|
buildPromptsXml(prompts) {
|
|
275
|
-
if (!prompts
|
|
276
|
+
if (!prompts) return '';
|
|
277
|
+
|
|
278
|
+
// Handle object/dictionary format: { promptId: 'content', ... }
|
|
279
|
+
// Convert to array format for processing
|
|
280
|
+
let promptsArray = prompts;
|
|
281
|
+
if (!Array.isArray(prompts)) {
|
|
282
|
+
// Check if it's an object with no length property (dictionary format)
|
|
283
|
+
if (typeof prompts === 'object' && prompts.length === undefined) {
|
|
284
|
+
promptsArray = Object.entries(prompts).map(([id, content]) => ({
|
|
285
|
+
id: id,
|
|
286
|
+
content: content,
|
|
287
|
+
}));
|
|
288
|
+
} else {
|
|
289
|
+
return ''; // Not a valid prompts format
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
if (promptsArray.length === 0) return '';
|
|
276
294
|
|
|
277
295
|
let xml = ' <prompts>\n';
|
|
278
296
|
|
|
279
|
-
for (const prompt of
|
|
297
|
+
for (const prompt of promptsArray) {
|
|
280
298
|
xml += ` <prompt id="${prompt.id || ''}">\n`;
|
|
281
299
|
xml += ` <![CDATA[\n`;
|
|
282
300
|
xml += ` ${prompt.content || ''}\n`;
|