bmad-method 6.0.0-alpha.16 → 6.0.0-alpha.17
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/.coderabbit.yaml +7 -3
- package/.github/scripts/discord-helpers.sh +21 -2
- package/.github/workflows/discord.yaml +31 -7
- package/.github/workflows/manual-release.yaml +12 -42
- package/.markdownlint-cli2.yaml +2 -2
- package/.prettierignore +2 -2
- package/.vscode/settings.json +1 -1
- package/CHANGELOG.md +96 -2
- package/LICENSE +1 -1
- package/README.md +29 -2
- package/docs/agent-customization-guide.md +10 -10
- package/docs/custom-content-installation.md +100 -196
- package/docs/custom-content.md +122 -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/ide-info/rovo-dev.md +1 -1
- package/docs/index.md +2 -2
- package/docs/installers-bundlers/ide-injections.md +2 -2
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +13 -13
- package/docs/sample-custom-modules/README.md +11 -0
- package/docs/sample-custom-modules/sample-unitary-module/README.md +8 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/commit-poet/commit-poet.agent.yaml +129 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +161 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
- package/docs/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith.agent.yaml +109 -0
- package/docs/sample-custom-modules/sample-unitary-module/module.yaml +8 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md +168 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md +155 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md +89 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md +36 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md +150 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/templates/csv-headers.template +1 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md +54 -0
- package/docs/sample-custom-modules/sample-unitary-module/workflows/wassup/workflow.md +26 -0
- package/docs/sample-custom-modules/sample-wellness-module/README.md +6 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/meditation-guide.agent.yaml +136 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/foo.md +3 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/addition1.md +1 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
- package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion.agent.yaml +120 -0
- package/docs/sample-custom-modules/sample-wellness-module/module.yaml +17 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/daily-checkin/README.md +32 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/daily-checkin/workflow.md +45 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/guided-meditation/README.md +31 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/guided-meditation/workflow.md +45 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/wellness-journal/README.md +31 -0
- package/docs/sample-custom-modules/sample-wellness-module/workflows/wellness-journal/workflow.md +45 -0
- package/docs/v4-to-v6-upgrade.md +27 -27
- package/docs/web-bundles-gemini-gpt-guide.md +6 -458
- package/eslint.config.mjs +2 -2
- package/package.json +1 -1
- package/src/core/agents/bmad-master.agent.yaml +6 -11
- package/src/core/module.yaml +11 -18
- package/src/core/resources/excalidraw/README.md +6 -6
- package/src/core/tasks/advanced-elicitation.xml +3 -3
- package/src/core/tasks/index-docs.xml +1 -1
- package/src/core/tasks/validate-workflow.xml +1 -1
- package/src/core/tasks/workflow.xml +4 -4
- package/src/core/tools/shard-doc.xml +12 -12
- package/src/core/workflows/brainstorming/workflow.md +3 -3
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +2 -2
- package/src/core/workflows/party-mode/workflow.md +4 -4
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +15 -15
- package/src/modules/bmb/{README.md → docs/README.md} +15 -27
- package/src/modules/bmb/docs/agents/agent-compilation.md +3 -3
- package/src/modules/bmb/docs/agents/agent-menu-patterns.md +23 -24
- package/src/modules/bmb/docs/agents/expert-agent-architecture.md +20 -21
- package/src/modules/bmb/docs/agents/simple-agent-architecture.md +17 -52
- package/src/modules/bmb/docs/agents/understanding-agent-types.md +6 -6
- package/src/modules/bmb/docs/workflows/architecture.md +1 -1
- package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +3 -3
- package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +1 -1
- package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +1 -1
- package/src/modules/bmb/docs/workflows/templates/step-file.md +3 -3
- package/src/modules/bmb/docs/workflows/templates/step-template.md +3 -3
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +2 -2
- package/src/modules/bmb/docs/workflows/templates/workflow.md +1 -1
- package/src/modules/bmb/module.yaml +6 -15
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
- package/src/modules/bmb/reference/agents/module-examples/README.md +3 -4
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +5 -5
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/reference/agents/simple-examples/README.md +1 -1
- package/src/modules/bmb/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +1 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +6 -10
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +6 -6
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +9 -9
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +6 -5
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +19 -57
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +5 -5
- package/src/modules/bmb/workflows/create-agent/steps/{step-11-celebrate.md → step-08-celebrate.md} +2 -6
- package/src/modules/bmb/workflows/create-agent/templates/agent-plan.template.md +3 -0
- package/src/modules/bmb/workflows/create-agent/templates/expert-agent.template.md +364 -0
- package/src/modules/bmb/workflows/create-agent/templates/simple-agent.template.md +257 -0
- package/src/modules/bmb/workflows/create-agent/workflow.md +2 -35
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +2 -2
- package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +6 -6
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +5 -5
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +8 -8
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +5 -5
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +8 -8
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +7 -7
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +7 -7
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +6 -6
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +15 -19
- package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +1 -1
- package/src/modules/bmb/workflows/create-module/workflow.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +6 -6
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +5 -5
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +11 -11
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +14 -14
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +2 -2
- package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +12 -12
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +4 -4
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +4 -4
- package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +4 -4
- package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +6 -6
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +6 -6
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
- package/src/modules/bmb/workflows-legacy/edit-module/README.md +1 -17
- package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +3 -4
- package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +4 -5
- package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +10 -10
- package/src/modules/bmb/workflows-legacy/module-brief/README.md +2 -2
- package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +2 -2
- package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +4 -4
- package/src/modules/bmgd/README.md +1 -1
- package/src/modules/bmgd/agents/game-architect.agent.yaml +6 -6
- package/src/modules/bmgd/agents/game-designer.agent.yaml +7 -7
- package/src/modules/bmgd/agents/game-dev.agent.yaml +10 -10
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +21 -21
- package/src/modules/bmgd/module.yaml +2 -7
- 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 +4 -4
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
- package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -1
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +4 -4
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +2 -2
- 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 +2 -2
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +3 -3
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +2 -2
- 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 +2 -2
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +2 -2
- package/src/modules/bmm/README.md +1 -1
- package/src/modules/bmm/agents/analyst.agent.yaml +9 -9
- package/src/modules/bmm/agents/architect.agent.yaml +8 -8
- package/src/modules/bmm/agents/dev.agent.yaml +5 -5
- package/src/modules/bmm/agents/pm.agent.yaml +8 -8
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +5 -5
- package/src/modules/bmm/agents/sm.agent.yaml +11 -11
- package/src/modules/bmm/agents/tea.agent.yaml +13 -13
- package/src/modules/bmm/agents/tech-writer.agent.yaml +9 -9
- package/src/modules/bmm/agents/ux-designer.agent.yaml +6 -6
- package/src/modules/bmm/docs/agents-guide.md +16 -14
- package/src/modules/bmm/docs/brownfield-guide.md +6 -6
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +5 -18
- package/src/modules/bmm/docs/glossary.md +3 -4
- package/src/modules/bmm/docs/images/README.md +1 -1
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +8 -8
- package/src/modules/bmm/docs/party-mode.md +3 -3
- package/src/modules/bmm/docs/quick-flow-solo-dev.md +5 -5
- package/src/modules/bmm/docs/quick-spec-flow.md +2 -16
- package/src/modules/bmm/docs/quick-start.md +3 -3
- package/src/modules/bmm/docs/test-architecture.md +15 -23
- package/src/modules/bmm/docs/troubleshooting.md +6 -25
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/docs/workflows-implementation.md +3 -4
- package/src/modules/bmm/module.yaml +25 -23
- package/src/modules/bmm/testarch/knowledge/overview.md +0 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-01b-continue.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-02-vision.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-03-users.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-04-metrics.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-05-scope.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-06-complete.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/workflow.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +7 -7
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +8 -8
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +12 -12
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +12 -12
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +10 -10
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +7 -7
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +9 -9
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +9 -9
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-01-document-discovery.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-06-final-assessment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/workflow.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-02-context.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-03-starter.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-04-decisions.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-05-patterns.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-06-structure.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-07-validation.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-08-complete.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +3 -3
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +4 -3
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +5 -5
- package/src/modules/bmm/workflows/4-implementation/create-story/template.md +3 -5
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +11 -8
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +3 -3
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +15 -22
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +4 -5
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +90 -35
- package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +7 -7
- 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.yaml +5 -5
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/instructions.md +1 -1
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/instructions.md +2 -2
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/instructions.md +2 -2
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/instructions.md +1 -1
- package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +3 -3
- package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +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/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +3 -3
- 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/instructions.md +3 -3
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +10 -4
- 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 +6 -6
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +1 -1
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +4 -4
- package/src/modules/bmm/workflows/workflow-status/instructions.md +3 -3
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +4 -4
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +4 -4
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +4 -4
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +4 -4
- package/src/modules/cis/agents/presentation-master.agent.yaml +3 -3
- package/src/modules/cis/agents/storyteller/storyteller-sidecar/stories-told.md +7 -0
- package/src/modules/cis/agents/storyteller/storyteller-sidecar/story-preferences.md +7 -0
- package/src/modules/cis/agents/{storyteller.agent.yaml → storyteller/storyteller.agent.yaml} +9 -4
- package/src/modules/cis/module.yaml +3 -7
- package/src/modules/cis/{README.md → readme.md} +1 -1
- 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/agent-components/activation-rules.txt +7 -0
- package/src/utility/agent-components/activation-steps.txt +13 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/{templates → agent-components}/agent.customize.template.yaml +0 -1
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/test/README.md +1 -1
- package/test/test-agent-schema.js +2 -2
- package/tools/cli/README.md +1 -607
- package/tools/cli/commands/build.js +7 -7
- package/tools/cli/commands/install.js +9 -20
- package/tools/cli/commands/list.js +13 -1
- package/tools/cli/installers/lib/core/config-collector.js +224 -59
- package/tools/cli/installers/lib/core/custom-module-cache.js +18 -10
- package/tools/cli/installers/lib/core/dependency-resolver.js +2 -2
- package/tools/cli/installers/lib/core/detector.js +16 -16
- package/tools/cli/installers/lib/core/ide-config-manager.js +9 -7
- package/tools/cli/installers/lib/core/installer.js +540 -946
- package/tools/cli/installers/lib/core/manifest-generator.js +43 -40
- package/tools/cli/installers/lib/core/manifest.js +23 -20
- package/tools/cli/installers/lib/custom/handler.js +16 -46
- package/tools/cli/installers/lib/ide/_base-ide.js +26 -33
- package/tools/cli/installers/lib/ide/antigravity.js +3 -3
- package/tools/cli/installers/lib/ide/claude-code.js +3 -3
- package/tools/cli/installers/lib/ide/codex.js +2 -2
- package/tools/cli/installers/lib/ide/gemini.js +6 -6
- package/tools/cli/installers/lib/ide/kiro-cli.js +2 -2
- package/tools/cli/installers/lib/ide/opencode.js +2 -2
- package/tools/cli/installers/lib/ide/roo.js +15 -5
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +2 -2
- package/tools/cli/installers/lib/ide/shared/module-injections.js +2 -2
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +2 -2
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +4 -4
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +3 -3
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +3 -3
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +1 -1
- package/tools/cli/installers/lib/modules/manager.js +304 -313
- package/tools/cli/lib/activation-builder.js +8 -13
- package/tools/cli/lib/agent/compiler.js +68 -168
- package/tools/cli/lib/agent/installer.js +8 -128
- package/tools/cli/lib/agent-analyzer.js +2 -2
- package/tools/cli/lib/agent-party-generator.js +5 -17
- package/tools/cli/lib/config.js +2 -2
- package/tools/cli/lib/platform-codes.js +2 -2
- package/tools/cli/lib/ui.js +631 -568
- package/tools/cli/lib/xml-handler.js +3 -55
- package/tools/cli/lib/yaml-format.js +4 -6
- package/tools/cli/lib/yaml-xml-builder.js +14 -26
- package/tools/flattener/ignoreRules.js +1 -1
- package/tools/flattener/xml.js +1 -7
- package/tools/lib/xml-utils.js +13 -0
- package/tools/migrate-custom-module-paths.js +2 -2
- package/tools/validate-agent-schema.js +2 -2
- package/docs/v6-open-items.md +0 -17
- package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -113
- package/src/modules/bmb/_module-installer/installer.js +0 -76
- package/src/modules/bmb/docs/agents/module-agent-architecture.md +0 -366
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +0 -179
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +0 -197
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +0 -180
- package/src/modules/bmb/workflows/create-agent/templates/agent_commands.md +0 -21
- package/src/modules/bmb/workflows/create-agent/templates/agent_persona.md +0 -25
- package/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md +0 -23
- package/src/modules/bmm/tasks/daily-standup.xml +0 -85
- package/src/modules/cis/agents/README.md +0 -104
- package/src/utility/models/action-command-header.md +0 -0
- package/src/utility/models/agent-activation-ide.xml +0 -51
- package/src/utility/models/agent-activation-web.xml +0 -50
- package/src/utility/models/agent-command-header.md +0 -1
- package/src/utility/models/agent-config-template.md +0 -23
- package/src/utility/models/agent-in-team-activation.xml +0 -3
- package/src/utility/models/fragments/activation-rules.xml +0 -7
- package/src/utility/models/fragments/activation-steps.xml +0 -16
- package/src/utility/models/fragments/handler-action.xml +0 -4
- package/src/utility/models/fragments/handler-exec.xml +0 -6
- package/src/utility/models/fragments/handler-multi.xml +0 -14
- package/src/utility/models/fragments/handler-tmpl.xml +0 -5
- package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
- package/src/utility/models/fragments/handler-workflow.xml +0 -9
- package/src/utility/models/fragments/menu-handlers.xml +0 -6
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
- package/tools/cli/bundlers/bundle-web.js +0 -179
- package/tools/cli/bundlers/test-analyst.js +0 -28
- package/tools/cli/bundlers/test-bundler.js +0 -118
- package/tools/cli/bundlers/web-bundler.js +0 -1754
- package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +0 -79
- package/tools/cli/lib/replace-project-root.js +0 -239
- package/tools/cli/regenerate-manifests.js +0 -27
- package/tools/cli/test-yaml-builder.js +0 -43
- /package/src/modules/bmgd/workflows/4-production/code-review/{backlog_template.md → backlog-template.md} +0 -0
- /package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/product-brief.template.md +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/templates/readiness-report-template.md +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/architecture-decision-template.md +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/data/domain-complexity.csv +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/data/project-types.csv +0 -0
- /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-01b-continue.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/_shared/excalidraw-library.json +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/_shared/excalidraw-templates.yaml +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/checklist.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/checklist.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/checklist.md +0 -0
- /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/checklist.md +0 -0
- /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
|
@@ -21,29 +21,20 @@ module.exports = {
|
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
// Handle agent compilation separately
|
|
25
|
-
if (config.actionType === 'compile') {
|
|
26
|
-
const result = await installer.compileAgents(config);
|
|
27
|
-
console.log(chalk.green('\n✨ Agent compilation complete!'));
|
|
28
|
-
console.log(chalk.cyan(`Rebuilt ${result.agentCount} agents and ${result.taskCount} tasks`));
|
|
29
|
-
process.exit(0);
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
24
|
// Handle quick update separately
|
|
34
25
|
if (config.actionType === 'quick-update') {
|
|
35
26
|
const result = await installer.quickUpdate(config);
|
|
36
27
|
console.log(chalk.green('\n✨ Quick update complete!'));
|
|
37
28
|
console.log(chalk.cyan(`Updated ${result.moduleCount} modules with preserved settings`));
|
|
29
|
+
console.log(
|
|
30
|
+
chalk.magenta(
|
|
31
|
+
"\n📋 Want to see what's new? Check out the changelog: https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md",
|
|
32
|
+
),
|
|
33
|
+
);
|
|
38
34
|
process.exit(0);
|
|
39
35
|
return;
|
|
40
36
|
}
|
|
41
37
|
|
|
42
|
-
// Handle reinstall by setting force flag
|
|
43
|
-
if (config.actionType === 'reinstall') {
|
|
44
|
-
config._requestedReinstall = true;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
38
|
// Regular install/update flow
|
|
48
39
|
const result = await installer.install(config);
|
|
49
40
|
|
|
@@ -55,14 +46,11 @@ module.exports = {
|
|
|
55
46
|
|
|
56
47
|
// Check if installation succeeded
|
|
57
48
|
if (result && result.success) {
|
|
58
|
-
console.log(chalk.green('\n✨ Installation complete!'));
|
|
59
|
-
console.log(chalk.cyan('BMAD Core and Selected Modules have been installed to:'), chalk.bold(result.path));
|
|
60
|
-
console.log(chalk.yellow('\nThank you for helping test the early release version of the new BMad Core and BMad Method!'));
|
|
61
|
-
console.log(chalk.cyan('Stable Beta coming soon - please read the full README.md and linked documentation to get started!'));
|
|
62
|
-
|
|
63
49
|
// Run AgentVibes installer if needed
|
|
64
50
|
if (result.needsAgentVibes) {
|
|
65
|
-
|
|
51
|
+
// Add some spacing before AgentVibes setup
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(chalk.magenta('🎙️ AgentVibes TTS Setup'));
|
|
66
54
|
console.log(chalk.cyan('AgentVibes provides voice synthesis for BMAD agents with:'));
|
|
67
55
|
console.log(chalk.dim(' • ElevenLabs AI (150+ premium voices)'));
|
|
68
56
|
console.log(chalk.dim(' • Piper TTS (50+ free voices)\n'));
|
|
@@ -91,6 +79,7 @@ module.exports = {
|
|
|
91
79
|
shell: true,
|
|
92
80
|
});
|
|
93
81
|
console.log(chalk.green('\n✓ AgentVibes installation complete'));
|
|
82
|
+
console.log(chalk.cyan('\n✨ BMAD with TTS is ready to use!'));
|
|
94
83
|
} catch {
|
|
95
84
|
console.log(chalk.yellow('\n⚠ AgentVibes installation was interrupted or failed'));
|
|
96
85
|
console.log(chalk.cyan('You can run it manually later with:'));
|
|
@@ -9,7 +9,9 @@ module.exports = {
|
|
|
9
9
|
options: [],
|
|
10
10
|
action: async () => {
|
|
11
11
|
try {
|
|
12
|
-
const
|
|
12
|
+
const result = await installer.getAvailableModules();
|
|
13
|
+
const { modules, customModules } = result;
|
|
14
|
+
|
|
13
15
|
console.log(chalk.cyan('\n📦 Available BMAD Modules:\n'));
|
|
14
16
|
|
|
15
17
|
for (const module of modules) {
|
|
@@ -19,6 +21,16 @@ module.exports = {
|
|
|
19
21
|
console.log();
|
|
20
22
|
}
|
|
21
23
|
|
|
24
|
+
if (customModules && customModules.length > 0) {
|
|
25
|
+
console.log(chalk.cyan('\n🔧 Custom Modules:\n'));
|
|
26
|
+
for (const module of customModules) {
|
|
27
|
+
console.log(chalk.bold(` ${module.id}`));
|
|
28
|
+
console.log(chalk.dim(` ${module.description}`));
|
|
29
|
+
console.log(chalk.dim(` Version: ${module.version}`));
|
|
30
|
+
console.log();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
22
34
|
process.exit(0);
|
|
23
35
|
} catch (error) {
|
|
24
36
|
console.error(chalk.red('Error:'), error.message);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
|
-
const yaml = require('
|
|
3
|
+
const yaml = require('yaml');
|
|
4
4
|
const chalk = require('chalk');
|
|
5
5
|
const inquirer = require('inquirer');
|
|
6
6
|
const { getProjectRoot, getModulePath } = require('../../../lib/project-root');
|
|
@@ -15,7 +15,7 @@ class ConfigCollector {
|
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Find the bmad installation directory in a project
|
|
18
|
-
* V6+ installations can use ANY folder name but ALWAYS have
|
|
18
|
+
* V6+ installations can use ANY folder name but ALWAYS have _config/manifest.yaml
|
|
19
19
|
* @param {string} projectDir - Project directory
|
|
20
20
|
* @returns {Promise<string>} Path to bmad directory
|
|
21
21
|
*/
|
|
@@ -26,13 +26,13 @@ class ConfigCollector {
|
|
|
26
26
|
return path.join(projectDir, 'bmad');
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
// V6+ strategy: Look for ANY directory with
|
|
29
|
+
// V6+ strategy: Look for ANY directory with _config/manifest.yaml
|
|
30
30
|
// This is the definitive marker of a V6+ installation
|
|
31
31
|
try {
|
|
32
32
|
const entries = await fs.readdir(projectDir, { withFileTypes: true });
|
|
33
33
|
for (const entry of entries) {
|
|
34
34
|
if (entry.isDirectory()) {
|
|
35
|
-
const manifestPath = path.join(projectDir, entry.name, '
|
|
35
|
+
const manifestPath = path.join(projectDir, entry.name, '_config', 'manifest.yaml');
|
|
36
36
|
if (await fs.pathExists(manifestPath)) {
|
|
37
37
|
// Found a V6+ installation
|
|
38
38
|
return path.join(projectDir, entry.name);
|
|
@@ -59,12 +59,12 @@ class ConfigCollector {
|
|
|
59
59
|
return null;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
// Look for ANY directory with
|
|
62
|
+
// Look for ANY directory with _config/manifest.yaml
|
|
63
63
|
try {
|
|
64
64
|
const entries = await fs.readdir(projectDir, { withFileTypes: true });
|
|
65
65
|
for (const entry of entries) {
|
|
66
66
|
if (entry.isDirectory()) {
|
|
67
|
-
const manifestPath = path.join(projectDir, entry.name, '
|
|
67
|
+
const manifestPath = path.join(projectDir, entry.name, '_config', 'manifest.yaml');
|
|
68
68
|
if (await fs.pathExists(manifestPath)) {
|
|
69
69
|
// Found a V6+ installation, return just the folder name
|
|
70
70
|
return entry.name;
|
|
@@ -105,11 +105,17 @@ class ConfigCollector {
|
|
|
105
105
|
|
|
106
106
|
for (const entry of entries) {
|
|
107
107
|
if (entry.isDirectory()) {
|
|
108
|
+
// Skip the _config directory - it's for system use
|
|
109
|
+
if (entry.name === '_config' || entry.name === '_memory') {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
|
|
108
113
|
const moduleConfigPath = path.join(bmadDir, entry.name, 'config.yaml');
|
|
114
|
+
|
|
109
115
|
if (await fs.pathExists(moduleConfigPath)) {
|
|
110
116
|
try {
|
|
111
117
|
const content = await fs.readFile(moduleConfigPath, 'utf8');
|
|
112
|
-
const moduleConfig = yaml.
|
|
118
|
+
const moduleConfig = yaml.parse(content);
|
|
113
119
|
if (moduleConfig) {
|
|
114
120
|
this.existingConfig[entry.name] = moduleConfig;
|
|
115
121
|
foundAny = true;
|
|
@@ -121,10 +127,6 @@ class ConfigCollector {
|
|
|
121
127
|
}
|
|
122
128
|
}
|
|
123
129
|
|
|
124
|
-
if (foundAny) {
|
|
125
|
-
console.log(chalk.cyan('\n📋 Found existing BMAD module configurations'));
|
|
126
|
-
}
|
|
127
|
-
|
|
128
130
|
return foundAny;
|
|
129
131
|
}
|
|
130
132
|
|
|
@@ -238,7 +240,7 @@ class ConfigCollector {
|
|
|
238
240
|
}
|
|
239
241
|
|
|
240
242
|
const configContent = await fs.readFile(configPath, 'utf8');
|
|
241
|
-
const moduleConfig = yaml.
|
|
243
|
+
const moduleConfig = yaml.parse(configContent);
|
|
242
244
|
|
|
243
245
|
if (!moduleConfig) {
|
|
244
246
|
return false;
|
|
@@ -248,14 +250,41 @@ class ConfigCollector {
|
|
|
248
250
|
const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
|
|
249
251
|
const existingKeys = this.existingConfig && this.existingConfig[moduleName] ? Object.keys(this.existingConfig[moduleName]) : [];
|
|
250
252
|
|
|
253
|
+
// Check if this module has no configuration keys at all (like CIS)
|
|
254
|
+
// Filter out metadata fields and only count actual config objects
|
|
255
|
+
const metadataFields = new Set(['code', 'name', 'header', 'subheader', 'default_selected']);
|
|
256
|
+
const actualConfigKeys = configKeys.filter((key) => !metadataFields.has(key));
|
|
257
|
+
const hasNoConfig = actualConfigKeys.length === 0;
|
|
258
|
+
|
|
259
|
+
// If module has no config keys at all, handle it specially
|
|
260
|
+
if (hasNoConfig && moduleConfig.subheader) {
|
|
261
|
+
// Add blank line for better readability (matches other modules)
|
|
262
|
+
console.log();
|
|
263
|
+
const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
|
|
264
|
+
|
|
265
|
+
// Display the module name in color first (matches other modules)
|
|
266
|
+
console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName));
|
|
267
|
+
|
|
268
|
+
// Show the subheader since there's no configuration to ask about
|
|
269
|
+
console.log(chalk.dim(` ✓ ${moduleConfig.subheader}`));
|
|
270
|
+
return false; // No new fields
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Find new interactive fields (with prompt)
|
|
251
274
|
const newKeys = configKeys.filter((key) => {
|
|
252
275
|
const item = moduleConfig[key];
|
|
253
276
|
// Check if it's a config item and doesn't exist in existing config
|
|
254
277
|
return item && typeof item === 'object' && item.prompt && !existingKeys.includes(key);
|
|
255
278
|
});
|
|
256
279
|
|
|
257
|
-
//
|
|
258
|
-
|
|
280
|
+
// Find new static fields (without prompt, just result)
|
|
281
|
+
const newStaticKeys = configKeys.filter((key) => {
|
|
282
|
+
const item = moduleConfig[key];
|
|
283
|
+
return item && typeof item === 'object' && !item.prompt && item.result && !existingKeys.includes(key);
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
// If in silent mode and no new keys (neither interactive nor static), use existing config and skip prompts
|
|
287
|
+
if (silentMode && newKeys.length === 0 && newStaticKeys.length === 0) {
|
|
259
288
|
if (this.existingConfig && this.existingConfig[moduleName]) {
|
|
260
289
|
if (!this.collectedConfig[moduleName]) {
|
|
261
290
|
this.collectedConfig[moduleName] = {};
|
|
@@ -289,14 +318,18 @@ class ConfigCollector {
|
|
|
289
318
|
this.allAnswers[`${moduleName}_user_name`] = this.getDefaultUsername();
|
|
290
319
|
}
|
|
291
320
|
}
|
|
292
|
-
// Show "no config" message for modules with no new questions
|
|
293
|
-
CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
294
|
-
return false; // No new fields
|
|
295
321
|
}
|
|
296
322
|
|
|
297
|
-
//
|
|
298
|
-
|
|
323
|
+
// Show "no config" message for modules with no new questions (that have config keys)
|
|
324
|
+
console.log(chalk.dim(` ✓ ${moduleName.toUpperCase()} module already up to date`));
|
|
325
|
+
return false; // No new fields
|
|
326
|
+
|
|
327
|
+
// If we have new fields (interactive or static), process them
|
|
328
|
+
if (newKeys.length > 0 || newStaticKeys.length > 0) {
|
|
299
329
|
const questions = [];
|
|
330
|
+
const staticAnswers = {};
|
|
331
|
+
|
|
332
|
+
// Build questions for interactive fields
|
|
300
333
|
for (const key of newKeys) {
|
|
301
334
|
const item = moduleConfig[key];
|
|
302
335
|
const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
|
|
@@ -305,38 +338,49 @@ class ConfigCollector {
|
|
|
305
338
|
}
|
|
306
339
|
}
|
|
307
340
|
|
|
341
|
+
// Prepare static answers (no prompt, just result)
|
|
342
|
+
for (const key of newStaticKeys) {
|
|
343
|
+
staticAnswers[`${moduleName}_${key}`] = undefined;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Collect all answers (static + prompted)
|
|
347
|
+
let allAnswers = { ...staticAnswers };
|
|
348
|
+
|
|
308
349
|
if (questions.length > 0) {
|
|
309
350
|
// Only show header if we actually have questions
|
|
310
351
|
CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
311
352
|
console.log(); // Line break before questions
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
// Store answers for cross-referencing
|
|
315
|
-
Object.assign(this.allAnswers, answers);
|
|
316
|
-
|
|
317
|
-
// Process answers and build result values
|
|
318
|
-
for (const key of Object.keys(answers)) {
|
|
319
|
-
const originalKey = key.replace(`${moduleName}_`, '');
|
|
320
|
-
const item = moduleConfig[originalKey];
|
|
321
|
-
const value = answers[key];
|
|
322
|
-
|
|
323
|
-
let result;
|
|
324
|
-
if (Array.isArray(value)) {
|
|
325
|
-
result = value;
|
|
326
|
-
} else if (item.result) {
|
|
327
|
-
result = this.processResultTemplate(item.result, value);
|
|
328
|
-
} else {
|
|
329
|
-
result = value;
|
|
330
|
-
}
|
|
353
|
+
const promptedAnswers = await inquirer.prompt(questions);
|
|
331
354
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
355
|
+
// Merge prompted answers with static answers
|
|
356
|
+
Object.assign(allAnswers, promptedAnswers);
|
|
357
|
+
} else if (newStaticKeys.length > 0) {
|
|
358
|
+
// Only static fields, no questions - show no config message
|
|
359
|
+
console.log(chalk.dim(` ✓ ${moduleName.toUpperCase()} module configuration updated`));
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Store all answers for cross-referencing
|
|
363
|
+
Object.assign(this.allAnswers, allAnswers);
|
|
364
|
+
|
|
365
|
+
// Process all answers (both static and prompted)
|
|
366
|
+
for (const key of Object.keys(allAnswers)) {
|
|
367
|
+
const originalKey = key.replace(`${moduleName}_`, '');
|
|
368
|
+
const item = moduleConfig[originalKey];
|
|
369
|
+
const value = allAnswers[key];
|
|
370
|
+
|
|
371
|
+
let result;
|
|
372
|
+
if (Array.isArray(value)) {
|
|
373
|
+
result = value;
|
|
374
|
+
} else if (item.result) {
|
|
375
|
+
result = this.processResultTemplate(item.result, value);
|
|
376
|
+
} else {
|
|
377
|
+
result = value;
|
|
336
378
|
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
379
|
+
|
|
380
|
+
if (!this.collectedConfig[moduleName]) {
|
|
381
|
+
this.collectedConfig[moduleName] = {};
|
|
382
|
+
}
|
|
383
|
+
this.collectedConfig[moduleName][originalKey] = result;
|
|
340
384
|
}
|
|
341
385
|
}
|
|
342
386
|
|
|
@@ -353,7 +397,7 @@ class ConfigCollector {
|
|
|
353
397
|
}
|
|
354
398
|
}
|
|
355
399
|
|
|
356
|
-
return newKeys.length > 0; // Return true if we
|
|
400
|
+
return newKeys.length > 0 || newStaticKeys.length > 0; // Return true if we had any new fields (interactive or static)
|
|
357
401
|
}
|
|
358
402
|
|
|
359
403
|
/**
|
|
@@ -493,7 +537,7 @@ class ConfigCollector {
|
|
|
493
537
|
}
|
|
494
538
|
|
|
495
539
|
const configContent = await fs.readFile(configPath, 'utf8');
|
|
496
|
-
const moduleConfig = yaml.
|
|
540
|
+
const moduleConfig = yaml.parse(configContent);
|
|
497
541
|
|
|
498
542
|
if (!moduleConfig) {
|
|
499
543
|
return;
|
|
@@ -501,30 +545,91 @@ class ConfigCollector {
|
|
|
501
545
|
|
|
502
546
|
// Process each config item
|
|
503
547
|
const questions = [];
|
|
548
|
+
const staticAnswers = {};
|
|
504
549
|
const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
|
|
505
550
|
|
|
506
551
|
for (const key of configKeys) {
|
|
507
552
|
const item = moduleConfig[key];
|
|
508
553
|
|
|
509
554
|
// Skip if not a config object
|
|
510
|
-
if (!item || typeof item !== 'object'
|
|
555
|
+
if (!item || typeof item !== 'object') {
|
|
511
556
|
continue;
|
|
512
557
|
}
|
|
513
558
|
|
|
514
|
-
|
|
515
|
-
if (
|
|
516
|
-
|
|
559
|
+
// Handle static values (no prompt, just result)
|
|
560
|
+
if (!item.prompt && item.result) {
|
|
561
|
+
// Add to static answers with a marker value
|
|
562
|
+
staticAnswers[`${moduleName}_${key}`] = undefined;
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
// Handle interactive values (with prompt)
|
|
567
|
+
if (item.prompt) {
|
|
568
|
+
const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
|
|
569
|
+
if (question) {
|
|
570
|
+
questions.push(question);
|
|
571
|
+
}
|
|
517
572
|
}
|
|
518
573
|
}
|
|
519
574
|
|
|
520
|
-
//
|
|
575
|
+
// Collect all answers (static + prompted)
|
|
576
|
+
let allAnswers = { ...staticAnswers };
|
|
577
|
+
|
|
578
|
+
// If there are questions to ask, prompt for accepting defaults vs customizing
|
|
521
579
|
if (questions.length > 0) {
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
580
|
+
// Get friendly module name from config or use uppercase module name
|
|
581
|
+
const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
|
|
582
|
+
|
|
583
|
+
// Add blank line for better readability
|
|
584
|
+
console.log();
|
|
585
|
+
|
|
586
|
+
// Display the module name in color first
|
|
587
|
+
console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName));
|
|
588
|
+
|
|
589
|
+
// Ask user if they want to accept defaults or customize on the next line
|
|
590
|
+
const { customize } = await inquirer.prompt([
|
|
591
|
+
{
|
|
592
|
+
type: 'confirm',
|
|
593
|
+
name: 'customize',
|
|
594
|
+
message: 'Accept Defaults (no to customize)?',
|
|
595
|
+
default: true,
|
|
596
|
+
},
|
|
597
|
+
]);
|
|
598
|
+
|
|
599
|
+
if (customize) {
|
|
600
|
+
// Accept defaults - only ask questions that have NO default value
|
|
601
|
+
const questionsWithoutDefaults = questions.filter((q) => q.default === undefined || q.default === null || q.default === '');
|
|
602
|
+
|
|
603
|
+
if (questionsWithoutDefaults.length > 0) {
|
|
604
|
+
console.log(chalk.dim(`\n Asking required questions for ${moduleName.toUpperCase()}...`));
|
|
605
|
+
const promptedAnswers = await inquirer.prompt(questionsWithoutDefaults);
|
|
606
|
+
Object.assign(allAnswers, promptedAnswers);
|
|
607
|
+
}
|
|
525
608
|
|
|
526
|
-
|
|
527
|
-
|
|
609
|
+
// For questions with defaults that weren't asked, we need to process them with their default values
|
|
610
|
+
const questionsWithDefaults = questions.filter((q) => q.default !== undefined && q.default !== null && q.default !== '');
|
|
611
|
+
for (const question of questionsWithDefaults) {
|
|
612
|
+
// Skip function defaults - these are dynamic and will be evaluated later
|
|
613
|
+
if (typeof question.default === 'function') {
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
allAnswers[question.name] = question.default;
|
|
617
|
+
}
|
|
618
|
+
} else {
|
|
619
|
+
// Customize - ask all questions
|
|
620
|
+
console.log(chalk.dim(`\n Configuring ${moduleName.toUpperCase()}...`));
|
|
621
|
+
const promptedAnswers = await inquirer.prompt(questions);
|
|
622
|
+
Object.assign(allAnswers, promptedAnswers);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// Store all answers for cross-referencing
|
|
627
|
+
Object.assign(this.allAnswers, allAnswers);
|
|
628
|
+
|
|
629
|
+
// Process all answers (both static and prompted)
|
|
630
|
+
// Always process if we have any answers or static answers
|
|
631
|
+
if (Object.keys(allAnswers).length > 0 || Object.keys(staticAnswers).length > 0) {
|
|
632
|
+
const answers = allAnswers;
|
|
528
633
|
|
|
529
634
|
// Process answers and build result values
|
|
530
635
|
for (const key of Object.keys(answers)) {
|
|
@@ -622,8 +727,68 @@ class ConfigCollector {
|
|
|
622
727
|
|
|
623
728
|
// No longer display completion boxes - keep output clean
|
|
624
729
|
} else {
|
|
625
|
-
// No questions for this module - show completion message
|
|
626
|
-
|
|
730
|
+
// No questions for this module - show completion message with header if available
|
|
731
|
+
const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
|
|
732
|
+
|
|
733
|
+
// Check if this module has NO configuration keys at all (like CIS)
|
|
734
|
+
// Filter out metadata fields and only count actual config objects
|
|
735
|
+
const metadataFields = new Set(['code', 'name', 'header', 'subheader', 'default_selected']);
|
|
736
|
+
const actualConfigKeys = configKeys.filter((key) => !metadataFields.has(key));
|
|
737
|
+
const hasNoConfig = actualConfigKeys.length === 0;
|
|
738
|
+
|
|
739
|
+
if (hasNoConfig && (moduleConfig.subheader || moduleConfig.header)) {
|
|
740
|
+
// Module explicitly has no configuration - show with special styling
|
|
741
|
+
// Add blank line for better readability (matches other modules)
|
|
742
|
+
console.log();
|
|
743
|
+
|
|
744
|
+
// Display the module name in color first (matches other modules)
|
|
745
|
+
console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName));
|
|
746
|
+
|
|
747
|
+
// Ask user if they want to accept defaults or customize on the next line
|
|
748
|
+
const { customize } = await inquirer.prompt([
|
|
749
|
+
{
|
|
750
|
+
type: 'confirm',
|
|
751
|
+
name: 'customize',
|
|
752
|
+
message: 'Accept Defaults (no to customize)?',
|
|
753
|
+
default: true,
|
|
754
|
+
},
|
|
755
|
+
]);
|
|
756
|
+
|
|
757
|
+
// Show the subheader if available, otherwise show a default message
|
|
758
|
+
if (moduleConfig.subheader) {
|
|
759
|
+
console.log(chalk.dim(` ✓ ${moduleConfig.subheader}`));
|
|
760
|
+
} else {
|
|
761
|
+
console.log(chalk.dim(` ✓ No custom configuration required`));
|
|
762
|
+
}
|
|
763
|
+
} else {
|
|
764
|
+
// Module has config but just no questions to ask
|
|
765
|
+
console.log(chalk.dim(` ✓ ${moduleName.toUpperCase()} module configured`));
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
// If we have no collected config for this module, but we have a module schema,
|
|
770
|
+
// ensure we have at least an empty object
|
|
771
|
+
if (!this.collectedConfig[moduleName]) {
|
|
772
|
+
this.collectedConfig[moduleName] = {};
|
|
773
|
+
|
|
774
|
+
// If we accepted defaults and have no answers, we still need to check
|
|
775
|
+
// if there are any static values in the schema that should be applied
|
|
776
|
+
if (moduleConfig) {
|
|
777
|
+
for (const key of Object.keys(moduleConfig)) {
|
|
778
|
+
if (key !== 'prompt' && moduleConfig[key] && typeof moduleConfig[key] === 'object') {
|
|
779
|
+
const item = moduleConfig[key];
|
|
780
|
+
// For static items (no prompt, just result), apply the result
|
|
781
|
+
if (!item.prompt && item.result) {
|
|
782
|
+
// Apply any placeholder replacements to the result
|
|
783
|
+
let result = item.result;
|
|
784
|
+
if (typeof result === 'string') {
|
|
785
|
+
result = this.replacePlaceholders(result, moduleName, moduleConfig);
|
|
786
|
+
}
|
|
787
|
+
this.collectedConfig[moduleName][key] = result;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
627
792
|
}
|
|
628
793
|
}
|
|
629
794
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Custom Module Source Cache
|
|
3
|
-
* Caches custom module sources under
|
|
3
|
+
* Caches custom module sources under _config/custom/ to ensure they're never lost
|
|
4
4
|
* and can be checked into source control
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ const crypto = require('node:crypto');
|
|
|
11
11
|
class CustomModuleCache {
|
|
12
12
|
constructor(bmadDir) {
|
|
13
13
|
this.bmadDir = bmadDir;
|
|
14
|
-
this.customCacheDir = path.join(bmadDir, '
|
|
14
|
+
this.customCacheDir = path.join(bmadDir, '_config', 'custom');
|
|
15
15
|
this.manifestPath = path.join(this.customCacheDir, 'cache-manifest.yaml');
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -31,19 +31,21 @@ class CustomModuleCache {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
const content = await fs.readFile(this.manifestPath, 'utf8');
|
|
34
|
-
const yaml = require('
|
|
35
|
-
return yaml.
|
|
34
|
+
const yaml = require('yaml');
|
|
35
|
+
return yaml.parse(content) || {};
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* Update cache manifest
|
|
40
40
|
*/
|
|
41
41
|
async updateCacheManifest(manifest) {
|
|
42
|
-
const yaml = require('
|
|
43
|
-
|
|
42
|
+
const yaml = require('yaml');
|
|
43
|
+
// Clean the manifest to remove any non-serializable values
|
|
44
|
+
const cleanManifest = structuredClone(manifest);
|
|
45
|
+
|
|
46
|
+
const content = yaml.stringify(cleanManifest, {
|
|
44
47
|
indent: 2,
|
|
45
|
-
lineWidth:
|
|
46
|
-
noRefs: true,
|
|
48
|
+
lineWidth: 0,
|
|
47
49
|
sortKeys: false,
|
|
48
50
|
});
|
|
49
51
|
|
|
@@ -145,12 +147,18 @@ class CustomModuleCache {
|
|
|
145
147
|
const sourceHash = await this.calculateHash(sourcePath);
|
|
146
148
|
const cacheHash = await this.calculateHash(cacheDir);
|
|
147
149
|
|
|
148
|
-
// Update manifest - don't store
|
|
150
|
+
// Update manifest - don't store absolute paths for portability
|
|
151
|
+
// Clean metadata to remove absolute paths
|
|
152
|
+
const cleanMetadata = { ...metadata };
|
|
153
|
+
if (cleanMetadata.sourcePath) {
|
|
154
|
+
delete cleanMetadata.sourcePath;
|
|
155
|
+
}
|
|
156
|
+
|
|
149
157
|
cacheManifest[moduleId] = {
|
|
150
158
|
originalHash: sourceHash,
|
|
151
159
|
cacheHash: cacheHash,
|
|
152
160
|
cachedAt: new Date().toISOString(),
|
|
153
|
-
...
|
|
161
|
+
...cleanMetadata,
|
|
154
162
|
};
|
|
155
163
|
|
|
156
164
|
await this.updateCacheManifest(cacheManifest);
|
|
@@ -2,7 +2,7 @@ const fs = require('fs-extra');
|
|
|
2
2
|
const path = require('node:path');
|
|
3
3
|
const glob = require('glob');
|
|
4
4
|
const chalk = require('chalk');
|
|
5
|
-
const yaml = require('
|
|
5
|
+
const yaml = require('yaml');
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Dependency Resolver for BMAD modules
|
|
@@ -147,7 +147,7 @@ class DependencyResolver {
|
|
|
147
147
|
// Quote values with backticks to make them valid YAML
|
|
148
148
|
yamlContent = yamlContent.replaceAll(/: `([^`]+)`/g, ': "$1"');
|
|
149
149
|
|
|
150
|
-
const frontmatter = yaml.
|
|
150
|
+
const frontmatter = yaml.parse(yamlContent);
|
|
151
151
|
if (frontmatter.dependencies) {
|
|
152
152
|
const deps = Array.isArray(frontmatter.dependencies) ? frontmatter.dependencies : [frontmatter.dependencies];
|
|
153
153
|
|