bmad-method 6.2.1-next.9 → 6.2.2
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/AGENTS.md +1 -0
- package/README_CN.md +23 -36
- package/package.json +4 -6
- package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-analyst/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/SKILL.md +2 -3
- package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/SKILL.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/SKILL.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/SKILL.md +1 -1
- package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-pm/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-ux-designer/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01-discovery.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-02-review.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-03-edit.md +1 -1
- package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-04-complete.md +1 -1
- package/src/{bmm/agents → bmm-skills/3-solutioning}/bmad-agent-architect/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-dev/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-qa/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-quick-flow-solo-dev/SKILL.md +1 -3
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-sm/bmad-skill-manifest.yaml +1 -2
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/steps/step-01-gather-context.md +3 -2
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-02-review.md +34 -0
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/steps/step-03-triage.md +7 -8
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md +129 -0
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/workflow.md +1 -0
- package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/workflow.md +4 -4
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/SKILL.md +1 -1
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md → bmm-skills/4-implementation/bmad-quick-dev/spec-template.md} +0 -2
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-01-clarify-and-route.md +22 -8
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-02-plan.md +3 -3
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-03-implement.md +6 -0
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-05-present.md +8 -6
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-oneshot.md +2 -2
- package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/workflow.md +3 -3
- package/src/bmm-skills/module-help.csv +30 -0
- package/src/{core/skills/bmad-advanced-elicitation/workflow.md → core-skills/bmad-advanced-elicitation/SKILL.md} +3 -1
- package/src/{core/skills/bmad-editorial-review-prose/workflow.md → core-skills/bmad-editorial-review-prose/SKILL.md} +5 -0
- package/src/{core/skills/bmad-editorial-review-structure/workflow.md → core-skills/bmad-editorial-review-structure/SKILL.md} +5 -0
- package/src/core-skills/bmad-help/SKILL.md +73 -0
- package/src/{core/skills/bmad-index-docs/workflow.md → core-skills/bmad-index-docs/SKILL.md} +5 -0
- package/src/{core/skills/bmad-review-adversarial-general/workflow.md → core-skills/bmad-review-adversarial-general/SKILL.md} +5 -0
- package/src/{core/skills/bmad-review-edge-case-hunter/workflow.md → core-skills/bmad-review-edge-case-hunter/SKILL.md} +5 -0
- package/src/{core/skills/bmad-shard-doc/workflow.md → core-skills/bmad-shard-doc/SKILL.md} +5 -0
- package/src/core-skills/module-help.csv +11 -0
- package/tools/bmad-npx-wrapper.js +2 -2
- package/tools/cli/commands/install.js +1 -8
- package/tools/cli/external-official-modules.yaml +1 -1
- package/tools/cli/installers/lib/core/config-collector.js +110 -23
- package/tools/cli/installers/lib/core/dependency-resolver.js +11 -11
- package/tools/cli/installers/lib/core/installer.js +4 -214
- package/tools/cli/installers/lib/core/manifest-generator.js +122 -833
- package/tools/cli/installers/lib/core/manifest.js +2 -2
- package/tools/cli/installers/lib/custom/handler.js +1 -247
- package/tools/cli/installers/lib/ide/_base-ide.js +0 -16
- package/tools/cli/installers/lib/ide/_config-driven.js +13 -168
- package/tools/cli/installers/lib/ide/manager.js +2 -7
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +0 -1
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +27 -0
- package/tools/cli/installers/lib/ide/shared/skill-manifest.js +1 -19
- package/tools/cli/installers/lib/modules/manager.js +12 -459
- package/tools/cli/lib/project-root.js +5 -5
- package/tools/cli/lib/ui.js +0 -19
- package/tools/skill-validator.md +52 -22
- package/tools/validate-skills.js +736 -0
- package/src/bmm/data/project-context-template.md +0 -26
- package/src/bmm/module-help.csv +0 -32
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +0 -6
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/product-brief.template.md +0 -10
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01-init.md +0 -170
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01b-continue.md +0 -158
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-02-vision.md +0 -193
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-03-users.md +0 -196
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-04-metrics.md +0 -199
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-05-scope.md +0 -213
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-06-complete.md +0 -159
- package/src/bmm/workflows/1-analysis/bmad-create-product-brief/workflow.md +0 -55
- package/src/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +0 -182
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +0 -237
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +0 -249
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +0 -259
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +0 -177
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +0 -476
- package/src/bmm/workflows/1-analysis/research/research.template.md +0 -29
- package/src/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +0 -41
- package/src/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +0 -38
- package/src/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +0 -6
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-01-mode-detection.md +0 -169
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-02-context-gathering.md +0 -114
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-03-execute.md +0 -107
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-04-self-check.md +0 -107
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-05-adversarial-review.md +0 -94
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-06-resolve-findings.md +0 -144
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/workflow.md +0 -38
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +0 -6
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +0 -1
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-01-understand.md +0 -185
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-02-investigate.md +0 -140
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-03-generate.md +0 -123
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-04-review.md +0 -195
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/tech-spec-template.md +0 -74
- package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/workflow.md +0 -73
- package/src/core/module-help.csv +0 -11
- package/src/core/skills/bmad-advanced-elicitation/SKILL.md +0 -6
- package/src/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-distillator/bmad-skill-manifest.yaml +0 -15
- package/src/core/skills/bmad-editorial-review-prose/SKILL.md +0 -6
- package/src/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-editorial-review-structure/SKILL.md +0 -6
- package/src/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-help/SKILL.md +0 -6
- package/src/core/skills/bmad-help/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-help/workflow.md +0 -88
- package/src/core/skills/bmad-index-docs/SKILL.md +0 -6
- package/src/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-init/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-review-adversarial-general/SKILL.md +0 -6
- package/src/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-review-edge-case-hunter/SKILL.md +0 -6
- package/src/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +0 -1
- package/src/core/skills/bmad-shard-doc/SKILL.md +0 -6
- package/src/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +0 -1
- package/src/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +0 -1
- package/src/utility/agent-components/activation-rules.txt +0 -6
- package/src/utility/agent-components/activation-steps.txt +0 -14
- package/src/utility/agent-components/agent-command-header.md +0 -1
- package/src/utility/agent-components/agent.customize.template.yaml +0 -41
- package/src/utility/agent-components/handler-action.txt +0 -4
- package/src/utility/agent-components/handler-data.txt +0 -5
- package/src/utility/agent-components/handler-exec.txt +0 -6
- package/src/utility/agent-components/handler-multi.txt +0 -13
- package/src/utility/agent-components/handler-tmpl.txt +0 -5
- package/src/utility/agent-components/menu-handlers.txt +0 -6
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +0 -368
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +0 -179
- package/tools/cli/lib/activation-builder.js +0 -165
- package/tools/cli/lib/agent/compiler.js +0 -516
- package/tools/cli/lib/agent/installer.js +0 -680
- package/tools/cli/lib/agent/template-engine.js +0 -152
- package/tools/cli/lib/agent-analyzer.js +0 -97
- package/tools/cli/lib/agent-party-generator.js +0 -194
- package/tools/cli/lib/xml-handler.js +0 -177
- package/tools/cli/lib/xml-to-markdown.js +0 -82
- package/tools/cli/lib/yaml-xml-builder.js +0 -570
- package/tools/schema/agent.js +0 -489
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-analyst/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/explain-concept.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/mermaid-gen.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/validate-doc.md +0 -0
- /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/write-document.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/documentation-requirements.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/instructions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/deep-dive-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/index-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/project-overview-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/project-scan-report-schema.json +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/source-tree-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/deep-dive-instructions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/deep-dive-workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/full-scan-instructions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/full-scan-workflow.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/artifact-analyzer.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/opportunity-reviewer.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/skeptic-reviewer.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/web-researcher.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/bmad-manifest.json +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/contextual-discovery.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/draft-and-review.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/finalize.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/guided-elicitation.md +0 -0
- /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/resources/brief-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/research.template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/research.template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/research.template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/workflow.md +0 -0
- /package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-pm/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-ux-designer/SKILL.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/SKILL.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/domain-complexity.csv +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/prd-purpose.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/project-types.csv +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-01-init.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-01b-continue.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02-discovery.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02b-vision.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-03-success.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-04-journeys.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-05-domain.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-06-innovation.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-07-project-type.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-08-scoping.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-09-functional.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-11-polish.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-12-complete.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/templates/prd-template.md +0 -0
- /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-01b-continue.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-02-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-03-core-experience.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-05-inspiration.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-06-design-system.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-09-design-directions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/ux-design-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/SKILL.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/domain-complexity.csv +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/prd-purpose.md +0 -0
- /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/project-types.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/workflow.md +0 -0
- /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/domain-complexity.csv +0 -0
- /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/prd-purpose.md +0 -0
- /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/project-types.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/workflow-validate-prd.md +0 -0
- /package/src/{bmm/agents → bmm-skills/3-solutioning}/bmad-agent-architect/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/architecture-decision-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/data/domain-complexity.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/data/project-types.csv +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-01-init.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-01b-continue.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-02-context.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-03-starter.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-04-decisions.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-05-patterns.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-06-structure.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-07-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-08-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/templates/epics-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/project-context-template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-01-discover.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-02-generate.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-03-complete.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/workflow.md +0 -0
- /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-dev/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-qa/SKILL.md +0 -0
- /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-sm/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/discover-inputs.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/template.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/workflow.md +0 -0
- /package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-04-review.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-retrospective/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-retrospective/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/checklist.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/workflow.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-status/SKILL.md +0 -0
- /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-status/workflow.md +0 -0
- /package/src/{bmm → bmm-skills}/module.yaml +0 -0
- /package/src/{core/skills → core-skills}/bmad-advanced-elicitation/methods.csv +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/brain-methods.csv +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-01-session-setup.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-01b-continue.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02a-user-selected.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02c-random-selection.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-03-technique-execution.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-04-idea-organization.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/template.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-brainstorming/workflow.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/agents/distillate-compressor.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/agents/round-trip-reconstructor.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/resources/compression-rules.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/resources/distillate-format-reference.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/resources/splitting-strategy.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/scripts/analyze_sources.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/resources/core-module.yaml +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/scripts/bmad_init.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-init/scripts/tests/test_bmad_init.py +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/SKILL.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-01-agent-loading.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-03-graceful-exit.md +0 -0
- /package/src/{core/skills → core-skills}/bmad-party-mode/workflow.md +0 -0
- /package/src/{core → core-skills}/module.yaml +0 -0
|
@@ -2,22 +2,18 @@ const path = require('node:path');
|
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const yaml = require('yaml');
|
|
4
4
|
const prompts = require('../../../lib/prompts');
|
|
5
|
-
const { XmlHandler } = require('../../../lib/xml-handler');
|
|
6
5
|
const { getProjectRoot, getSourcePath, getModulePath } = require('../../../lib/project-root');
|
|
7
|
-
const { filterCustomizationData } = require('../../../lib/agent/compiler');
|
|
8
6
|
const { ExternalModuleManager } = require('./external-manager');
|
|
9
7
|
const { BMAD_FOLDER_NAME } = require('../ide/shared/path-utils');
|
|
10
8
|
|
|
11
9
|
/**
|
|
12
10
|
* Manages the installation, updating, and removal of BMAD modules.
|
|
13
|
-
* Handles module discovery, dependency resolution, configuration processing
|
|
14
|
-
* and agent file management including XML activation block injection.
|
|
11
|
+
* Handles module discovery, dependency resolution, and configuration processing.
|
|
15
12
|
*
|
|
16
13
|
* @class ModuleManager
|
|
17
14
|
* @requires fs-extra
|
|
18
15
|
* @requires yaml
|
|
19
16
|
* @requires prompts
|
|
20
|
-
* @requires XmlHandler
|
|
21
17
|
*
|
|
22
18
|
* @example
|
|
23
19
|
* const manager = new ModuleManager();
|
|
@@ -26,7 +22,6 @@ const { BMAD_FOLDER_NAME } = require('../ide/shared/path-utils');
|
|
|
26
22
|
*/
|
|
27
23
|
class ModuleManager {
|
|
28
24
|
constructor(options = {}) {
|
|
29
|
-
this.xmlHandler = new XmlHandler();
|
|
30
25
|
this.bmadFolderName = BMAD_FOLDER_NAME; // Default, can be overridden
|
|
31
26
|
this.customModulePaths = new Map(); // Initialize custom module paths
|
|
32
27
|
this.externalModuleManager = new ExternalModuleManager(); // For external official modules
|
|
@@ -88,106 +83,9 @@ class ModuleManager {
|
|
|
88
83
|
}
|
|
89
84
|
}
|
|
90
85
|
|
|
91
|
-
/**
|
|
92
|
-
* Copy sidecar directory to _bmad/_memory location with update-safe handling
|
|
93
|
-
* @param {string} sourceSidecarPath - Source sidecar directory path
|
|
94
|
-
* @param {string} agentName - Name of the agent (for naming)
|
|
95
|
-
* @param {string} bmadMemoryPath - This should ALWAYS be _bmad/_memory
|
|
96
|
-
* @param {boolean} isUpdate - Whether this is an update (default: false)
|
|
97
|
-
* @param {string} bmadDir - BMAD installation directory
|
|
98
|
-
* @param {Object} installer - Installer instance for file tracking
|
|
99
|
-
*/
|
|
100
|
-
async copySidecarToMemory(sourceSidecarPath, agentName, bmadMemoryPath, isUpdate = false, bmadDir = null, installer = null) {
|
|
101
|
-
const crypto = require('node:crypto');
|
|
102
|
-
const sidecarTargetDir = path.join(bmadMemoryPath, `${agentName}-sidecar`);
|
|
103
|
-
|
|
104
|
-
// Ensure target directory exists
|
|
105
|
-
await fs.ensureDir(bmadMemoryPath);
|
|
106
|
-
await fs.ensureDir(sidecarTargetDir);
|
|
107
|
-
|
|
108
|
-
// Get existing files manifest for update checking
|
|
109
|
-
let existingFilesManifest = [];
|
|
110
|
-
if (isUpdate && installer) {
|
|
111
|
-
existingFilesManifest = await installer.readFilesManifest(bmadDir);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Build map of existing sidecar files with their hashes
|
|
115
|
-
const existingSidecarFiles = new Map();
|
|
116
|
-
for (const fileEntry of existingFilesManifest) {
|
|
117
|
-
if (fileEntry.path && fileEntry.path.includes(`${agentName}-sidecar/`)) {
|
|
118
|
-
existingSidecarFiles.set(fileEntry.path, fileEntry.hash);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Get all files in source sidecar
|
|
123
|
-
const sourceFiles = await this.getFileList(sourceSidecarPath);
|
|
124
|
-
|
|
125
|
-
for (const file of sourceFiles) {
|
|
126
|
-
const sourceFilePath = path.join(sourceSidecarPath, file);
|
|
127
|
-
const targetFilePath = path.join(sidecarTargetDir, file);
|
|
128
|
-
|
|
129
|
-
// Calculate current source file hash
|
|
130
|
-
const sourceHash = crypto
|
|
131
|
-
.createHash('sha256')
|
|
132
|
-
.update(await fs.readFile(sourceFilePath))
|
|
133
|
-
.digest('hex');
|
|
134
|
-
|
|
135
|
-
// Path relative to bmad directory
|
|
136
|
-
const relativeToBmad = path.join('_memory', `${agentName}-sidecar`, file);
|
|
137
|
-
|
|
138
|
-
if (isUpdate && (await fs.pathExists(targetFilePath))) {
|
|
139
|
-
// Calculate current target file hash
|
|
140
|
-
const currentTargetHash = crypto
|
|
141
|
-
.createHash('sha256')
|
|
142
|
-
.update(await fs.readFile(targetFilePath))
|
|
143
|
-
.digest('hex');
|
|
144
|
-
|
|
145
|
-
// Get the last known hash from files-manifest
|
|
146
|
-
const lastKnownHash = existingSidecarFiles.get(relativeToBmad);
|
|
147
|
-
|
|
148
|
-
if (lastKnownHash) {
|
|
149
|
-
// We have a record of this file
|
|
150
|
-
if (currentTargetHash === lastKnownHash) {
|
|
151
|
-
// File hasn't been modified by user, safe to update
|
|
152
|
-
await this.copyFileWithPlaceholderReplacement(sourceFilePath, targetFilePath, true);
|
|
153
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
154
|
-
await prompts.log.message(` Updated sidecar file: ${relativeToBmad}`);
|
|
155
|
-
}
|
|
156
|
-
} else {
|
|
157
|
-
// User has modified the file, preserve it
|
|
158
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
159
|
-
await prompts.log.message(` Preserving user-modified file: ${relativeToBmad}`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
} else {
|
|
163
|
-
// First time seeing this file in manifest, copy it
|
|
164
|
-
await this.copyFileWithPlaceholderReplacement(sourceFilePath, targetFilePath, true);
|
|
165
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
166
|
-
await prompts.log.message(` Added new sidecar file: ${relativeToBmad}`);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
} else {
|
|
170
|
-
// New installation
|
|
171
|
-
await this.copyFileWithPlaceholderReplacement(sourceFilePath, targetFilePath, true);
|
|
172
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
173
|
-
await prompts.log.message(` Copied sidecar file: ${relativeToBmad}`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// Track the file in the installer's file tracking system
|
|
178
|
-
if (installer && installer.installedFiles) {
|
|
179
|
-
installer.installedFiles.add(targetFilePath);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Return list of files that were processed
|
|
184
|
-
const processedFiles = sourceFiles.map((file) => path.join('_memory', `${agentName}-sidecar`, file));
|
|
185
|
-
return processedFiles;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
86
|
/**
|
|
189
87
|
* List all available modules (excluding core which is always installed)
|
|
190
|
-
* bmm is the only built-in module, directly under src/bmm
|
|
88
|
+
* bmm is the only built-in module, directly under src/bmm-skills
|
|
191
89
|
* All other modules come from external-official-modules.yaml
|
|
192
90
|
* @returns {Object} Object with modules array and customModules array
|
|
193
91
|
*/
|
|
@@ -195,10 +93,10 @@ class ModuleManager {
|
|
|
195
93
|
const modules = [];
|
|
196
94
|
const customModules = [];
|
|
197
95
|
|
|
198
|
-
// Add built-in bmm module (directly under src/bmm)
|
|
199
|
-
const bmmPath = getSourcePath('bmm');
|
|
96
|
+
// Add built-in bmm module (directly under src/bmm-skills)
|
|
97
|
+
const bmmPath = getSourcePath('bmm-skills');
|
|
200
98
|
if (await fs.pathExists(bmmPath)) {
|
|
201
|
-
const bmmInfo = await this.getModuleInfo(bmmPath, 'bmm', 'src/bmm');
|
|
99
|
+
const bmmInfo = await this.getModuleInfo(bmmPath, 'bmm', 'src/bmm-skills');
|
|
202
100
|
if (bmmInfo) {
|
|
203
101
|
modules.push(bmmInfo);
|
|
204
102
|
}
|
|
@@ -251,7 +149,8 @@ class ModuleManager {
|
|
|
251
149
|
}
|
|
252
150
|
|
|
253
151
|
// Mark as custom if it's using custom.yaml OR if it's outside src/bmm or src/core
|
|
254
|
-
const isCustomSource =
|
|
152
|
+
const isCustomSource =
|
|
153
|
+
sourceDescription !== 'src/bmm-skills' && sourceDescription !== 'src/core-skills' && sourceDescription !== 'src/modules';
|
|
255
154
|
const moduleInfo = {
|
|
256
155
|
id: defaultName,
|
|
257
156
|
path: modulePath,
|
|
@@ -300,9 +199,9 @@ class ModuleManager {
|
|
|
300
199
|
return this.customModulePaths.get(moduleCode);
|
|
301
200
|
}
|
|
302
201
|
|
|
303
|
-
// Check for built-in bmm module (directly under src/bmm)
|
|
202
|
+
// Check for built-in bmm module (directly under src/bmm-skills)
|
|
304
203
|
if (moduleCode === 'bmm') {
|
|
305
|
-
const bmmPath = getSourcePath('bmm');
|
|
204
|
+
const bmmPath = getSourcePath('bmm-skills');
|
|
306
205
|
if (await fs.pathExists(bmmPath)) {
|
|
307
206
|
return bmmPath;
|
|
308
207
|
}
|
|
@@ -558,19 +457,9 @@ class ModuleManager {
|
|
|
558
457
|
await fs.remove(targetPath);
|
|
559
458
|
}
|
|
560
459
|
|
|
561
|
-
// Vendor cross-module workflows BEFORE copying
|
|
562
|
-
// This reads source agent.yaml files and copies referenced workflows
|
|
563
|
-
await this.vendorCrossModuleWorkflows(sourcePath, targetPath, moduleName);
|
|
564
|
-
|
|
565
460
|
// Copy module files with filtering
|
|
566
461
|
await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback, options.moduleConfig);
|
|
567
462
|
|
|
568
|
-
// Compile any .agent.yaml files to .md format
|
|
569
|
-
await this.compileModuleAgents(sourcePath, targetPath, moduleName, bmadDir, options.installer);
|
|
570
|
-
|
|
571
|
-
// Process agent files to inject activation block
|
|
572
|
-
await this.processAgentFiles(targetPath, moduleName);
|
|
573
|
-
|
|
574
463
|
// Create directories declared in module.yaml (unless explicitly skipped)
|
|
575
464
|
if (!options.skipModuleInstaller) {
|
|
576
465
|
await this.createModuleDirectories(moduleName, bmadDir, options);
|
|
@@ -623,10 +512,6 @@ class ModuleManager {
|
|
|
623
512
|
} else {
|
|
624
513
|
// Selective update - preserve user modifications
|
|
625
514
|
await this.syncModule(sourcePath, targetPath);
|
|
626
|
-
|
|
627
|
-
// Recompile agents (#1133)
|
|
628
|
-
await this.compileModuleAgents(sourcePath, targetPath, moduleName, bmadDir, options.installer);
|
|
629
|
-
await this.processAgentFiles(targetPath, moduleName);
|
|
630
515
|
}
|
|
631
516
|
|
|
632
517
|
return {
|
|
@@ -717,9 +602,7 @@ class ModuleManager {
|
|
|
717
602
|
continue;
|
|
718
603
|
}
|
|
719
604
|
|
|
720
|
-
//
|
|
721
|
-
// But still allow other files in agent directories
|
|
722
|
-
const isInAgentDirectory = file.startsWith('agents/');
|
|
605
|
+
// Skip sidecar directories - these contain agent-specific assets not needed at install time
|
|
723
606
|
const isInSidecarDirectory = path
|
|
724
607
|
.dirname(file)
|
|
725
608
|
.split('/')
|
|
@@ -741,11 +624,6 @@ class ModuleManager {
|
|
|
741
624
|
continue;
|
|
742
625
|
}
|
|
743
626
|
|
|
744
|
-
// Skip .agent.yaml files - they will be compiled separately
|
|
745
|
-
if (file.endsWith('.agent.yaml')) {
|
|
746
|
-
continue;
|
|
747
|
-
}
|
|
748
|
-
|
|
749
627
|
const sourceFile = path.join(sourcePath, file);
|
|
750
628
|
const targetFile = path.join(targetPath, file);
|
|
751
629
|
|
|
@@ -772,236 +650,6 @@ class ModuleManager {
|
|
|
772
650
|
}
|
|
773
651
|
}
|
|
774
652
|
|
|
775
|
-
/**
|
|
776
|
-
* Compile .agent.yaml files to .md format in modules
|
|
777
|
-
* @param {string} sourcePath - Source module path
|
|
778
|
-
* @param {string} targetPath - Target module path
|
|
779
|
-
* @param {string} moduleName - Module name
|
|
780
|
-
* @param {string} bmadDir - BMAD installation directory
|
|
781
|
-
* @param {Object} installer - Installer instance for file tracking
|
|
782
|
-
*/
|
|
783
|
-
async compileModuleAgents(sourcePath, targetPath, moduleName, bmadDir, installer = null) {
|
|
784
|
-
const sourceAgentsPath = path.join(sourcePath, 'agents');
|
|
785
|
-
const targetAgentsPath = path.join(targetPath, 'agents');
|
|
786
|
-
const cfgAgentsDir = path.join(bmadDir, '_config', 'agents');
|
|
787
|
-
|
|
788
|
-
// Check if agents directory exists in source
|
|
789
|
-
if (!(await fs.pathExists(sourceAgentsPath))) {
|
|
790
|
-
return; // No agents to compile
|
|
791
|
-
}
|
|
792
|
-
|
|
793
|
-
// Get all agent YAML files recursively
|
|
794
|
-
const agentFiles = await this.findAgentFiles(sourceAgentsPath);
|
|
795
|
-
|
|
796
|
-
for (const agentFile of agentFiles) {
|
|
797
|
-
if (!agentFile.endsWith('.agent.yaml')) continue;
|
|
798
|
-
|
|
799
|
-
const relativePath = path.relative(sourceAgentsPath, agentFile).split(path.sep).join('/');
|
|
800
|
-
const targetDir = path.join(targetAgentsPath, path.dirname(relativePath));
|
|
801
|
-
|
|
802
|
-
await fs.ensureDir(targetDir);
|
|
803
|
-
|
|
804
|
-
const agentName = path.basename(agentFile, '.agent.yaml');
|
|
805
|
-
const sourceYamlPath = agentFile;
|
|
806
|
-
const targetMdPath = path.join(targetDir, `${agentName}.md`);
|
|
807
|
-
const customizePath = path.join(cfgAgentsDir, `${moduleName}-${agentName}.customize.yaml`);
|
|
808
|
-
|
|
809
|
-
// Read and compile the YAML
|
|
810
|
-
try {
|
|
811
|
-
const yamlContent = await fs.readFile(sourceYamlPath, 'utf8');
|
|
812
|
-
const { compileAgent } = require('../../../lib/agent/compiler');
|
|
813
|
-
|
|
814
|
-
// Create customize template if it doesn't exist
|
|
815
|
-
if (!(await fs.pathExists(customizePath))) {
|
|
816
|
-
const { getSourcePath } = require('../../../lib/project-root');
|
|
817
|
-
const genericTemplatePath = getSourcePath('utility', 'agent-components', 'agent.customize.template.yaml');
|
|
818
|
-
if (await fs.pathExists(genericTemplatePath)) {
|
|
819
|
-
await this.copyFileWithPlaceholderReplacement(genericTemplatePath, customizePath);
|
|
820
|
-
// Only show customize creation in verbose mode
|
|
821
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
822
|
-
await prompts.log.message(` Created customize: ${moduleName}-${agentName}.customize.yaml`);
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
// Store original hash for modification detection
|
|
826
|
-
const crypto = require('node:crypto');
|
|
827
|
-
const customizeContent = await fs.readFile(customizePath, 'utf8');
|
|
828
|
-
const originalHash = crypto.createHash('sha256').update(customizeContent).digest('hex');
|
|
829
|
-
|
|
830
|
-
// Store in main manifest
|
|
831
|
-
const manifestPath = path.join(bmadDir, '_config', 'manifest.yaml');
|
|
832
|
-
let manifestData = {};
|
|
833
|
-
if (await fs.pathExists(manifestPath)) {
|
|
834
|
-
const manifestContent = await fs.readFile(manifestPath, 'utf8');
|
|
835
|
-
const yaml = require('yaml');
|
|
836
|
-
manifestData = yaml.parse(manifestContent);
|
|
837
|
-
}
|
|
838
|
-
if (!manifestData.agentCustomizations) {
|
|
839
|
-
manifestData.agentCustomizations = {};
|
|
840
|
-
}
|
|
841
|
-
manifestData.agentCustomizations[path.relative(bmadDir, customizePath)] = originalHash;
|
|
842
|
-
|
|
843
|
-
// Write back to manifest
|
|
844
|
-
const yaml = require('yaml');
|
|
845
|
-
// Clean the manifest data to remove any non-serializable values
|
|
846
|
-
const cleanManifestData = structuredClone(manifestData);
|
|
847
|
-
|
|
848
|
-
const updatedContent = yaml.stringify(cleanManifestData, {
|
|
849
|
-
indent: 2,
|
|
850
|
-
lineWidth: 0,
|
|
851
|
-
});
|
|
852
|
-
await fs.writeFile(manifestPath, updatedContent, 'utf8');
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
|
|
856
|
-
// Check for customizations and build answers object
|
|
857
|
-
let customizedFields = [];
|
|
858
|
-
let answers = {};
|
|
859
|
-
if (await fs.pathExists(customizePath)) {
|
|
860
|
-
const customizeContent = await fs.readFile(customizePath, 'utf8');
|
|
861
|
-
const customizeData = yaml.parse(customizeContent);
|
|
862
|
-
customizedFields = customizeData.customized_fields || [];
|
|
863
|
-
|
|
864
|
-
// Build answers object from customizations
|
|
865
|
-
if (customizeData.persona) {
|
|
866
|
-
answers.persona = customizeData.persona;
|
|
867
|
-
}
|
|
868
|
-
if (customizeData.agent?.metadata) {
|
|
869
|
-
const filteredMetadata = filterCustomizationData(customizeData.agent.metadata);
|
|
870
|
-
if (Object.keys(filteredMetadata).length > 0) {
|
|
871
|
-
Object.assign(answers, { metadata: filteredMetadata });
|
|
872
|
-
}
|
|
873
|
-
}
|
|
874
|
-
if (customizeData.critical_actions && customizeData.critical_actions.length > 0) {
|
|
875
|
-
answers.critical_actions = customizeData.critical_actions;
|
|
876
|
-
}
|
|
877
|
-
if (customizeData.memories && customizeData.memories.length > 0) {
|
|
878
|
-
answers.memories = customizeData.memories;
|
|
879
|
-
}
|
|
880
|
-
if (customizeData.menu && customizeData.menu.length > 0) {
|
|
881
|
-
answers.menu = customizeData.menu;
|
|
882
|
-
}
|
|
883
|
-
if (customizeData.prompts && customizeData.prompts.length > 0) {
|
|
884
|
-
answers.prompts = customizeData.prompts;
|
|
885
|
-
}
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
// Check if agent has sidecar
|
|
889
|
-
let hasSidecar = false;
|
|
890
|
-
try {
|
|
891
|
-
const agentYaml = yaml.parse(yamlContent);
|
|
892
|
-
hasSidecar = agentYaml?.agent?.metadata?.hasSidecar === true;
|
|
893
|
-
} catch {
|
|
894
|
-
// Continue without sidecar processing
|
|
895
|
-
}
|
|
896
|
-
|
|
897
|
-
// Compile with customizations if any
|
|
898
|
-
const { xml } = await compileAgent(yamlContent, answers, agentName, relativePath, { config: this.coreConfig || {} });
|
|
899
|
-
|
|
900
|
-
// Write the compiled agent
|
|
901
|
-
await fs.writeFile(targetMdPath, xml, 'utf8');
|
|
902
|
-
|
|
903
|
-
// Handle sidecar copying if present
|
|
904
|
-
if (hasSidecar) {
|
|
905
|
-
// Get the agent's directory to look for sidecar
|
|
906
|
-
const agentDir = path.dirname(agentFile);
|
|
907
|
-
const sidecarDirName = `${agentName}-sidecar`;
|
|
908
|
-
const sourceSidecarPath = path.join(agentDir, sidecarDirName);
|
|
909
|
-
|
|
910
|
-
// Check if sidecar directory exists
|
|
911
|
-
if (await fs.pathExists(sourceSidecarPath)) {
|
|
912
|
-
// Memory is always in _bmad/_memory
|
|
913
|
-
const bmadMemoryPath = path.join(bmadDir, '_memory');
|
|
914
|
-
|
|
915
|
-
// Determine if this is an update (by checking if agent already exists)
|
|
916
|
-
const isUpdate = await fs.pathExists(targetMdPath);
|
|
917
|
-
|
|
918
|
-
// Copy sidecar to memory location with update-safe handling
|
|
919
|
-
const copiedFiles = await this.copySidecarToMemory(sourceSidecarPath, agentName, bmadMemoryPath, isUpdate, bmadDir, installer);
|
|
920
|
-
|
|
921
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true' && copiedFiles.length > 0) {
|
|
922
|
-
await prompts.log.message(` Sidecar files processed: ${copiedFiles.length} files`);
|
|
923
|
-
}
|
|
924
|
-
} else if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
925
|
-
await prompts.log.warn(` Agent marked as having sidecar but ${sidecarDirName} directory not found`);
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
|
|
929
|
-
// Copy any non-sidecar files from agent directory (e.g., foo.md)
|
|
930
|
-
const agentDir = path.dirname(agentFile);
|
|
931
|
-
const agentEntries = await fs.readdir(agentDir, { withFileTypes: true });
|
|
932
|
-
|
|
933
|
-
for (const entry of agentEntries) {
|
|
934
|
-
if (entry.isFile() && !entry.name.endsWith('.agent.yaml') && !entry.name.endsWith('.md')) {
|
|
935
|
-
// Copy additional files (like foo.md) to the agent target directory
|
|
936
|
-
const sourceFile = path.join(agentDir, entry.name);
|
|
937
|
-
const targetFile = path.join(targetDir, entry.name);
|
|
938
|
-
await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile);
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
|
-
|
|
942
|
-
// Only show compilation details in verbose mode
|
|
943
|
-
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
944
|
-
await prompts.log.message(
|
|
945
|
-
` Compiled agent: ${agentName} -> ${path.relative(targetPath, targetMdPath)}${hasSidecar ? ' (with sidecar)' : ''}`,
|
|
946
|
-
);
|
|
947
|
-
}
|
|
948
|
-
} catch (error) {
|
|
949
|
-
await prompts.log.warn(` Failed to compile agent ${agentName}: ${error.message}`);
|
|
950
|
-
}
|
|
951
|
-
}
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
/**
|
|
955
|
-
* Find all .agent.yaml files recursively in a directory
|
|
956
|
-
* @param {string} dir - Directory to search
|
|
957
|
-
* @returns {Array} List of .agent.yaml file paths
|
|
958
|
-
*/
|
|
959
|
-
async findAgentFiles(dir) {
|
|
960
|
-
const agentFiles = [];
|
|
961
|
-
|
|
962
|
-
async function searchDirectory(searchDir) {
|
|
963
|
-
const entries = await fs.readdir(searchDir, { withFileTypes: true });
|
|
964
|
-
|
|
965
|
-
for (const entry of entries) {
|
|
966
|
-
const fullPath = path.join(searchDir, entry.name);
|
|
967
|
-
|
|
968
|
-
if (entry.isFile() && entry.name.endsWith('.agent.yaml')) {
|
|
969
|
-
agentFiles.push(fullPath);
|
|
970
|
-
} else if (entry.isDirectory()) {
|
|
971
|
-
await searchDirectory(fullPath);
|
|
972
|
-
}
|
|
973
|
-
}
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
await searchDirectory(dir);
|
|
977
|
-
return agentFiles;
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
/**
|
|
981
|
-
* Process agent files to inject activation block
|
|
982
|
-
* @param {string} modulePath - Path to installed module
|
|
983
|
-
* @param {string} moduleName - Module name
|
|
984
|
-
*/
|
|
985
|
-
async processAgentFiles(modulePath, moduleName) {
|
|
986
|
-
// const agentsPath = path.join(modulePath, 'agents');
|
|
987
|
-
// // Check if agents directory exists
|
|
988
|
-
// if (!(await fs.pathExists(agentsPath))) {
|
|
989
|
-
// return; // No agents to process
|
|
990
|
-
// }
|
|
991
|
-
// // Get all agent MD files recursively
|
|
992
|
-
// const agentFiles = await this.findAgentMdFiles(agentsPath);
|
|
993
|
-
// for (const agentFile of agentFiles) {
|
|
994
|
-
// if (!agentFile.endsWith('.md')) continue;
|
|
995
|
-
// let content = await fs.readFile(agentFile, 'utf8');
|
|
996
|
-
// // Check if content has agent XML and no activation block
|
|
997
|
-
// if (content.includes('<agent') && !content.includes('<activation')) {
|
|
998
|
-
// // Inject the activation block using XML handler
|
|
999
|
-
// content = this.xmlHandler.injectActivationSimple(content);
|
|
1000
|
-
// await fs.writeFile(agentFile, content, 'utf8');
|
|
1001
|
-
// }
|
|
1002
|
-
// }
|
|
1003
|
-
}
|
|
1004
|
-
|
|
1005
653
|
/**
|
|
1006
654
|
* Find all .md agent files recursively in a directory
|
|
1007
655
|
* @param {string} dir - Directory to search
|
|
@@ -1028,101 +676,6 @@ class ModuleManager {
|
|
|
1028
676
|
return agentFiles;
|
|
1029
677
|
}
|
|
1030
678
|
|
|
1031
|
-
/**
|
|
1032
|
-
* Vendor cross-module workflows referenced in agent files
|
|
1033
|
-
* Scans SOURCE agent.yaml files for workflow-install and copies workflows to destination
|
|
1034
|
-
* @param {string} sourcePath - Source module path
|
|
1035
|
-
* @param {string} targetPath - Target module path (destination)
|
|
1036
|
-
* @param {string} moduleName - Module name being installed
|
|
1037
|
-
*/
|
|
1038
|
-
async vendorCrossModuleWorkflows(sourcePath, targetPath, moduleName) {
|
|
1039
|
-
const sourceAgentsPath = path.join(sourcePath, 'agents');
|
|
1040
|
-
|
|
1041
|
-
// Check if source agents directory exists
|
|
1042
|
-
if (!(await fs.pathExists(sourceAgentsPath))) {
|
|
1043
|
-
return; // No agents to process
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
|
-
// Get all agent YAML files from source
|
|
1047
|
-
const agentFiles = await fs.readdir(sourceAgentsPath);
|
|
1048
|
-
const yamlFiles = agentFiles.filter((f) => f.endsWith('.agent.yaml') || f.endsWith('.yaml'));
|
|
1049
|
-
|
|
1050
|
-
if (yamlFiles.length === 0) {
|
|
1051
|
-
return; // No YAML agent files
|
|
1052
|
-
}
|
|
1053
|
-
|
|
1054
|
-
let workflowsVendored = false;
|
|
1055
|
-
|
|
1056
|
-
for (const agentFile of yamlFiles) {
|
|
1057
|
-
const agentPath = path.join(sourceAgentsPath, agentFile);
|
|
1058
|
-
const agentYaml = yaml.parse(await fs.readFile(agentPath, 'utf8'));
|
|
1059
|
-
|
|
1060
|
-
// Check if agent has menu items with workflow-install
|
|
1061
|
-
const menuItems = agentYaml?.agent?.menu || [];
|
|
1062
|
-
const workflowInstallItems = menuItems.filter((item) => item['workflow-install']);
|
|
1063
|
-
|
|
1064
|
-
if (workflowInstallItems.length === 0) {
|
|
1065
|
-
continue; // No workflow-install in this agent
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
if (!workflowsVendored) {
|
|
1069
|
-
await prompts.log.info(`\n Vendoring cross-module workflows for ${moduleName}...`);
|
|
1070
|
-
workflowsVendored = true;
|
|
1071
|
-
}
|
|
1072
|
-
|
|
1073
|
-
await prompts.log.message(` Processing: ${agentFile}`);
|
|
1074
|
-
|
|
1075
|
-
for (const item of workflowInstallItems) {
|
|
1076
|
-
const sourceWorkflowPath = item.exec; // Where to copy FROM
|
|
1077
|
-
const installWorkflowPath = item['workflow-install']; // Where to copy TO
|
|
1078
|
-
|
|
1079
|
-
// Parse SOURCE workflow path
|
|
1080
|
-
// Example: {project-root}/_bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md
|
|
1081
|
-
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:_bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
1082
|
-
if (!sourceMatch) {
|
|
1083
|
-
await prompts.log.warn(` Could not parse workflow path: ${sourceWorkflowPath}`);
|
|
1084
|
-
continue;
|
|
1085
|
-
}
|
|
1086
|
-
|
|
1087
|
-
const [, sourceModule, sourceWorkflowSubPath] = sourceMatch;
|
|
1088
|
-
|
|
1089
|
-
// Parse INSTALL workflow path
|
|
1090
|
-
// Example: {project-root}/_bmad/bmgd/workflows/4-production/create-story/workflow.md
|
|
1091
|
-
const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:_bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
1092
|
-
if (!installMatch) {
|
|
1093
|
-
await prompts.log.warn(` Could not parse workflow-install path: ${installWorkflowPath}`);
|
|
1094
|
-
continue;
|
|
1095
|
-
}
|
|
1096
|
-
|
|
1097
|
-
const installWorkflowSubPath = installMatch[2];
|
|
1098
|
-
|
|
1099
|
-
const sourceModulePath = getModulePath(sourceModule);
|
|
1100
|
-
const actualSourceWorkflowPath = path.join(sourceModulePath, 'workflows', sourceWorkflowSubPath.replace(/\/workflow\.md$/, ''));
|
|
1101
|
-
|
|
1102
|
-
const actualDestWorkflowPath = path.join(targetPath, 'workflows', installWorkflowSubPath.replace(/\/workflow\.md$/, ''));
|
|
1103
|
-
|
|
1104
|
-
// Check if source workflow exists
|
|
1105
|
-
if (!(await fs.pathExists(actualSourceWorkflowPath))) {
|
|
1106
|
-
await prompts.log.warn(` Source workflow not found: ${actualSourceWorkflowPath}`);
|
|
1107
|
-
continue;
|
|
1108
|
-
}
|
|
1109
|
-
|
|
1110
|
-
// Copy the entire workflow folder
|
|
1111
|
-
await prompts.log.message(
|
|
1112
|
-
` Vendoring: ${sourceModule}/workflows/${sourceWorkflowSubPath.replace(/\/workflow\.md$/, '')} → ${moduleName}/workflows/${installWorkflowSubPath.replace(/\/workflow\.md$/, '')}`,
|
|
1113
|
-
);
|
|
1114
|
-
|
|
1115
|
-
await fs.ensureDir(path.dirname(actualDestWorkflowPath));
|
|
1116
|
-
// Copy the workflow directory recursively with placeholder replacement
|
|
1117
|
-
await this.copyDirectoryWithPlaceholderReplacement(actualSourceWorkflowPath, actualDestWorkflowPath);
|
|
1118
|
-
}
|
|
1119
|
-
}
|
|
1120
|
-
|
|
1121
|
-
if (workflowsVendored) {
|
|
1122
|
-
await prompts.log.success(` Workflow vendoring complete\n`);
|
|
1123
|
-
}
|
|
1124
|
-
}
|
|
1125
|
-
|
|
1126
679
|
/**
|
|
1127
680
|
* Create directories declared in module.yaml's `directories` key
|
|
1128
681
|
* This replaces the security-risky module installer pattern with declarative config
|
|
@@ -1141,10 +694,10 @@ class ModuleManager {
|
|
|
1141
694
|
const projectRoot = path.dirname(bmadDir);
|
|
1142
695
|
const emptyResult = { createdDirs: [], movedDirs: [], createdWdsFolders: [] };
|
|
1143
696
|
|
|
1144
|
-
// Special handling for core module - it's in src/core not src/modules
|
|
697
|
+
// Special handling for core module - it's in src/core-skills not src/modules
|
|
1145
698
|
let sourcePath;
|
|
1146
699
|
if (moduleName === 'core') {
|
|
1147
|
-
sourcePath = getSourcePath('core');
|
|
700
|
+
sourcePath = getSourcePath('core-skills');
|
|
1148
701
|
} else {
|
|
1149
702
|
sourcePath = await this.findModuleSource(moduleName, { silent: true });
|
|
1150
703
|
if (!sourcePath) {
|
|
@@ -16,7 +16,7 @@ function findProjectRoot(startPath = __dirname) {
|
|
|
16
16
|
try {
|
|
17
17
|
const pkg = fs.readJsonSync(packagePath);
|
|
18
18
|
// Check if this is the BMAD project
|
|
19
|
-
if (pkg.name === 'bmad-method' || fs.existsSync(path.join(currentPath, 'src', 'core'))) {
|
|
19
|
+
if (pkg.name === 'bmad-method' || fs.existsSync(path.join(currentPath, 'src', 'core-skills'))) {
|
|
20
20
|
return currentPath;
|
|
21
21
|
}
|
|
22
22
|
} catch {
|
|
@@ -24,8 +24,8 @@ function findProjectRoot(startPath = __dirname) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
// Also check for src/core as a marker
|
|
28
|
-
if (fs.existsSync(path.join(currentPath, 'src', 'core', 'agents'))) {
|
|
27
|
+
// Also check for src/core-skills as a marker
|
|
28
|
+
if (fs.existsSync(path.join(currentPath, 'src', 'core-skills', 'agents'))) {
|
|
29
29
|
return currentPath;
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -61,10 +61,10 @@ function getSourcePath(...segments) {
|
|
|
61
61
|
*/
|
|
62
62
|
function getModulePath(moduleName, ...segments) {
|
|
63
63
|
if (moduleName === 'core') {
|
|
64
|
-
return getSourcePath('core', ...segments);
|
|
64
|
+
return getSourcePath('core-skills', ...segments);
|
|
65
65
|
}
|
|
66
66
|
if (moduleName === 'bmm') {
|
|
67
|
-
return getSourcePath('bmm', ...segments);
|
|
67
|
+
return getSourcePath('bmm-skills', ...segments);
|
|
68
68
|
}
|
|
69
69
|
return getSourcePath('modules', moduleName, ...segments);
|
|
70
70
|
}
|
package/tools/cli/lib/ui.js
CHANGED
|
@@ -208,14 +208,6 @@ class UI {
|
|
|
208
208
|
});
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
// Add custom agent compilation option
|
|
212
|
-
if (installedVersion !== 'unknown') {
|
|
213
|
-
choices.push({
|
|
214
|
-
name: 'Recompile Agents (apply customizations only)',
|
|
215
|
-
value: 'compile-agents',
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
|
|
219
211
|
// Common actions
|
|
220
212
|
choices.push({ name: 'Modify BMAD Installation', value: 'update' });
|
|
221
213
|
|
|
@@ -291,17 +283,6 @@ class UI {
|
|
|
291
283
|
};
|
|
292
284
|
}
|
|
293
285
|
|
|
294
|
-
// Handle compile agents separately
|
|
295
|
-
if (actionType === 'compile-agents') {
|
|
296
|
-
// Only recompile agents with customizations, don't update any files
|
|
297
|
-
return {
|
|
298
|
-
actionType: 'compile-agents',
|
|
299
|
-
directory: confirmedDirectory,
|
|
300
|
-
customContent: { hasCustomContent: false },
|
|
301
|
-
skipPrompts: options.yes || false,
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
|
|
305
286
|
// If actionType === 'update', handle it with the new flow
|
|
306
287
|
// Return early with modify configuration
|
|
307
288
|
if (actionType === 'update') {
|