bmad-method 6.0.0-alpha.15 → 6.0.0-alpha.16
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 +1 -1
- package/CHANGELOG.md +32 -1
- package/docs/agent-customization-guide.md +7 -7
- 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/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 +10 -10
- package/docs/web-bundles-gemini-gpt-guide.md +1 -1
- package/package.json +1 -1
- package/src/core/agents/bmad-master.agent.yaml +5 -5
- package/src/core/agents/bmad-web-orchestrator.agent.xml +6 -6
- package/src/core/module.yaml +0 -7
- package/src/core/resources/excalidraw/README.md +4 -4
- 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 +1 -1
- package/src/core/workflows/brainstorming/workflow.md +2 -2
- 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/README.md +2 -2
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +15 -15
- package/src/modules/bmb/docs/agents/agent-compilation.md +2 -2
- package/src/modules/bmb/docs/agents/agent-menu-patterns.md +22 -22
- package/src/modules/bmb/docs/agents/expert-agent-architecture.md +1 -1
- package/src/modules/bmb/docs/agents/index.md +1 -1
- package/src/modules/bmb/docs/agents/module-agent-architecture.md +50 -51
- package/src/modules/bmb/docs/agents/understanding-agent-types.md +3 -3
- 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 +0 -1
- package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
- 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/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 -1
- 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/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 +5 -5
- 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 +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +7 -7
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +3 -3
- package/src/modules/bmb/workflows/create-agent/workflow.md +13 -13
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.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 +3 -3
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +6 -6
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +3 -3
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +3 -3
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +4 -4
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +7 -7
- package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +1 -1
- package/src/modules/bmb/workflows/create-module/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +2 -2
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +5 -5
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +10 -10
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +12 -12
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +1 -1
- package/src/modules/bmb/workflows/create-workflow/workflow.md +1 -1
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +3 -3
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +13 -13
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +5 -5
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +3 -3
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +5 -5
- 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 +2 -2
- package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +2 -2
- package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +4 -4
- 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 +9 -9
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +21 -21
- package/src/modules/bmgd/module.yaml +0 -1
- 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 +2 -2
- 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 +1 -1
- 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/agents/analyst.agent.yaml +8 -8
- package/src/modules/bmm/agents/architect.agent.yaml +8 -8
- package/src/modules/bmm/agents/dev.agent.yaml +3 -3
- 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 +9 -9
- 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/README.md +0 -25
- 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 +3 -3
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/docs/workflows-implementation.md +0 -100
- package/src/modules/bmm/module.yaml +1 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +5 -3
- package/src/modules/bmm/workflows/1-analysis/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 +1 -1
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +6 -6
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +1 -1
- 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 +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +1 -1
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +3 -3
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +2 -2
- 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/diagrams/create-dataflow/instructions.md +1 -1
- package/src/modules/bmm/workflows/diagrams/create-dataflow/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/diagrams/create-diagram/instructions.md +2 -2
- package/src/modules/bmm/workflows/diagrams/create-diagram/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/diagrams/create-flowchart/instructions.md +2 -2
- package/src/modules/bmm/workflows/diagrams/create-flowchart/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/diagrams/create-wireframe/instructions.md +1 -1
- package/src/modules/bmm/workflows/diagrams/create-wireframe/workflow.yaml +5 -5
- 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/generate-project-context/steps/step-02-generate.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +2 -2
- 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 +2 -2
- 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/README.md +1 -1
- package/src/modules/cis/agents/README.md +1 -1
- 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.agent.yaml +4 -4
- package/src/modules/cis/module.yaml +0 -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/models/agent-activation-ide.xml +3 -3
- package/src/utility/models/agent-activation-web.xml +3 -3
- package/src/utility/models/fragments/activation-steps.xml +1 -1
- 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 +19 -19
- package/tools/cli/bundlers/web-bundler.js +23 -33
- package/tools/cli/commands/build.js +5 -5
- package/tools/cli/installers/lib/core/config-collector.js +19 -14
- package/tools/cli/installers/lib/core/custom-module-cache.js +18 -6
- package/tools/cli/installers/lib/core/installer.js +104 -109
- package/tools/cli/installers/lib/core/manifest-generator.js +1 -1
- package/tools/cli/installers/lib/custom/handler.js +1 -4
- package/tools/cli/installers/lib/ide/_base-ide.js +14 -14
- package/tools/cli/installers/lib/ide/gemini.js +4 -4
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +2 -2
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +3 -3
- 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 +24 -24
- package/tools/cli/lib/agent/compiler.js +3 -3
- package/tools/cli/lib/agent/installer.js +2 -2
- package/tools/cli/lib/ui.js +234 -238
- package/tools/cli/regenerate-manifests.js +3 -4
- package/tools/migrate-custom-module-paths.js +1 -1
- package/example-custom-content/README.md +0 -8
- package/example-custom-content/agents/commit-poet/commit-poet.agent.yaml +0 -129
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/instructions.md +0 -70
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -111
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -70
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -114
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -134
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -161
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -103
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/memories.md +0 -17
- package/example-custom-content/agents/toolsmith/toolsmith.agent.yaml +0 -109
- package/example-custom-content/module.yaml +0 -4
- package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +0 -168
- package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +0 -155
- package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +0 -89
- package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +0 -150
- package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +0 -1
- package/example-custom-content/workflows/quiz-master/workflow.md +0 -54
- package/example-custom-content/workflows/wassup/workflow.md +0 -26
- package/example-custom-module/mwm/README.md +0 -9
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +0 -47
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +0 -17
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +0 -151
- package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +0 -138
- package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +0 -138
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +0 -13
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +0 -30
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +0 -13
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +0 -17
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +0 -125
- package/example-custom-module/mwm/module.yaml +0 -28
- package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +0 -31
- package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/crisis-support/README.md +0 -31
- package/example-custom-module/mwm/workflows/crisis-support/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/daily-checkin/README.md +0 -32
- package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/guided-meditation/README.md +0 -31
- package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/wellness-journal/README.md +0 -31
- package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +0 -45
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @architecture Orchestrator pattern - coordinates Detector, ModuleManager, IdeManager, and file operations to build complete BMAD installation
|
|
15
15
|
* @dependencies fs-extra, ora, chalk, detector.js, module-manager.js, ide-manager.js, config.js
|
|
16
16
|
* @entrypoints Called by install.js command via installer.install(config)
|
|
17
|
-
* @patterns Injection point processing (AgentVibes), placeholder replacement (
|
|
17
|
+
* @patterns Injection point processing (AgentVibes), placeholder replacement (.bmad), module dependency resolution
|
|
18
18
|
* @related GitHub AgentVibes#34 (injection points), ui.js (user prompts), copyFileWithPlaceholderReplacement()
|
|
19
19
|
*/
|
|
20
20
|
|
|
@@ -39,6 +39,7 @@ const { CLIUtils } = require('../../../lib/cli-utils');
|
|
|
39
39
|
const { ManifestGenerator } = require('./manifest-generator');
|
|
40
40
|
const { IdeConfigManager } = require('./ide-config-manager');
|
|
41
41
|
const { replaceAgentSidecarFolders } = require('./post-install-sidecar-replacement');
|
|
42
|
+
const { CustomHandler } = require('../custom/handler');
|
|
42
43
|
|
|
43
44
|
class Installer {
|
|
44
45
|
constructor() {
|
|
@@ -66,7 +67,7 @@ class Installer {
|
|
|
66
67
|
// Check if project directory exists
|
|
67
68
|
if (!(await fs.pathExists(projectDir))) {
|
|
68
69
|
// Project doesn't exist yet, return default
|
|
69
|
-
return path.join(projectDir, 'bmad');
|
|
70
|
+
return path.join(projectDir, '.bmad');
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
// V6+ strategy: Look for ANY directory with _cfg/manifest.yaml
|
|
@@ -88,13 +89,13 @@ class Installer {
|
|
|
88
89
|
|
|
89
90
|
// No V6+ installation found, return default
|
|
90
91
|
// This will be used for new installations
|
|
91
|
-
return path.join(projectDir, 'bmad');
|
|
92
|
+
return path.join(projectDir, '.bmad');
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
/**
|
|
95
96
|
* @function copyFileWithPlaceholderReplacement
|
|
96
97
|
* @intent Copy files from BMAD source to installation directory with dynamic content transformation
|
|
97
|
-
* @why Enables installation-time customization:
|
|
98
|
+
* @why Enables installation-time customization: .bmad replacement + optional AgentVibes TTS injection
|
|
98
99
|
* @param {string} sourcePath - Absolute path to source file in BMAD repository
|
|
99
100
|
* @param {string} targetPath - Absolute path to destination file in user's project
|
|
100
101
|
* @param {string} bmadFolderName - User's chosen bmad folder name (default: 'bmad')
|
|
@@ -104,11 +105,6 @@ class Installer {
|
|
|
104
105
|
* @calledby installCore(), installModule(), IDE installers during file vendoring
|
|
105
106
|
* @calls processTTSInjectionPoints(), fs.readFile(), fs.writeFile(), fs.copy()
|
|
106
107
|
*
|
|
107
|
-
* AI NOTE: This is the core transformation pipeline for ALL BMAD installation file copies.
|
|
108
|
-
* It performs two transformations in sequence:
|
|
109
|
-
* 1. {bmad_folder} → user's custom folder name (e.g., ".bmad" or "bmad")
|
|
110
|
-
* 2. <!-- TTS_INJECTION:* --> → TTS bash calls (if enabled) OR stripped (if disabled)
|
|
111
|
-
*
|
|
112
108
|
* The injection point processing enables loose coupling between BMAD and TTS providers:
|
|
113
109
|
* - BMAD source contains injection markers (not actual TTS code)
|
|
114
110
|
* - At install-time, markers are replaced OR removed based on user preference
|
|
@@ -139,16 +135,6 @@ class Installer {
|
|
|
139
135
|
// Read the file content
|
|
140
136
|
let content = await fs.readFile(sourcePath, 'utf8');
|
|
141
137
|
|
|
142
|
-
// Replace {bmad_folder} placeholder with actual folder name
|
|
143
|
-
if (content.includes('{bmad_folder}')) {
|
|
144
|
-
content = content.replaceAll('{bmad_folder}', bmadFolderName);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
|
148
|
-
if (content.includes('{*bmad_folder*}')) {
|
|
149
|
-
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
|
150
|
-
}
|
|
151
|
-
|
|
152
138
|
// Process AgentVibes injection points (pass targetPath for tracking)
|
|
153
139
|
content = this.processTTSInjectionPoints(content, targetPath);
|
|
154
140
|
|
|
@@ -407,7 +393,10 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
407
393
|
* @param {string[]} config.ides - IDEs to configure
|
|
408
394
|
* @param {boolean} config.skipIde - Skip IDE configuration
|
|
409
395
|
*/
|
|
410
|
-
async install(
|
|
396
|
+
async install(originalConfig) {
|
|
397
|
+
// Clone config to avoid mutating the caller's object
|
|
398
|
+
const config = { ...originalConfig };
|
|
399
|
+
|
|
411
400
|
// Display BMAD logo
|
|
412
401
|
CLIUtils.displayLogo();
|
|
413
402
|
|
|
@@ -435,12 +424,56 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
435
424
|
// Quick update already collected all configs, use them directly
|
|
436
425
|
moduleConfigs = this.configCollector.collectedConfig;
|
|
437
426
|
} else {
|
|
427
|
+
// Build custom module paths map from customContent
|
|
428
|
+
const customModulePaths = new Map();
|
|
429
|
+
|
|
430
|
+
// Handle selectedFiles (from existing install path or manual directory input)
|
|
431
|
+
if (config.customContent && config.customContent.selected && config.customContent.selectedFiles) {
|
|
432
|
+
const customHandler = new CustomHandler();
|
|
433
|
+
for (const customFile of config.customContent.selectedFiles) {
|
|
434
|
+
const customInfo = await customHandler.getCustomInfo(customFile, path.resolve(config.directory));
|
|
435
|
+
if (customInfo && customInfo.id) {
|
|
436
|
+
customModulePaths.set(customInfo.id, customInfo.path);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// Handle cachedModules (from new install path where modules are cached)
|
|
442
|
+
// Only include modules that were actually selected for installation
|
|
443
|
+
if (config.customContent && config.customContent.cachedModules) {
|
|
444
|
+
// Get selected cached module IDs (if available)
|
|
445
|
+
const selectedCachedIds = config.customContent.selectedCachedModules || [];
|
|
446
|
+
// If no selection info, include all cached modules (for backward compatibility)
|
|
447
|
+
const shouldIncludeAll = selectedCachedIds.length === 0 && config.customContent.selected;
|
|
448
|
+
|
|
449
|
+
for (const cachedModule of config.customContent.cachedModules) {
|
|
450
|
+
// For cached modules, the path is the cachePath which contains the module.yaml
|
|
451
|
+
if (
|
|
452
|
+
cachedModule.id &&
|
|
453
|
+
cachedModule.cachePath && // Include if selected or if we should include all
|
|
454
|
+
(shouldIncludeAll || selectedCachedIds.includes(cachedModule.id))
|
|
455
|
+
) {
|
|
456
|
+
customModulePaths.set(cachedModule.id, cachedModule.cachePath);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// Get list of all modules including custom modules
|
|
462
|
+
const allModulesForConfig = [...(config.modules || [])];
|
|
463
|
+
for (const [moduleId] of customModulePaths) {
|
|
464
|
+
if (!allModulesForConfig.includes(moduleId)) {
|
|
465
|
+
allModulesForConfig.push(moduleId);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
438
469
|
// Regular install - collect configurations (core was already collected in UI.promptInstall if interactive)
|
|
439
|
-
moduleConfigs = await this.configCollector.collectAllConfigurations(
|
|
470
|
+
moduleConfigs = await this.configCollector.collectAllConfigurations(allModulesForConfig, path.resolve(config.directory), {
|
|
471
|
+
customModulePaths,
|
|
472
|
+
});
|
|
440
473
|
}
|
|
441
474
|
|
|
442
|
-
//
|
|
443
|
-
const bmadFolderName =
|
|
475
|
+
// Always use .bmad as the folder name
|
|
476
|
+
const bmadFolderName = '.bmad';
|
|
444
477
|
this.bmadFolderName = bmadFolderName; // Store for use in other methods
|
|
445
478
|
|
|
446
479
|
// Store AgentVibes configuration for injection point processing
|
|
@@ -459,7 +492,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
459
492
|
// Resolve target directory (path.resolve handles platform differences)
|
|
460
493
|
const projectDir = path.resolve(config.directory);
|
|
461
494
|
|
|
462
|
-
// Check if bmad_folder has changed from existing installation (only if project dir exists)
|
|
463
495
|
let existingBmadDir = null;
|
|
464
496
|
let existingBmadFolderName = null;
|
|
465
497
|
|
|
@@ -468,54 +500,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
468
500
|
existingBmadFolderName = path.basename(existingBmadDir);
|
|
469
501
|
}
|
|
470
502
|
|
|
471
|
-
const targetBmadDir = path.join(projectDir, bmadFolderName);
|
|
472
|
-
|
|
473
|
-
// If bmad_folder changed during update/upgrade, back up old folder and do fresh install
|
|
474
|
-
if (existingBmadDir && (await fs.pathExists(existingBmadDir)) && existingBmadFolderName !== bmadFolderName) {
|
|
475
|
-
spinner.stop();
|
|
476
|
-
console.log(chalk.yellow(`\n⚠️ bmad_folder has changed: ${existingBmadFolderName} → ${bmadFolderName}`));
|
|
477
|
-
console.log(chalk.yellow('This will result in a fresh installation to the new folder.'));
|
|
478
|
-
|
|
479
|
-
const inquirer = require('inquirer');
|
|
480
|
-
const { confirmFreshInstall } = await inquirer.prompt([
|
|
481
|
-
{
|
|
482
|
-
type: 'confirm',
|
|
483
|
-
name: 'confirmFreshInstall',
|
|
484
|
-
message: chalk.cyan('Proceed with fresh install? (Your old folder will be backed up)'),
|
|
485
|
-
default: true,
|
|
486
|
-
},
|
|
487
|
-
]);
|
|
488
|
-
|
|
489
|
-
if (!confirmFreshInstall) {
|
|
490
|
-
console.log(chalk.yellow('Installation cancelled.'));
|
|
491
|
-
return { success: false, cancelled: true };
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
spinner.start('Backing up existing installation...');
|
|
495
|
-
|
|
496
|
-
// Find a unique backup name
|
|
497
|
-
let backupDir = `${existingBmadDir}-bak`;
|
|
498
|
-
let counter = 1;
|
|
499
|
-
while (await fs.pathExists(backupDir)) {
|
|
500
|
-
backupDir = `${existingBmadDir}-bak-${counter}`;
|
|
501
|
-
counter++;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
// Rename the old folder to backup
|
|
505
|
-
await fs.move(existingBmadDir, backupDir);
|
|
506
|
-
|
|
507
|
-
spinner.succeed(`Backed up ${existingBmadFolderName} → ${path.basename(backupDir)}`);
|
|
508
|
-
console.log(chalk.cyan('\n📋 Important:'));
|
|
509
|
-
console.log(chalk.dim(` - Your old installation has been backed up to: ${path.basename(backupDir)}`));
|
|
510
|
-
console.log(chalk.dim(` - If you had custom agents or configurations, copy them from:`));
|
|
511
|
-
console.log(chalk.dim(` ${path.basename(backupDir)}/_cfg/`));
|
|
512
|
-
console.log(chalk.dim(` - To the new location:`));
|
|
513
|
-
console.log(chalk.dim(` ${bmadFolderName}/_cfg/`));
|
|
514
|
-
console.log('');
|
|
515
|
-
|
|
516
|
-
spinner.start('Starting fresh installation...');
|
|
517
|
-
}
|
|
518
|
-
|
|
519
503
|
// Create a project directory if it doesn't exist (user already confirmed)
|
|
520
504
|
if (!(await fs.pathExists(projectDir))) {
|
|
521
505
|
spinner.text = 'Creating installation directory...';
|
|
@@ -792,9 +776,8 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
792
776
|
// Regular custom content from user input (non-cached)
|
|
793
777
|
if (finalCustomContent && finalCustomContent.selected && finalCustomContent.selectedFiles) {
|
|
794
778
|
// Add custom modules to the installation list
|
|
779
|
+
const customHandler = new CustomHandler();
|
|
795
780
|
for (const customFile of finalCustomContent.selectedFiles) {
|
|
796
|
-
const { CustomHandler } = require('../custom/handler');
|
|
797
|
-
const customHandler = new CustomHandler();
|
|
798
781
|
const customInfo = await customHandler.getCustomInfo(customFile, projectDir);
|
|
799
782
|
if (customInfo && customInfo.id) {
|
|
800
783
|
allModules.push(customInfo.id);
|
|
@@ -884,7 +867,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
884
867
|
|
|
885
868
|
// Finally check regular custom content
|
|
886
869
|
if (!isCustomModule && finalCustomContent && finalCustomContent.selected && finalCustomContent.selectedFiles) {
|
|
887
|
-
const { CustomHandler } = require('../custom/handler');
|
|
888
870
|
const customHandler = new CustomHandler();
|
|
889
871
|
for (const customFile of finalCustomContent.selectedFiles) {
|
|
890
872
|
const info = await customHandler.getCustomInfo(customFile, projectDir);
|
|
@@ -898,17 +880,19 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
898
880
|
|
|
899
881
|
if (isCustomModule && customInfo) {
|
|
900
882
|
// Install custom module using CustomHandler but as a proper module
|
|
901
|
-
const { CustomHandler } = require('../custom/handler');
|
|
902
883
|
const customHandler = new CustomHandler();
|
|
903
884
|
|
|
904
885
|
// Install to module directory instead of custom directory
|
|
905
886
|
const moduleTargetPath = path.join(bmadDir, moduleName);
|
|
906
887
|
await fs.ensureDir(moduleTargetPath);
|
|
907
888
|
|
|
889
|
+
// Get collected config for this custom module (from module.yaml prompts)
|
|
890
|
+
const collectedModuleConfig = moduleConfigs[moduleName] || {};
|
|
891
|
+
|
|
908
892
|
const result = await customHandler.install(
|
|
909
893
|
customInfo.path,
|
|
910
894
|
path.join(bmadDir, 'temp-custom'),
|
|
911
|
-
{ ...config.coreConfig, ...customInfo.config, _bmadDir: bmadDir },
|
|
895
|
+
{ ...config.coreConfig, ...customInfo.config, ...collectedModuleConfig, _bmadDir: bmadDir },
|
|
912
896
|
(filePath) => {
|
|
913
897
|
// Track installed files with correct path
|
|
914
898
|
const relativePath = path.relative(path.join(bmadDir, 'temp-custom'), filePath);
|
|
@@ -924,23 +908,45 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
924
908
|
if (await fs.pathExists(customDir)) {
|
|
925
909
|
// Move contents to module directory
|
|
926
910
|
const items = await fs.readdir(customDir);
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
const
|
|
911
|
+
const movedItems = [];
|
|
912
|
+
try {
|
|
913
|
+
for (const item of items) {
|
|
914
|
+
const srcPath = path.join(customDir, item);
|
|
915
|
+
const destPath = path.join(moduleTargetPath, item);
|
|
930
916
|
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
917
|
+
// If destination exists, remove it first (or we could merge)
|
|
918
|
+
if (await fs.pathExists(destPath)) {
|
|
919
|
+
await fs.remove(destPath);
|
|
920
|
+
}
|
|
935
921
|
|
|
936
|
-
|
|
922
|
+
await fs.move(srcPath, destPath);
|
|
923
|
+
movedItems.push({ src: srcPath, dest: destPath });
|
|
924
|
+
}
|
|
925
|
+
} catch (moveError) {
|
|
926
|
+
// Rollback: restore any successfully moved items
|
|
927
|
+
for (const moved of movedItems) {
|
|
928
|
+
try {
|
|
929
|
+
await fs.move(moved.dest, moved.src);
|
|
930
|
+
} catch {
|
|
931
|
+
// Best-effort rollback - log if it fails
|
|
932
|
+
console.error(`Failed to rollback ${moved.dest} during cleanup`);
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
throw new Error(`Failed to move custom module files: ${moveError.message}`);
|
|
937
936
|
}
|
|
938
937
|
}
|
|
939
|
-
|
|
938
|
+
try {
|
|
939
|
+
await fs.remove(tempCustomPath);
|
|
940
|
+
} catch (cleanupError) {
|
|
941
|
+
// Non-fatal: temp directory cleanup failed but files were moved successfully
|
|
942
|
+
console.warn(`Warning: Could not clean up temp directory: ${cleanupError.message}`);
|
|
943
|
+
}
|
|
940
944
|
}
|
|
941
945
|
|
|
942
|
-
// Create module config
|
|
943
|
-
await this.generateModuleConfigs(bmadDir, {
|
|
946
|
+
// Create module config (include collected config from module.yaml prompts)
|
|
947
|
+
await this.generateModuleConfigs(bmadDir, {
|
|
948
|
+
[moduleName]: { ...config.coreConfig, ...customInfo.config, ...collectedModuleConfig },
|
|
949
|
+
});
|
|
944
950
|
|
|
945
951
|
// Store custom module info for later manifest update
|
|
946
952
|
if (!config._customModulesToTrack) {
|
|
@@ -1016,9 +1022,8 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
1016
1022
|
config.customContent.selectedFiles
|
|
1017
1023
|
) {
|
|
1018
1024
|
// Filter out custom modules that were already installed
|
|
1025
|
+
const customHandler = new CustomHandler();
|
|
1019
1026
|
for (const customFile of config.customContent.selectedFiles) {
|
|
1020
|
-
const { CustomHandler } = require('../custom/handler');
|
|
1021
|
-
const customHandler = new CustomHandler();
|
|
1022
1027
|
const customInfo = await customHandler.getCustomInfo(customFile, projectDir);
|
|
1023
1028
|
|
|
1024
1029
|
// Skip if this was installed as a module
|
|
@@ -1030,7 +1035,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
1030
1035
|
|
|
1031
1036
|
if (remainingCustomContent.length > 0) {
|
|
1032
1037
|
spinner.start('Installing remaining custom content...');
|
|
1033
|
-
const { CustomHandler } = require('../custom/handler');
|
|
1034
1038
|
const customHandler = new CustomHandler();
|
|
1035
1039
|
|
|
1036
1040
|
// Use the remaining files
|
|
@@ -1864,8 +1868,8 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
1864
1868
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1865
1869
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1866
1870
|
|
|
1867
|
-
// Replace
|
|
1868
|
-
xmlContent = xmlContent.replaceAll('
|
|
1871
|
+
// Replace .bmad with actual folder name
|
|
1872
|
+
xmlContent = xmlContent.replaceAll('.bmad', this.bmadFolderName || 'bmad');
|
|
1869
1873
|
|
|
1870
1874
|
// Replace {agent_sidecar_folder} if configured
|
|
1871
1875
|
const coreConfig = this.configCollector.collectedConfig.core || {};
|
|
@@ -1912,7 +1916,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
1912
1916
|
// Resolve path variables
|
|
1913
1917
|
const resolvedSidecarFolder = agentSidecarFolder
|
|
1914
1918
|
.replaceAll('{project-root}', projectDir)
|
|
1915
|
-
.replaceAll('
|
|
1919
|
+
.replaceAll('.bmad', this.bmadFolderName || 'bmad');
|
|
1916
1920
|
|
|
1917
1921
|
// Create sidecar directory for this agent
|
|
1918
1922
|
const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
|
|
@@ -2531,18 +2535,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
2531
2535
|
installedModules,
|
|
2532
2536
|
);
|
|
2533
2537
|
|
|
2534
|
-
|
|
2535
|
-
let validCustomModules = [];
|
|
2536
|
-
let keptModulesWithoutSources = [];
|
|
2537
|
-
|
|
2538
|
-
if (Array.isArray(customModuleResult)) {
|
|
2539
|
-
// Old format - just an array
|
|
2540
|
-
validCustomModules = customModuleResult;
|
|
2541
|
-
} else if (customModuleResult && typeof customModuleResult === 'object') {
|
|
2542
|
-
// New format - object with two arrays
|
|
2543
|
-
validCustomModules = customModuleResult.validCustomModules || [];
|
|
2544
|
-
keptModulesWithoutSources = customModuleResult.keptModulesWithoutSources || [];
|
|
2545
|
-
}
|
|
2538
|
+
const { validCustomModules, keptModulesWithoutSources } = customModuleResult;
|
|
2546
2539
|
|
|
2547
2540
|
const customModulesFromManifest = validCustomModules.map((m) => ({
|
|
2548
2541
|
...m,
|
|
@@ -2617,7 +2610,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
2617
2610
|
lastModified: new Date().toISOString(),
|
|
2618
2611
|
};
|
|
2619
2612
|
|
|
2620
|
-
// Check if bmad_folder has changed
|
|
2621
2613
|
const existingBmadFolderName = path.basename(bmadDir);
|
|
2622
2614
|
const newBmadFolderName = this.configCollector.collectedConfig.core?.bmad_folder || existingBmadFolderName;
|
|
2623
2615
|
|
|
@@ -3215,7 +3207,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
3215
3207
|
const agentSidecarFolder = config.coreConfig?.agent_sidecar_folder;
|
|
3216
3208
|
|
|
3217
3209
|
// Resolve path variables
|
|
3218
|
-
const resolvedSidecarFolder = agentSidecarFolder.replaceAll('{project-root}', projectDir).replaceAll('
|
|
3210
|
+
const resolvedSidecarFolder = agentSidecarFolder.replaceAll('{project-root}', projectDir).replaceAll('.bmad', bmadDir);
|
|
3219
3211
|
|
|
3220
3212
|
// Create sidecar directory for this agent
|
|
3221
3213
|
const agentSidecarDir = path.join(resolvedSidecarFolder, finalAgentName);
|
|
@@ -3321,7 +3313,10 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
|
3321
3313
|
|
|
3322
3314
|
// If no missing sources, return immediately
|
|
3323
3315
|
if (customModulesWithMissingSources.length === 0) {
|
|
3324
|
-
return
|
|
3316
|
+
return {
|
|
3317
|
+
validCustomModules,
|
|
3318
|
+
keptModulesWithoutSources: [],
|
|
3319
|
+
};
|
|
3325
3320
|
}
|
|
3326
3321
|
|
|
3327
3322
|
// Stop any spinner for interactive prompts
|
|
@@ -23,7 +23,7 @@ class ManifestGenerator {
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Generate all manifests for the installation
|
|
26
|
-
* @param {string} bmadDir -
|
|
26
|
+
* @param {string} bmadDir - .bmad
|
|
27
27
|
* @param {Array} selectedModules - Selected modules for installation
|
|
28
28
|
* @param {Array} installedFiles - All installed files (optional, for hash tracking)
|
|
29
29
|
*/
|
|
@@ -255,7 +255,6 @@ class CustomHandler {
|
|
|
255
255
|
let content = await fs.readFile(sourcePath, 'utf8');
|
|
256
256
|
|
|
257
257
|
// Replace placeholders
|
|
258
|
-
content = content.replaceAll('{bmad_folder}', config.bmad_folder || 'bmad');
|
|
259
258
|
content = content.replaceAll('{user_name}', config.user_name || 'User');
|
|
260
259
|
content = content.replaceAll('{communication_language}', config.communication_language || 'English');
|
|
261
260
|
content = content.replaceAll('{output_folder}', config.output_folder || 'docs');
|
|
@@ -321,7 +320,6 @@ class CustomHandler {
|
|
|
321
320
|
if (await fs.pathExists(genericTemplatePath)) {
|
|
322
321
|
// Copy with placeholder replacement
|
|
323
322
|
let templateContent = await fs.readFile(genericTemplatePath, 'utf8');
|
|
324
|
-
templateContent = templateContent.replaceAll('{bmad_folder}', config.bmad_folder || 'bmad');
|
|
325
323
|
await fs.writeFile(customizePath, templateContent, 'utf8');
|
|
326
324
|
console.log(chalk.dim(` Created customize: custom-${agentName}.customize.yaml`));
|
|
327
325
|
}
|
|
@@ -332,7 +330,6 @@ class CustomHandler {
|
|
|
332
330
|
|
|
333
331
|
// Replace placeholders in the compiled content
|
|
334
332
|
let processedXml = xml;
|
|
335
|
-
processedXml = processedXml.replaceAll('{bmad_folder}', config.bmad_folder || 'bmad');
|
|
336
333
|
processedXml = processedXml.replaceAll('{user_name}', config.user_name || 'User');
|
|
337
334
|
processedXml = processedXml.replaceAll('{communication_language}', config.communication_language || 'English');
|
|
338
335
|
processedXml = processedXml.replaceAll('{output_folder}', config.output_folder || 'docs');
|
|
@@ -358,7 +355,7 @@ class CustomHandler {
|
|
|
358
355
|
const projectDir = path.dirname(bmadDir);
|
|
359
356
|
const resolvedSidecarFolder = config.agent_sidecar_folder
|
|
360
357
|
.replaceAll('{project-root}', projectDir)
|
|
361
|
-
.replaceAll('
|
|
358
|
+
.replaceAll('.bmad', path.basename(bmadDir));
|
|
362
359
|
|
|
363
360
|
// Create sidecar directory for this agent
|
|
364
361
|
const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
|
|
@@ -527,26 +527,26 @@ class BaseIdeSetup {
|
|
|
527
527
|
}
|
|
528
528
|
|
|
529
529
|
/**
|
|
530
|
-
* Write file with content (replaces
|
|
530
|
+
* Write file with content (replaces .bmad placeholder)
|
|
531
531
|
* @param {string} filePath - File path
|
|
532
532
|
* @param {string} content - File content
|
|
533
533
|
*/
|
|
534
534
|
async writeFile(filePath, content) {
|
|
535
|
-
// Replace
|
|
536
|
-
if (typeof content === 'string' && content.includes('
|
|
537
|
-
content = content.replaceAll('
|
|
535
|
+
// Replace .bmad placeholder if present
|
|
536
|
+
if (typeof content === 'string' && content.includes('.bmad')) {
|
|
537
|
+
content = content.replaceAll('.bmad', this.bmadFolderName);
|
|
538
538
|
}
|
|
539
539
|
|
|
540
|
-
// Replace escape sequence
|
|
541
|
-
if (typeof content === 'string' && content.includes('
|
|
542
|
-
content = content.replaceAll('
|
|
540
|
+
// Replace escape sequence .bmad with literal .bmad
|
|
541
|
+
if (typeof content === 'string' && content.includes('.bmad')) {
|
|
542
|
+
content = content.replaceAll('.bmad', '.bmad');
|
|
543
543
|
}
|
|
544
544
|
await this.ensureDir(path.dirname(filePath));
|
|
545
545
|
await fs.writeFile(filePath, content, 'utf8');
|
|
546
546
|
}
|
|
547
547
|
|
|
548
548
|
/**
|
|
549
|
-
* Copy file from source to destination (replaces
|
|
549
|
+
* Copy file from source to destination (replaces .bmad placeholder in text files)
|
|
550
550
|
* @param {string} source - Source file path
|
|
551
551
|
* @param {string} dest - Destination file path
|
|
552
552
|
*/
|
|
@@ -563,14 +563,14 @@ class BaseIdeSetup {
|
|
|
563
563
|
// Read the file content
|
|
564
564
|
let content = await fs.readFile(source, 'utf8');
|
|
565
565
|
|
|
566
|
-
// Replace
|
|
567
|
-
if (content.includes('
|
|
568
|
-
content = content.replaceAll('
|
|
566
|
+
// Replace .bmad placeholder with actual folder name
|
|
567
|
+
if (content.includes('.bmad')) {
|
|
568
|
+
content = content.replaceAll('.bmad', this.bmadFolderName);
|
|
569
569
|
}
|
|
570
570
|
|
|
571
|
-
// Replace escape sequence
|
|
572
|
-
if (content.includes('
|
|
573
|
-
content = content.replaceAll('
|
|
571
|
+
// Replace escape sequence .bmad with literal .bmad
|
|
572
|
+
if (content.includes('.bmad')) {
|
|
573
|
+
content = content.replaceAll('.bmad', '.bmad');
|
|
574
574
|
}
|
|
575
575
|
|
|
576
576
|
// Write to dest with replaced content
|
|
@@ -174,8 +174,8 @@ ${contentWithoutFrontmatter}
|
|
|
174
174
|
// Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
|
|
175
175
|
const tomlContent = template
|
|
176
176
|
.replaceAll('{{title}}', title)
|
|
177
|
-
.replaceAll('{
|
|
178
|
-
.replaceAll('{
|
|
177
|
+
.replaceAll('{.bmad}', '.bmad')
|
|
178
|
+
.replaceAll('{.bmad}', this.bmadFolderName)
|
|
179
179
|
.replaceAll('{{module}}', agent.module)
|
|
180
180
|
.replaceAll('{{name}}', agent.name);
|
|
181
181
|
|
|
@@ -196,8 +196,8 @@ ${contentWithoutFrontmatter}
|
|
|
196
196
|
// Replace template variables
|
|
197
197
|
const tomlContent = template
|
|
198
198
|
.replaceAll('{{taskName}}', taskName)
|
|
199
|
-
.replaceAll('{
|
|
200
|
-
.replaceAll('{
|
|
199
|
+
.replaceAll('{.bmad}', '.bmad')
|
|
200
|
+
.replaceAll('{.bmad}', this.bmadFolderName)
|
|
201
201
|
.replaceAll('{{module}}', task.module)
|
|
202
202
|
.replaceAll('{{filename}}', task.filename);
|
|
203
203
|
|
|
@@ -65,8 +65,8 @@ class AgentCommandGenerator {
|
|
|
65
65
|
.replaceAll('{{module}}', agent.module)
|
|
66
66
|
.replaceAll('{{path}}', agentPathInModule)
|
|
67
67
|
.replaceAll('{{description}}', agent.description || `${agent.name} agent`)
|
|
68
|
-
.replaceAll('
|
|
69
|
-
.replaceAll('
|
|
68
|
+
.replaceAll('.bmad', this.bmadFolderName)
|
|
69
|
+
.replaceAll('.bmad', '.bmad');
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/**
|
|
@@ -109,7 +109,7 @@ class WorkflowCommandGenerator {
|
|
|
109
109
|
|
|
110
110
|
// Convert source path to installed path
|
|
111
111
|
// From: /Users/.../src/modules/bmm/workflows/.../workflow.yaml
|
|
112
|
-
// To: {project-root}/
|
|
112
|
+
// To: {project-root}/.bmad/bmm/workflows/.../workflow.yaml
|
|
113
113
|
let workflowPath = workflow.path;
|
|
114
114
|
|
|
115
115
|
// Extract the relative path from source
|
|
@@ -131,8 +131,8 @@ class WorkflowCommandGenerator {
|
|
|
131
131
|
.replaceAll('{{module}}', workflow.module)
|
|
132
132
|
.replaceAll('{{description}}', workflow.description)
|
|
133
133
|
.replaceAll('{{workflow_path}}', workflowPath)
|
|
134
|
-
.replaceAll('
|
|
135
|
-
.replaceAll('
|
|
134
|
+
.replaceAll('.bmad', this.bmadFolderName)
|
|
135
|
+
.replaceAll('.bmad', '.bmad');
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
/**
|
|
@@ -6,7 +6,7 @@ description: '{{description}}'
|
|
|
6
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
7
|
|
|
8
8
|
<agent-activation CRITICAL="TRUE">
|
|
9
|
-
1. LOAD the FULL agent file from
|
|
9
|
+
1. LOAD the FULL agent file from @.bmad/{{module}}/agents/{{path}}
|
|
10
10
|
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
11
|
3. Execute ALL activation steps exactly as written in the agent file
|
|
12
12
|
4. Follow the agent's persona and menu system precisely
|
|
@@ -3,12 +3,12 @@ prompt = """
|
|
|
3
3
|
CRITICAL: You are now the BMad '{{title}}' agent.
|
|
4
4
|
|
|
5
5
|
PRE-FLIGHT CHECKLIST:
|
|
6
|
-
1. [ ] IMMEDIATE ACTION: Load and parse @{
|
|
7
|
-
2. [ ] IMMEDIATE ACTION: Read and internalize the full agent definition at @{
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{.bmad}/{{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}/{{module}}/agents/{{name}}.md.
|
|
8
8
|
3. [ ] CONFIRM: The user's name from config is {user_name}.
|
|
9
9
|
|
|
10
10
|
Only after all checks are complete, greet the user by name and display the menu.
|
|
11
11
|
Acknowledge this checklist is complete in your first response.
|
|
12
12
|
|
|
13
|
-
AGENT DEFINITION: @{
|
|
13
|
+
AGENT DEFINITION: @{.bmad}/{{module}}/agents/{{name}}.md
|
|
14
14
|
"""
|
|
@@ -3,10 +3,10 @@ prompt = """
|
|
|
3
3
|
Execute the following BMad Method task workflow:
|
|
4
4
|
|
|
5
5
|
PRE-FLIGHT CHECKLIST:
|
|
6
|
-
1. [ ] IMMEDIATE ACTION: Load and parse @{
|
|
7
|
-
2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{.bmad}/{{module}}/config.yaml.
|
|
7
|
+
2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{.bmad}/{{module}}/tasks/{{filename}}.
|
|
8
8
|
|
|
9
9
|
Follow all instructions and complete the task as defined.
|
|
10
10
|
|
|
11
|
-
TASK DEFINITION: @{
|
|
11
|
+
TASK DEFINITION: @{.bmad}/{{module}}/tasks/{{filename}}
|
|
12
12
|
"""
|
|
@@ -5,7 +5,7 @@ description: '{{description}}'
|
|
|
5
5
|
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
|
|
6
6
|
|
|
7
7
|
<steps CRITICAL="TRUE">
|
|
8
|
-
1. Always LOAD the FULL
|
|
8
|
+
1. Always LOAD the FULL @.bmad/core/tasks/workflow.xml
|
|
9
9
|
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config @{{workflow_path}}
|
|
10
10
|
3. Pass the yaml path {{workflow_path}} as 'workflow-config' parameter to the workflow.xml instructions
|
|
11
11
|
4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
|