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
|
@@ -4,7 +4,7 @@ description: "Apply systematic problem-solving methodologies to crack complex ch
|
|
|
4
4
|
author: "BMad"
|
|
5
5
|
|
|
6
6
|
# Critical variables load from config_source
|
|
7
|
-
config_source: "{project-root}/
|
|
7
|
+
config_source: "{project-root}/.bmad/cis/config.yaml"
|
|
8
8
|
output_folder: "{config_source}:output_folder"
|
|
9
9
|
user_name: "{config_source}:user_name"
|
|
10
10
|
communication_language: "{config_source}:communication_language"
|
|
@@ -14,7 +14,7 @@ date: system-generated
|
|
|
14
14
|
# Example: data="{path}/problem-brief.md" provides context
|
|
15
15
|
|
|
16
16
|
# Module path and component files
|
|
17
|
-
installed_path: "{project-root}/
|
|
17
|
+
installed_path: "{project-root}/.bmad/cis/workflows/problem-solving"
|
|
18
18
|
template: "{installed_path}/template.md"
|
|
19
19
|
instructions: "{installed_path}/instructions.md"
|
|
20
20
|
|
|
@@ -30,9 +30,9 @@ web_bundle:
|
|
|
30
30
|
name: "problem-solving"
|
|
31
31
|
description: "Apply systematic problem-solving methodologies to crack complex challenges. This workflow guides through problem diagnosis, root cause analysis, creative solution generation, evaluation, and implementation planning using proven frameworks."
|
|
32
32
|
author: "BMad"
|
|
33
|
-
instructions: "
|
|
34
|
-
template: "
|
|
33
|
+
instructions: ".bmad/cis/workflows/problem-solving/instructions.md"
|
|
34
|
+
template: ".bmad/cis/workflows/problem-solving/template.md"
|
|
35
35
|
web_bundle_files:
|
|
36
|
-
- "
|
|
37
|
-
- "
|
|
38
|
-
- "
|
|
36
|
+
- ".bmad/cis/workflows/problem-solving/instructions.md"
|
|
37
|
+
- ".bmad/cis/workflows/problem-solving/template.md"
|
|
38
|
+
- ".bmad/cis/workflows/problem-solving/solving-methods.csv"
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
## Workflow
|
|
4
4
|
|
|
5
5
|
<workflow>
|
|
6
|
-
<critical>The workflow execution engine is governed by: {project_root}/
|
|
7
|
-
<critical>You MUST have already loaded and processed: {project_root}/
|
|
6
|
+
<critical>The workflow execution engine is governed by: {project_root}/.bmad/core/tasks/workflow.xml</critical>
|
|
7
|
+
<critical>You MUST have already loaded and processed: {project_root}/.bmad/cis/workflows/storytelling/workflow.yaml</critical>
|
|
8
8
|
<critical>Communicate all responses in {communication_language}</critical>
|
|
9
9
|
<critical>⚠️ ABSOLUTELY NO TIME ESTIMATES - NEVER mention hours, days, weeks, months, or ANY time-based predictions. AI has fundamentally changed development speed - what once took teams weeks/months can now be done by one person in hours. DO NOT give ANY time estimates whatsoever.</critical>
|
|
10
10
|
<critical>⚠️ CHECKPOINT PROTOCOL: After EVERY <template-output> tag, you MUST follow workflow.xml substep 2c: SAVE content to file immediately → SHOW checkpoint separator (━━━━━━━━━━━━━━━━━━━━━━━) → DISPLAY generated content → PRESENT options [a]Advanced Elicitation/[c]Continue/[p]Party-Mode/[y]YOLO → WAIT for user response. Never batch saves or skip checkpoints.</critical>
|
|
@@ -4,7 +4,7 @@ description: "Craft compelling narratives using proven story frameworks and tech
|
|
|
4
4
|
author: "BMad"
|
|
5
5
|
|
|
6
6
|
# Critical variables load from config_source
|
|
7
|
-
config_source: "{project-root}/
|
|
7
|
+
config_source: "{project-root}/.bmad/cis/config.yaml"
|
|
8
8
|
output_folder: "{config_source}:output_folder"
|
|
9
9
|
user_name: "{config_source}:user_name"
|
|
10
10
|
communication_language: "{config_source}:communication_language"
|
|
@@ -14,7 +14,7 @@ date: system-generated
|
|
|
14
14
|
# Example: data="{path}/brand-info.md" provides brand context
|
|
15
15
|
|
|
16
16
|
# Module path and component files
|
|
17
|
-
installed_path: "{project-root}/
|
|
17
|
+
installed_path: "{project-root}/.bmad/cis/workflows/storytelling"
|
|
18
18
|
template: "{installed_path}/template.md"
|
|
19
19
|
instructions: "{installed_path}/instructions.md"
|
|
20
20
|
|
|
@@ -30,9 +30,9 @@ web_bundle:
|
|
|
30
30
|
name: "storytelling"
|
|
31
31
|
description: "Craft compelling narratives using proven story frameworks and techniques. This workflow guides users through structured narrative development, applying appropriate story frameworks to create emotionally resonant and engaging stories for any purpose."
|
|
32
32
|
author: "BMad"
|
|
33
|
-
instructions: "
|
|
34
|
-
template: "
|
|
33
|
+
instructions: ".bmad/cis/workflows/storytelling/instructions.md"
|
|
34
|
+
template: ".bmad/cis/workflows/storytelling/template.md"
|
|
35
35
|
web_bundle_files:
|
|
36
|
-
- "
|
|
37
|
-
- "
|
|
38
|
-
- "
|
|
36
|
+
- ".bmad/cis/workflows/storytelling/instructions.md"
|
|
37
|
+
- ".bmad/cis/workflows/storytelling/template.md"
|
|
38
|
+
- ".bmad/cis/workflows/storytelling/story-types.csv"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<activation critical="MANDATORY">
|
|
2
2
|
<init>
|
|
3
3
|
<step n="1">Load persona from this current file containing this activation you are reading now</step>
|
|
4
|
-
<step n="2">Override with {project-root}/
|
|
4
|
+
<step n="2">Override with {project-root}/.bmad/_cfg/agents/{agent-filename} if exists (replace, not merge)</step>
|
|
5
5
|
<step n="3">Execute critical-actions section if present in current agent XML</step>
|
|
6
6
|
<step n="4">Show greeting + numbered list of ALL commands IN ORDER from current agent's cmds section</step>
|
|
7
7
|
<step n="5">CRITICAL HALT. AWAIT user input. NEVER continue without it.</step>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<handlers>
|
|
13
13
|
<handler type="progressive-workflow">
|
|
14
14
|
When command has: run-progressive-workflow="path/to/x.yaml" You MUST:
|
|
15
|
-
1. CRITICAL: Always LOAD {project-root}/
|
|
15
|
+
1. CRITICAL: Always LOAD {project-root}/.bmad/core/tasks/workflow.xml
|
|
16
16
|
2. READ its entire contents - the is the CORE OS for EXECUTING workflows
|
|
17
17
|
3. Pass the yaml path as 'workflow-config' parameter to those instructions
|
|
18
18
|
4. Follow workflow.xml instructions EXACTLY as written
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</handler>
|
|
21
21
|
<handler type="validate-workflow">
|
|
22
22
|
When command has: validate-workflow="path/to/workflow.yaml" You MUST:
|
|
23
|
-
1. You MUST LOAD the file at: {project-root}/
|
|
23
|
+
1. You MUST LOAD the file at: {project-root}/.bmad/core/tasks/validate-workflow.xml
|
|
24
24
|
2. READ its entire contents and EXECUTE all instructions in that file
|
|
25
25
|
3. Pass the workflow, and also check the workflow location for a checklist.md to pass as the checklist
|
|
26
26
|
4. The workflow should try to identify the file to validate based on checklist context or else you will ask the user to specify
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
<bundled-files critical="MANDATORY">
|
|
8
8
|
<access-method>
|
|
9
9
|
All dependencies are bundled within this XML file as <file> elements with CDATA content.
|
|
10
|
-
When you need to access a file path like "
|
|
11
|
-
1. Find the <file id="
|
|
10
|
+
When you need to access a file path like ".bmad/core/tasks/workflow.xml":
|
|
11
|
+
1. Find the <file id=".bmad/core/tasks/workflow.xml"> element in this document
|
|
12
12
|
2. Extract the content from within the CDATA section
|
|
13
13
|
3. Use that content as if you read it from the filesystem
|
|
14
14
|
</access-method>
|
|
15
15
|
<rules>
|
|
16
16
|
<rule>NEVER attempt to read files from filesystem - all files are bundled in this XML</rule>
|
|
17
|
-
<rule>File paths starting with "
|
|
17
|
+
<rule>File paths starting with ".bmad/" or "{project-root}/.bmad/" refer to <file id="..."> elements</rule>
|
|
18
18
|
<rule>When instructions reference a file path, locate the corresponding <file> element by matching the id attribute</rule>
|
|
19
19
|
<rule>YAML files are bundled with only their web_bundle section content (flattened to root level)</rule>
|
|
20
20
|
</rules>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<step n="1">Load persona from this current agent file (already in context)</step>
|
|
2
2
|
<step n="2">🚨 IMMEDIATE ACTION REQUIRED - BEFORE ANY OUTPUT:
|
|
3
|
-
- Load and read {project-root}/{
|
|
3
|
+
- Load and read {project-root}/.bmad/{{module}}/config.yaml NOW
|
|
4
4
|
- Store ALL fields as session variables: {user_name}, {communication_language}, {output_folder}
|
|
5
5
|
- VERIFY: If config not loaded, STOP and report error to user
|
|
6
6
|
- DO NOT PROCEED to step 3 until config is successfully loaded and variables stored</step>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<handler type="validate-workflow">
|
|
2
2
|
When command has: validate-workflow="path/to/workflow.yaml"
|
|
3
|
-
1. You MUST LOAD the file at: {project-root}/
|
|
3
|
+
1. You MUST LOAD the file at: {project-root}/.bmad/core/tasks/validate-workflow.xml
|
|
4
4
|
2. READ its entire contents and EXECUTE all instructions in that file
|
|
5
5
|
3. Pass the workflow, and also check the workflow yaml validation property to find and load the validation schema to pass as the checklist
|
|
6
6
|
4. The workflow should try to identify the file to validate based on checklist context or else you will ask the user to specify
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<handler type="workflow">
|
|
2
2
|
When menu item has: workflow="path/to/workflow.yaml"
|
|
3
|
-
1. CRITICAL: Always LOAD {project-root}/
|
|
3
|
+
1. CRITICAL: Always LOAD {project-root}/.bmad/core/tasks/workflow.xml
|
|
4
4
|
2. Read the complete file - this is the CORE OS for executing BMAD workflows
|
|
5
5
|
3. Pass the yaml path as 'workflow-config' parameter to those instructions
|
|
6
6
|
4. Execute workflow.xml instructions precisely following all steps
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
<bundled-files critical="MANDATORY">
|
|
11
11
|
<access-method>
|
|
12
12
|
All dependencies are bundled within this XML file as <file> elements with CDATA content.
|
|
13
|
-
When you need to access a file path like "
|
|
14
|
-
1. Find the <file id="
|
|
13
|
+
When you need to access a file path like ".bmad/core/tasks/workflow.xml":
|
|
14
|
+
1. Find the <file id=".bmad/core/tasks/workflow.xml"> element in this document
|
|
15
15
|
2. Extract the content from within the CDATA section
|
|
16
16
|
3. Use that content as if you read it from the filesystem
|
|
17
17
|
</access-method>
|
|
18
18
|
<rules>
|
|
19
19
|
<rule>NEVER attempt to read files from filesystem - all files are bundled in this XML</rule>
|
|
20
|
-
<rule>File paths starting with "
|
|
20
|
+
<rule>File paths starting with ".bmad/" refer to <file id="..."> elements</rule>
|
|
21
21
|
<rule>When instructions reference a file path, locate the corresponding <file> element by matching the id attribute</rule>
|
|
22
22
|
<rule>YAML files are bundled with only their web_bundle section content (flattened to root level)</rule>
|
|
23
23
|
</rules>
|
package/tools/cli/README.md
CHANGED
|
@@ -105,7 +105,7 @@ The installer is a multi-stage system that handles agent compilation, IDE integr
|
|
|
105
105
|
- Resolve module dependencies (4-pass system)
|
|
106
106
|
|
|
107
107
|
3. Install Core + Modules
|
|
108
|
-
- Copy files to {target}/
|
|
108
|
+
- Copy files to {target}/.bmad/
|
|
109
109
|
- Compile agents: YAML → Markdown/XML (forWebBundle: false)
|
|
110
110
|
- Merge customize.yaml files if they exist
|
|
111
111
|
- Inject activation blocks based on agent capabilities
|
|
@@ -131,7 +131,7 @@ The installer is a multi-stage system that handles agent compilation, IDE integr
|
|
|
131
131
|
|
|
132
132
|
```
|
|
133
133
|
{target}/
|
|
134
|
-
├──
|
|
134
|
+
├── .bmad/
|
|
135
135
|
│ ├── core/ # Always installed
|
|
136
136
|
│ ├── {module}/ # Selected modules
|
|
137
137
|
│ │ ├── agents/ # Compiled .md files
|
|
@@ -239,7 +239,7 @@ Platform specifics are **IDE+module combination hooks** that execute custom logi
|
|
|
239
239
|
|
|
240
240
|
### Manifest System
|
|
241
241
|
|
|
242
|
-
The installer generates **5 manifest files** in `{target}/
|
|
242
|
+
The installer generates **5 manifest files** in `{target}/.bmad/_cfg/`:
|
|
243
243
|
|
|
244
244
|
**1. Installation Manifest** (`manifest.yaml`)
|
|
245
245
|
|
|
@@ -428,7 +428,7 @@ agent:
|
|
|
428
428
|
identity: 'You are an experienced PM...'
|
|
429
429
|
menu:
|
|
430
430
|
- trigger: '*create-brief'
|
|
431
|
-
workflow: '{project-root}/
|
|
431
|
+
workflow: '{project-root}/.bmad/bmm/workflows/.../workflow.yaml'
|
|
432
432
|
```
|
|
433
433
|
|
|
434
434
|
### Output: IDE (Markdown with XML)
|
|
@@ -441,7 +441,7 @@ agent:
|
|
|
441
441
|
```xml
|
|
442
442
|
<agent id="..." name="PM">
|
|
443
443
|
<activation critical="MANDATORY">
|
|
444
|
-
<step n="2">Load {project-root}/
|
|
444
|
+
<step n="2">Load {project-root}/.bmad/bmm/config.yaml at runtime</step>
|
|
445
445
|
...
|
|
446
446
|
</activation>
|
|
447
447
|
<persona>...</persona>
|
|
@@ -533,20 +533,20 @@ src/utility/models/fragments/
|
|
|
533
533
|
|
|
534
534
|
## Key Differences: Installation vs Bundling
|
|
535
535
|
|
|
536
|
-
| Aspect | Installation (IDE)
|
|
537
|
-
| ----------------------- |
|
|
538
|
-
| **Trigger** | `npm run install:bmad`
|
|
539
|
-
| **Entry Point** | `commands/install.js`
|
|
540
|
-
| **Compiler Flag** | `forWebBundle: false`
|
|
541
|
-
| **Output Format** | Markdown `.md`
|
|
542
|
-
| **Output Location** | `{target}
|
|
543
|
-
| **Customization** | Merges `customize.yaml`
|
|
544
|
-
| **Dependencies** | Referenced by path
|
|
545
|
-
| **Activation Fragment** | `activation-steps.xml`
|
|
546
|
-
| **Filesystem Access** | Required
|
|
547
|
-
| **Build Metadata** | Included (hash)
|
|
548
|
-
| **Path Format** | `{project-root}` placeholders
|
|
549
|
-
| **Use Case** | Local IDE development
|
|
536
|
+
| Aspect | Installation (IDE) | Bundling (Web) |
|
|
537
|
+
| ----------------------- | ----------------------------- | --------------------------------- |
|
|
538
|
+
| **Trigger** | `npm run install:bmad` | `npm run bundle` |
|
|
539
|
+
| **Entry Point** | `commands/install.js` | `bundlers/bundle-web.js` |
|
|
540
|
+
| **Compiler Flag** | `forWebBundle: false` | `forWebBundle: true` |
|
|
541
|
+
| **Output Format** | Markdown `.md` | Standalone XML `.xml` |
|
|
542
|
+
| **Output Location** | `{target}/.bmad/` + IDE dirs | `web-bundles/` |
|
|
543
|
+
| **Customization** | Merges `customize.yaml` | Base agents only |
|
|
544
|
+
| **Dependencies** | Referenced by path | Bundled inline (CDATA) |
|
|
545
|
+
| **Activation Fragment** | `activation-steps.xml` | `web-bundle-activation-steps.xml` |
|
|
546
|
+
| **Filesystem Access** | Required | Not needed |
|
|
547
|
+
| **Build Metadata** | Included (hash) | Excluded |
|
|
548
|
+
| **Path Format** | `{project-root}` placeholders | Stripped, wrapped as `<file>` |
|
|
549
|
+
| **Use Case** | Local IDE development | Web deployment |
|
|
550
550
|
|
|
551
551
|
**Activation Differences**:
|
|
552
552
|
|
|
@@ -29,7 +29,7 @@ class WebBundler {
|
|
|
29
29
|
|
|
30
30
|
// Temporary directory for generated manifests
|
|
31
31
|
this.tempDir = path.join(process.cwd(), '.bundler-temp');
|
|
32
|
-
this.tempManifestDir = path.join(this.tempDir, 'bmad', '_cfg');
|
|
32
|
+
this.tempManifestDir = path.join(this.tempDir, '.bmad', '_cfg');
|
|
33
33
|
|
|
34
34
|
// Bundle statistics
|
|
35
35
|
this.stats = {
|
|
@@ -531,9 +531,9 @@ class WebBundler {
|
|
|
531
531
|
}
|
|
532
532
|
|
|
533
533
|
// Parse paths to extract module and workflow location
|
|
534
|
-
// Support both {project-root}/bmad/... and {project-root}
|
|
535
|
-
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(
|
|
536
|
-
const installMatch = installWorkflowPath.match(/\{project-root\}\/(
|
|
534
|
+
// Support both {project-root}/bmad/... and {project-root}/.bmad/... patterns
|
|
535
|
+
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\.?bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
536
|
+
const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:\.?bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
537
537
|
|
|
538
538
|
if (!sourceMatch || !installMatch) {
|
|
539
539
|
continue;
|
|
@@ -584,9 +584,9 @@ class WebBundler {
|
|
|
584
584
|
let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
|
|
585
585
|
|
|
586
586
|
// Replace config_source with new module reference
|
|
587
|
-
// Support both old format (bmad) and new format (
|
|
588
|
-
const configSourcePattern = /config_source:\s*["']?\{project-root\}\/(
|
|
589
|
-
const newConfigSource = `config_source: "{project-root}
|
|
587
|
+
// Support both old format (bmad) and new format (.bmad)
|
|
588
|
+
const configSourcePattern = /config_source:\s*["']?\{project-root\}\/(?:\.?bmad)\/[^/]+\/config\.yaml["']?/g;
|
|
589
|
+
const newConfigSource = `config_source: "{project-root}/.bmad/${newModuleName}/config.yaml"`;
|
|
590
590
|
|
|
591
591
|
const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
|
|
592
592
|
await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
|
|
@@ -723,7 +723,7 @@ class WebBundler {
|
|
|
723
723
|
/tools="([^"]+)"/g,
|
|
724
724
|
/knowledge="([^"]+)"/g,
|
|
725
725
|
/{project-root}\/([^"'\s<>]+)/g, // Legacy {project-root} paths
|
|
726
|
-
/\bbmad\/([^"'\s<>]+)/g, // Direct bmad/ paths (after
|
|
726
|
+
/\bbmad\/([^"'\s<>]+)/g, // Direct bmad/ paths (after .bmad replacement)
|
|
727
727
|
];
|
|
728
728
|
|
|
729
729
|
for (const pattern of patterns) {
|
|
@@ -733,8 +733,8 @@ class WebBundler {
|
|
|
733
733
|
let filePath = match[1];
|
|
734
734
|
// Remove {project-root} prefix if present
|
|
735
735
|
filePath = filePath.replace(/^{project-root}\//, '');
|
|
736
|
-
// Remove
|
|
737
|
-
filePath = filePath.replace(
|
|
736
|
+
// Remove .bmad prefix if present (should be rare, mostly replaced already)
|
|
737
|
+
filePath = filePath.replace(/^.bmad\//, 'bmad/');
|
|
738
738
|
|
|
739
739
|
// For bmad/ pattern, prepend 'bmad/' since it was captured without it
|
|
740
740
|
if (pattern.source.includes(String.raw`\bbmad\/`)) {
|
|
@@ -760,8 +760,8 @@ class WebBundler {
|
|
|
760
760
|
while ((match = pattern.exec(xml)) !== null) {
|
|
761
761
|
let workflowPath = match[1];
|
|
762
762
|
workflowPath = workflowPath.replace(/^{project-root}\//, '');
|
|
763
|
-
// Remove
|
|
764
|
-
workflowPath = workflowPath.replace(
|
|
763
|
+
// Remove .bmad prefix if present and replace with bmad
|
|
764
|
+
workflowPath = workflowPath.replace(/^.bmad\//, 'bmad/');
|
|
765
765
|
|
|
766
766
|
// Skip obvious placeholder/example paths
|
|
767
767
|
if (workflowPath && workflowPath.endsWith('.yaml') && !workflowPath.includes('path/to/') && !workflowPath.includes('example')) {
|
|
@@ -851,7 +851,7 @@ class WebBundler {
|
|
|
851
851
|
if (deps) {
|
|
852
852
|
for (const dep of deps) {
|
|
853
853
|
let depPath = dep.replaceAll(/['"]/g, '').replace(/^{project-root}\//, '');
|
|
854
|
-
depPath = depPath.replace(
|
|
854
|
+
depPath = depPath.replace(/^.bmad\//, 'bmad/');
|
|
855
855
|
if (depPath && !processed.has(depPath)) {
|
|
856
856
|
await this.processFileDependency(depPath, dependencies, processed, moduleName, warnings);
|
|
857
857
|
}
|
|
@@ -865,7 +865,7 @@ class WebBundler {
|
|
|
865
865
|
if (templates) {
|
|
866
866
|
for (const template of templates) {
|
|
867
867
|
let templatePath = template.replaceAll(/['"]/g, '').replace(/^{project-root}\//, '');
|
|
868
|
-
templatePath = templatePath.replace(
|
|
868
|
+
templatePath = templatePath.replace(/^.bmad\//, 'bmad/');
|
|
869
869
|
if (templatePath && !processed.has(templatePath)) {
|
|
870
870
|
await this.processFileDependency(templatePath, dependencies, processed, moduleName, warnings);
|
|
871
871
|
}
|
|
@@ -1053,13 +1053,13 @@ class WebBundler {
|
|
|
1053
1053
|
bundleYamlContent = yamlContent;
|
|
1054
1054
|
}
|
|
1055
1055
|
|
|
1056
|
-
// Process {project-root} and
|
|
1056
|
+
// Process {project-root} and .bmad references in the YAML content
|
|
1057
1057
|
bundleYamlContent = this.processProjectRootReferences(bundleYamlContent);
|
|
1058
1058
|
|
|
1059
1059
|
// Include the YAML file with only web_bundle content, wrapped in XML
|
|
1060
1060
|
// Process the workflow path to create a clean ID
|
|
1061
1061
|
let yamlId = workflowPath.replace(/^{project-root}\//, '');
|
|
1062
|
-
yamlId = yamlId.replace(
|
|
1062
|
+
yamlId = yamlId.replace(/^.bmad\//, 'bmad/');
|
|
1063
1063
|
const wrappedYaml = this.wrapContentInXml(bundleYamlContent, yamlId, 'yaml');
|
|
1064
1064
|
dependencies.set(yamlId, wrappedYaml);
|
|
1065
1065
|
|
|
@@ -1078,7 +1078,7 @@ class WebBundler {
|
|
|
1078
1078
|
for (const bundleFilePath of bundleFiles) {
|
|
1079
1079
|
// Process the file path to create a clean ID for checking if already processed
|
|
1080
1080
|
let cleanFilePath = bundleFilePath.replace(/^{project-root}\//, '');
|
|
1081
|
-
cleanFilePath = cleanFilePath.replace(
|
|
1081
|
+
cleanFilePath = cleanFilePath.replace(/^.bmad\//, 'bmad/');
|
|
1082
1082
|
|
|
1083
1083
|
if (processed.has(cleanFilePath)) {
|
|
1084
1084
|
continue;
|
|
@@ -1087,7 +1087,7 @@ class WebBundler {
|
|
|
1087
1087
|
const bundleActualPath = this.resolveFilePath(bundleFilePath, moduleName);
|
|
1088
1088
|
|
|
1089
1089
|
if (!bundleActualPath || !(await fs.pathExists(bundleActualPath))) {
|
|
1090
|
-
// Use the cleaned path in warnings (with
|
|
1090
|
+
// Use the cleaned path in warnings (with .bmad replaced)
|
|
1091
1091
|
warnings.push(cleanFilePath);
|
|
1092
1092
|
continue;
|
|
1093
1093
|
}
|
|
@@ -1136,7 +1136,7 @@ class WebBundler {
|
|
|
1136
1136
|
}
|
|
1137
1137
|
|
|
1138
1138
|
let fileContent = await fs.readFile(actualPath, 'utf8');
|
|
1139
|
-
// Process {project-root} and
|
|
1139
|
+
// Process {project-root} and .bmad references
|
|
1140
1140
|
fileContent = this.processProjectRootReferences(fileContent);
|
|
1141
1141
|
const wrappedContent = this.wrapContentInXml(fileContent, coreWorkflowPath, 'xml');
|
|
1142
1142
|
dependencies.set(coreWorkflowPath, wrappedContent);
|
|
@@ -1162,7 +1162,7 @@ class WebBundler {
|
|
|
1162
1162
|
}
|
|
1163
1163
|
|
|
1164
1164
|
let fileContent = await fs.readFile(actualPath, 'utf8');
|
|
1165
|
-
// Process {project-root} and
|
|
1165
|
+
// Process {project-root} and .bmad references
|
|
1166
1166
|
fileContent = this.processProjectRootReferences(fileContent);
|
|
1167
1167
|
const fileExt = path.extname(actualPath).toLowerCase().replace('.', '');
|
|
1168
1168
|
const wrappedContent = this.wrapContentInXml(fileContent, filePath, fileExt);
|
|
@@ -1196,8 +1196,8 @@ class WebBundler {
|
|
|
1196
1196
|
async processWildcardDependency(pattern, dependencies, processed, moduleName, warnings = []) {
|
|
1197
1197
|
// Remove {project-root} prefix
|
|
1198
1198
|
pattern = pattern.replace(/^{project-root}\//, '');
|
|
1199
|
-
// Replace
|
|
1200
|
-
pattern = pattern.replace(
|
|
1199
|
+
// Replace .bmad with bmad
|
|
1200
|
+
pattern = pattern.replace(/^.bmad\//, 'bmad/');
|
|
1201
1201
|
|
|
1202
1202
|
// Get directory and file pattern
|
|
1203
1203
|
const lastSlash = pattern.lastIndexOf('/');
|
|
@@ -1265,9 +1265,6 @@ class WebBundler {
|
|
|
1265
1265
|
resolveFilePath(filePath, moduleName) {
|
|
1266
1266
|
// Remove {project-root} prefix
|
|
1267
1267
|
filePath = filePath.replace(/^{project-root}\//, '');
|
|
1268
|
-
// Replace {bmad_folder} with bmad
|
|
1269
|
-
filePath = filePath.replace(/^{bmad_folder}\//, 'bmad/');
|
|
1270
|
-
filePath = filePath.replace(/^{bmad_folder}$/, 'bmad');
|
|
1271
1268
|
|
|
1272
1269
|
// Check temp directory first for _cfg files
|
|
1273
1270
|
if (filePath.startsWith('bmad/_cfg/')) {
|
|
@@ -1278,11 +1275,6 @@ class WebBundler {
|
|
|
1278
1275
|
}
|
|
1279
1276
|
}
|
|
1280
1277
|
|
|
1281
|
-
// Handle different path patterns for bmad files
|
|
1282
|
-
// bmad/cis/tasks/brain-session.md -> src/modules/cis/tasks/brain-session.md
|
|
1283
|
-
// bmad/core/tasks/create-doc.md -> src/core/tasks/create-doc.md
|
|
1284
|
-
// bmad/bmm/templates/brief.md -> src/modules/bmm/templates/brief.md
|
|
1285
|
-
|
|
1286
1278
|
let actualPath = filePath;
|
|
1287
1279
|
|
|
1288
1280
|
if (filePath.startsWith('bmad/')) {
|
|
@@ -1334,15 +1326,13 @@ class WebBundler {
|
|
|
1334
1326
|
}
|
|
1335
1327
|
|
|
1336
1328
|
/**
|
|
1337
|
-
* Process and remove {project-root} references
|
|
1329
|
+
* Process and remove {project-root} references
|
|
1338
1330
|
*/
|
|
1339
1331
|
processProjectRootReferences(content) {
|
|
1340
1332
|
// Remove {project-root}/ prefix (with slash)
|
|
1341
1333
|
content = content.replaceAll('{project-root}/', '');
|
|
1342
1334
|
// Also remove {project-root} without slash
|
|
1343
1335
|
content = content.replaceAll('{project-root}', '');
|
|
1344
|
-
// Replace {bmad_folder} with bmad
|
|
1345
|
-
content = content.replaceAll('{bmad_folder}', 'bmad');
|
|
1346
1336
|
return content;
|
|
1347
1337
|
}
|
|
1348
1338
|
|
|
@@ -80,7 +80,7 @@ module.exports = {
|
|
|
80
80
|
*/
|
|
81
81
|
async function buildAgent(projectDir, agentName) {
|
|
82
82
|
// First check standalone agents in bmad/agents/{agentname}/
|
|
83
|
-
const standaloneAgentDir = path.join(projectDir, 'bmad', 'agents', agentName);
|
|
83
|
+
const standaloneAgentDir = path.join(projectDir, '.bmad', 'agents', agentName);
|
|
84
84
|
let standaloneYamlPath = path.join(standaloneAgentDir, `${agentName}.agent.yaml`);
|
|
85
85
|
|
|
86
86
|
// If exact match doesn't exist, look for any .agent.yaml file in the directory
|
|
@@ -99,7 +99,7 @@ async function buildAgent(projectDir, agentName) {
|
|
|
99
99
|
// Build the standalone agent
|
|
100
100
|
console.log(chalk.cyan(` Building standalone agent ${agentName}...`));
|
|
101
101
|
|
|
102
|
-
const customizePath = path.join(projectDir, 'bmad', '_cfg', 'agents', `${agentName}.customize.yaml`);
|
|
102
|
+
const customizePath = path.join(projectDir, '.bmad', '_cfg', 'agents', `${agentName}.customize.yaml`);
|
|
103
103
|
const customizeExists = await fs.pathExists(customizePath);
|
|
104
104
|
|
|
105
105
|
await builder.buildAgent(standaloneYamlPath, customizeExists ? customizePath : null, outputPath, { includeMetadata: true });
|
|
@@ -109,7 +109,7 @@ async function buildAgent(projectDir, agentName) {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
// Find the agent YAML file in .claude/commands/bmad/
|
|
112
|
-
const bmadCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
|
|
112
|
+
const bmadCommandsDir = path.join(projectDir, '.claude', 'commands', '.bmad');
|
|
113
113
|
|
|
114
114
|
// Search all module directories for the agent
|
|
115
115
|
const modules = await fs.readdir(bmadCommandsDir);
|
|
@@ -149,7 +149,7 @@ async function buildAllAgents(projectDir) {
|
|
|
149
149
|
let builtCount = 0;
|
|
150
150
|
|
|
151
151
|
// First, build standalone agents in bmad/agents/
|
|
152
|
-
const standaloneAgentsDir = path.join(projectDir, 'bmad', 'agents');
|
|
152
|
+
const standaloneAgentsDir = path.join(projectDir, '.bmad', 'agents');
|
|
153
153
|
if (await fs.pathExists(standaloneAgentsDir)) {
|
|
154
154
|
console.log(chalk.cyan('\nBuilding standalone agents...'));
|
|
155
155
|
const agentDirs = await fs.readdir(standaloneAgentsDir);
|
|
@@ -177,7 +177,7 @@ async function buildAllAgents(projectDir) {
|
|
|
177
177
|
|
|
178
178
|
console.log(chalk.cyan(` Building standalone agent ${agentName}...`));
|
|
179
179
|
|
|
180
|
-
const customizePath = path.join(projectDir, 'bmad', '_cfg', 'agents', `${agentName}.customize.yaml`);
|
|
180
|
+
const customizePath = path.join(projectDir, '.bmad', '_cfg', 'agents', `${agentName}.customize.yaml`);
|
|
181
181
|
const customizeExists = await fs.pathExists(customizePath);
|
|
182
182
|
|
|
183
183
|
await builder.buildAgent(agentYamlPath, customizeExists ? customizePath : null, outputPath, { includeMetadata: true });
|
|
@@ -132,8 +132,12 @@ class ConfigCollector {
|
|
|
132
132
|
* Collect configuration for all modules
|
|
133
133
|
* @param {Array} modules - List of modules to configure (including 'core')
|
|
134
134
|
* @param {string} projectDir - Target project directory
|
|
135
|
+
* @param {Object} options - Additional options
|
|
136
|
+
* @param {Map} options.customModulePaths - Map of module ID to source path for custom modules
|
|
135
137
|
*/
|
|
136
|
-
async collectAllConfigurations(modules, projectDir) {
|
|
138
|
+
async collectAllConfigurations(modules, projectDir, options = {}) {
|
|
139
|
+
// Store custom module paths for use in collectModuleConfig
|
|
140
|
+
this.customModulePaths = options.customModulePaths || new Map();
|
|
137
141
|
await this.loadExistingConfig(projectDir);
|
|
138
142
|
|
|
139
143
|
// Check if core was already collected (e.g., in early collection phase)
|
|
@@ -451,11 +455,21 @@ class ConfigCollector {
|
|
|
451
455
|
this.allAnswers = {};
|
|
452
456
|
}
|
|
453
457
|
// Load module's config
|
|
454
|
-
// First,
|
|
455
|
-
let installerConfigPath =
|
|
456
|
-
let moduleConfigPath =
|
|
458
|
+
// First, check if we have a custom module path for this module
|
|
459
|
+
let installerConfigPath = null;
|
|
460
|
+
let moduleConfigPath = null;
|
|
461
|
+
|
|
462
|
+
if (this.customModulePaths && this.customModulePaths.has(moduleName)) {
|
|
463
|
+
const customPath = this.customModulePaths.get(moduleName);
|
|
464
|
+
installerConfigPath = path.join(customPath, '_module-installer', 'module.yaml');
|
|
465
|
+
moduleConfigPath = path.join(customPath, 'module.yaml');
|
|
466
|
+
} else {
|
|
467
|
+
// Try the standard src/modules location
|
|
468
|
+
installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'module.yaml');
|
|
469
|
+
moduleConfigPath = path.join(getModulePath(moduleName), 'module.yaml');
|
|
470
|
+
}
|
|
457
471
|
|
|
458
|
-
// If not found in src/modules
|
|
472
|
+
// If not found in src/modules or custom paths, search the project
|
|
459
473
|
if (!(await fs.pathExists(installerConfigPath)) && !(await fs.pathExists(moduleConfigPath))) {
|
|
460
474
|
// Use the module manager to find the module source
|
|
461
475
|
const { ModuleManager } = require('../modules/manager');
|
|
@@ -682,15 +696,6 @@ class ConfigCollector {
|
|
|
682
696
|
}
|
|
683
697
|
}
|
|
684
698
|
|
|
685
|
-
// Special handling for bmad_folder: detect existing folder name
|
|
686
|
-
if (moduleName === 'core' && key === 'bmad_folder' && !existingValue && this.currentProjectDir) {
|
|
687
|
-
// Try to detect the existing BMAD folder name
|
|
688
|
-
const detectedFolder = await this.detectExistingBmadFolder(this.currentProjectDir);
|
|
689
|
-
if (detectedFolder) {
|
|
690
|
-
existingValue = detectedFolder;
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
699
|
// Special handling for user_name: default to system user
|
|
695
700
|
if (moduleName === 'core' && key === 'user_name' && !existingValue) {
|
|
696
701
|
item.default = this.getDefaultUsername();
|
|
@@ -51,7 +51,19 @@ class CustomModuleCache {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
54
|
+
* Stream a file into the hash to avoid loading entire file into memory
|
|
55
|
+
*/
|
|
56
|
+
async hashFileStream(filePath, hash) {
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const stream = require('node:fs').createReadStream(filePath);
|
|
59
|
+
stream.on('data', (chunk) => hash.update(chunk));
|
|
60
|
+
stream.on('end', resolve);
|
|
61
|
+
stream.on('error', reject);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Calculate hash of a file or directory using streaming to minimize memory usage
|
|
55
67
|
*/
|
|
56
68
|
async calculateHash(sourcePath) {
|
|
57
69
|
const hash = crypto.createHash('sha256');
|
|
@@ -76,14 +88,14 @@ class CustomModuleCache {
|
|
|
76
88
|
files.sort(); // Ensure consistent order
|
|
77
89
|
|
|
78
90
|
for (const file of files) {
|
|
79
|
-
const content = await fs.readFile(file);
|
|
80
91
|
const relativePath = path.relative(sourcePath, file);
|
|
81
|
-
|
|
92
|
+
// Hash the path first, then stream file contents
|
|
93
|
+
hash.update(relativePath + '|');
|
|
94
|
+
await this.hashFileStream(file, hash);
|
|
82
95
|
}
|
|
83
96
|
} else {
|
|
84
|
-
// For single files
|
|
85
|
-
|
|
86
|
-
hash.update(content);
|
|
97
|
+
// For single files, stream directly into hash
|
|
98
|
+
await this.hashFileStream(sourcePath, hash);
|
|
87
99
|
}
|
|
88
100
|
|
|
89
101
|
return hash.digest('hex');
|