mdan-cli 2.5.1 → 2.5.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/.augment/code_review_guidelines.yaml +271 -0
- package/.claude/skills/bmad-os-audit-file-refs/SKILL.md +6 -0
- package/.claude/skills/bmad-os-audit-file-refs/prompts/instructions.md +59 -0
- package/.claude/skills/bmad-os-changelog-social/SKILL.md +177 -0
- package/.claude/skills/bmad-os-changelog-social/examples/discord-example.md +53 -0
- package/.claude/skills/bmad-os-changelog-social/examples/linkedin-example.md +49 -0
- package/.claude/skills/bmad-os-changelog-social/examples/twitter-example.md +55 -0
- package/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md +6 -0
- package/.claude/skills/bmad-os-diataxis-style-fix/prompts/instructions.md +229 -0
- package/.claude/skills/bmad-os-draft-changelog/SKILL.md +6 -0
- package/.claude/skills/bmad-os-draft-changelog/prompts/instructions.md +82 -0
- package/.claude/skills/bmad-os-gh-triage/SKILL.md +6 -0
- package/.claude/skills/bmad-os-gh-triage/prompts/agent-prompt.md +60 -0
- package/.claude/skills/bmad-os-gh-triage/prompts/instructions.md +74 -0
- package/.claude/skills/bmad-os-release-module/SKILL.md +6 -0
- package/.claude/skills/bmad-os-release-module/prompts/instructions.md +53 -0
- package/.claude/skills/bmad-os-review-pr/SKILL.md +6 -0
- package/.claude/skills/bmad-os-review-pr/prompts/instructions.md +231 -0
- package/.claude/skills/bmad-os-root-cause-analysis/SKILL.md +12 -0
- package/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md +74 -0
- package/.coderabbit.yaml +85 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- package/.github/FUNDING.yaml +15 -0
- package/.github/ISSUE_TEMPLATE/bug-report.yaml +124 -0
- package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
- package/.github/ISSUE_TEMPLATE/documentation.yaml +55 -0
- package/.github/ISSUE_TEMPLATE/feature-request.md +22 -0
- package/.github/ISSUE_TEMPLATE/issue.md +32 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- package/.github/scripts/discord-helpers.sh +34 -0
- package/.github/workflows/coderabbit-review.yaml +22 -0
- package/.github/workflows/discord.yaml +90 -0
- package/.github/workflows/docs.yaml +64 -0
- package/.github/workflows/quality.yaml +116 -0
- package/.husky/pre-commit +20 -0
- package/.markdownlint-cli2.yaml +41 -0
- package/.nvmrc +1 -0
- package/.prettierignore +12 -0
- package/.vscode/settings.json +96 -0
- package/AGENTS.md +227 -165
- package/AGENTS_LIST.md +946 -0
- package/ARCHITECTURE.md +590 -0
- package/CHANGELOG.md +1770 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +512 -0
- package/CONTRIBUTORS.md +32 -0
- package/INSTALL.md +246 -0
- package/LICENSE +30 -0
- package/README.md +133 -194
- package/RELEASE_NOTES.md +246 -0
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/USAGE.md +368 -0
- package/Wordmark.png +0 -0
- package/app/__init__.py +5 -0
- package/app/cis/agents/__init__.py +31 -0
- package/app/cis/agents/brainstorming-coach/__init__.py +3 -0
- package/app/cis/agents/brainstorming-coach/agent.py +162 -0
- package/app/cis/agents/brainstorming-coach/prompt.yaml +53 -0
- package/app/cis/agents/creative-problem-solver/__init__.py +3 -0
- package/app/cis/agents/creative-problem-solver/agent.py +233 -0
- package/app/cis/agents/creative-problem-solver/prompt.yaml +74 -0
- package/app/cis/agents/design-thinking-coach/__init__.py +3 -0
- package/app/cis/agents/design-thinking-coach/agent.py +241 -0
- package/app/cis/agents/design-thinking-coach/prompt.yaml +77 -0
- package/app/cis/agents/innovation-strategist/__init__.py +3 -0
- package/app/cis/agents/innovation-strategist/agent.py +271 -0
- package/app/cis/agents/innovation-strategist/prompt.yaml +70 -0
- package/app/cis/agents/presentation-master/__init__.py +3 -0
- package/app/cis/agents/presentation-master/agent.py +420 -0
- package/app/cis/agents/presentation-master/prompt.yaml +62 -0
- package/app/cis/agents/storyteller/__init__.py +3 -0
- package/app/cis/agents/storyteller/agent.py +303 -0
- package/app/cis/agents/storyteller/prompt.yaml +99 -0
- package/app/core/__init__.py +5 -0
- package/app/core/agents/__init__.py +5 -0
- package/app/core/agents/mdan-master/__init__.py +7 -0
- package/app/core/agents/mdan-master/agent.py +302 -0
- package/app/core/agents/mdan-master/prompt.yaml +105 -0
- package/app/mmb/agents/__init__.py +24 -0
- package/app/mmb/agents/agent-builder/__init__.py +5 -0
- package/app/mmb/agents/agent-builder/agent.py +261 -0
- package/app/mmb/agents/agent-builder/prompt.yaml +48 -0
- package/app/mmb/agents/module-builder/__init__.py +5 -0
- package/app/mmb/agents/module-builder/agent.py +299 -0
- package/app/mmb/agents/module-builder/prompt.yaml +50 -0
- package/app/mmb/agents/workflow-builder/__init__.py +5 -0
- package/app/mmb/agents/workflow-builder/agent.py +318 -0
- package/app/mmb/agents/workflow-builder/prompt.yaml +52 -0
- package/app/mmm/agents/__init__.py +48 -0
- package/app/mmm/agents/analyst/__init__.py +7 -0
- package/app/mmm/agents/analyst/agent.py +384 -0
- package/app/mmm/agents/analyst/prompt.yaml +62 -0
- package/app/mmm/agents/architect/__init__.py +7 -0
- package/app/mmm/agents/architect/agent.py +300 -0
- package/app/mmm/agents/architect/prompt.yaml +66 -0
- package/app/mmm/agents/dev/__init__.py +7 -0
- package/app/mmm/agents/dev/agent.py +285 -0
- package/app/mmm/agents/dev/prompt.yaml +62 -0
- package/app/mmm/agents/pm/__init__.py +7 -0
- package/app/mmm/agents/pm/agent.py +417 -0
- package/app/mmm/agents/pm/prompt.yaml +64 -0
- package/app/mmm/agents/qa/__init__.py +7 -0
- package/app/mmm/agents/qa/agent.py +267 -0
- package/app/mmm/agents/qa/prompt.yaml +67 -0
- package/app/mmm/agents/quick-flow-solo-dev/__init__.py +7 -0
- package/app/mmm/agents/quick-flow-solo-dev/agent.py +319 -0
- package/app/mmm/agents/quick-flow-solo-dev/prompt.yaml +60 -0
- package/app/mmm/agents/sm/__init__.py +7 -0
- package/app/mmm/agents/sm/agent.py +357 -0
- package/app/mmm/agents/sm/prompt.yaml +61 -0
- package/app/mmm/agents/tech-writer/__init__.py +7 -0
- package/app/mmm/agents/tech-writer/agent.py +420 -0
- package/app/mmm/agents/tech-writer/prompt.yaml +70 -0
- package/app/mmm/agents/ux-designer/__init__.py +14 -0
- package/app/mmm/agents/ux-designer/agent.py +412 -0
- package/app/mmm/agents/ux-designer/prompt.yaml +37 -0
- package/app/packs/__init__.py +32 -0
- package/app/packs/db-optimization/__init__.py +13 -0
- package/app/packs/db-optimization/agents/__init__.py +11 -0
- package/app/packs/db-optimization/agents/db-performance-analyst/__init__.py +5 -0
- package/app/packs/db-optimization/agents/db-performance-analyst/agent.py +559 -0
- package/app/packs/db-optimization/agents/db-performance-analyst/prompt.yaml +63 -0
- package/app/packs/db-optimization/agents/indexing-specialist/__init__.py +5 -0
- package/app/packs/db-optimization/agents/indexing-specialist/agent.py +713 -0
- package/app/packs/db-optimization/agents/indexing-specialist/prompt.yaml +92 -0
- package/app/packs/db-optimization/agents/query-optimizer/__init__.py +5 -0
- package/app/packs/db-optimization/agents/query-optimizer/agent.py +566 -0
- package/app/packs/db-optimization/agents/query-optimizer/prompt.yaml +74 -0
- package/app/packs/devops-azure/__init__.py +13 -0
- package/app/packs/devops-azure/agents/__init__.py +11 -0
- package/app/packs/devops-azure/agents/azure-specialist/__init__.py +5 -0
- package/app/packs/devops-azure/agents/azure-specialist/agent.py +584 -0
- package/app/packs/devops-azure/agents/azure-specialist/prompt.yaml +301 -0
- package/app/packs/devops-azure/agents/cicd-architect/__init__.py +5 -0
- package/app/packs/devops-azure/agents/cicd-architect/agent.py +665 -0
- package/app/packs/devops-azure/agents/cicd-architect/prompt.yaml +409 -0
- package/app/packs/devops-azure/agents/devops-engineer/__init__.py +5 -0
- package/app/packs/devops-azure/agents/devops-engineer/agent.py +545 -0
- package/app/packs/devops-azure/agents/devops-engineer/prompt.yaml +263 -0
- package/app/packs/fintech/__init__.py +13 -0
- package/app/packs/fintech/agents/__init__.py +11 -0
- package/app/packs/fintech/agents/compliance-officer/__init__.py +5 -0
- package/app/packs/fintech/agents/compliance-officer/agent.py +449 -0
- package/app/packs/fintech/agents/compliance-officer/prompt.yaml +135 -0
- package/app/packs/fintech/agents/financial-analyst/__init__.py +5 -0
- package/app/packs/fintech/agents/financial-analyst/agent.py +392 -0
- package/app/packs/fintech/agents/financial-analyst/prompt.yaml +143 -0
- package/app/packs/fintech/agents/risk-manager/__init__.py +5 -0
- package/app/packs/fintech/agents/risk-manager/agent.py +664 -0
- package/app/packs/fintech/agents/risk-manager/prompt.yaml +240 -0
- package/app/tea/agents/tea/__init__.py +9 -0
- package/app/tea/agents/tea/agent.py +689 -0
- package/app/tea/agents/tea/prompt.yaml +100 -0
- package/banner-bmad-method.png +0 -0
- package/docs/404.md +9 -0
- package/docs/_STYLE_GUIDE.md +370 -0
- package/docs/explanation/advanced-elicitation.md +49 -0
- package/docs/explanation/adversarial-review.md +59 -0
- package/docs/explanation/brainstorming.md +33 -0
- package/docs/explanation/established-projects-faq.md +50 -0
- package/docs/explanation/party-mode.md +59 -0
- package/docs/explanation/preventing-agent-conflicts.md +112 -0
- package/docs/explanation/project-context.md +157 -0
- package/docs/explanation/quick-flow.md +73 -0
- package/docs/explanation/why-solutioning-matters.md +77 -0
- package/docs/how-to/customize-bmad.md +172 -0
- package/docs/how-to/established-projects.md +117 -0
- package/docs/how-to/get-answers-about-bmad.md +134 -0
- package/docs/how-to/install-bmad.md +97 -0
- package/docs/how-to/non-interactive-installation.md +171 -0
- package/docs/how-to/project-context.md +136 -0
- package/docs/how-to/quick-fixes.md +123 -0
- package/docs/how-to/shard-large-documents.md +78 -0
- package/docs/how-to/upgrade-to-v6.md +97 -0
- package/docs/index.md +59 -0
- package/docs/reference/agents.md +28 -0
- package/docs/reference/commands.md +151 -0
- package/docs/reference/modules.md +76 -0
- package/docs/reference/testing.md +106 -0
- package/docs/reference/workflow-map.md +89 -0
- package/docs/roadmap.mdx +136 -0
- package/docs/tutorials/getting-started.md +286 -0
- package/eslint.config.mjs +141 -0
- package/package.json +106 -37
- package/prettier.config.mjs +32 -0
- package/prompts/cis/brainstorming-coach.yaml +53 -0
- package/prompts/cis/creative-problem-solver.yaml +74 -0
- package/prompts/cis/design-thinking-coach.yaml +77 -0
- package/prompts/cis/innovation-strategist.yaml +70 -0
- package/prompts/cis/presentation-master.yaml +62 -0
- package/prompts/cis/storyteller.yaml +99 -0
- package/prompts/core/mdan-master.yaml +105 -0
- package/prompts/mmb/agent-builder.yaml +48 -0
- package/prompts/mmb/module-builder.yaml +50 -0
- package/prompts/mmb/workflow-builder.yaml +52 -0
- package/prompts/mmm/analyst.yaml +62 -0
- package/prompts/mmm/architect.yaml +66 -0
- package/prompts/mmm/dev.yaml +62 -0
- package/prompts/mmm/pm.yaml +64 -0
- package/prompts/mmm/qa.yaml +67 -0
- package/prompts/mmm/quick-flow-solo-dev.yaml +60 -0
- package/prompts/mmm/sm.yaml +61 -0
- package/prompts/mmm/tech-writer.yaml +70 -0
- package/prompts/mmm/ux-designer.yaml +33 -0
- package/prompts/packs/db-optimization/db-performance-analyst.yaml +63 -0
- package/prompts/packs/db-optimization/indexing-specialist.yaml +92 -0
- package/prompts/packs/db-optimization/query-optimizer.yaml +74 -0
- package/prompts/packs/devops-azure/azure-specialist.yaml +301 -0
- package/prompts/packs/devops-azure/cicd-architect.yaml +409 -0
- package/prompts/packs/devops-azure/devops-engineer.yaml +263 -0
- package/prompts/packs/fintech/compliance-officer.yaml +135 -0
- package/prompts/packs/fintech/financial-analyst.yaml +143 -0
- package/prompts/packs/fintech/risk-manager.yaml +240 -0
- package/prompts/tea/tea.yaml +100 -0
- package/prompts.json +237 -0
- package/src/bmm/agents/analyst.agent.yaml +43 -0
- package/src/bmm/agents/architect.agent.yaml +29 -0
- package/src/bmm/agents/dev.agent.yaml +38 -0
- package/src/bmm/agents/pm.agent.yaml +44 -0
- package/src/bmm/agents/qa.agent.yaml +58 -0
- package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
- package/src/bmm/agents/sm.agent.yaml +37 -0
- package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
- package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +46 -0
- package/src/bmm/agents/ux-designer.agent.yaml +27 -0
- package/src/bmm/data/project-context-template.md +26 -0
- package/src/bmm/module-help.csv +31 -0
- package/src/bmm/module.yaml +50 -0
- package/src/bmm/teams/default-party.csv +20 -0
- package/src/bmm/teams/team-fullstack.yaml +12 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +444 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -0
- package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +487 -0
- package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
- package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
- package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +152 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +173 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +329 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
- package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
- package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -0
- package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
- package/src/bmm/workflows/4-implementation/correct-course/instructions.md +207 -0
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -0
- package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
- package/src/bmm/workflows/4-implementation/create-story/instructions.xml +346 -0
- package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -0
- package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
- package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -0
- package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
- package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -0
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +143 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +126 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
- package/src/bmm/workflows/document-project/checklist.md +245 -0
- package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/src/bmm/workflows/document-project/instructions.md +130 -0
- package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/src/bmm/workflows/document-project/workflow.yaml +22 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
- package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
- package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
- package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
- package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
- package/src/bmm/workflows/qa-generate-e2e-tests/checklist.md +33 -0
- package/src/bmm/workflows/qa-generate-e2e-tests/instructions.md +110 -0
- package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -0
- package/src/core/agents/bmad-master.agent.yaml +30 -0
- package/src/core/module-help.csv +9 -0
- package/src/core/module.yaml +25 -0
- package/src/core/tasks/editorial-review-prose.xml +102 -0
- package/src/core/tasks/editorial-review-structure.xml +208 -0
- package/src/core/tasks/help.md +86 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/review-adversarial-general.xml +49 -0
- package/src/core/tasks/shard-doc.xml +108 -0
- package/src/core/tasks/workflow.xml +235 -0
- package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/src/core/workflows/advanced-elicitation/workflow.xml +118 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/src/core/workflows/brainstorming/template.md +15 -0
- package/src/core/workflows/brainstorming/workflow.md +58 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
- package/src/core/workflows/party-mode/workflow.md +194 -0
- package/src/utility/agent-components/activation-rules.txt +6 -0
- package/src/utility/agent-components/activation-steps.txt +14 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/agent-components/agent.customize.template.yaml +41 -0
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-data.txt +5 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/test/README.md +295 -0
- package/test/adversarial-review-tests/README.md +56 -0
- package/test/adversarial-review-tests/sample-content.md +46 -0
- package/test/adversarial-review-tests/test-cases.yaml +103 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
- package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
- package/test/fixtures/file-refs-csv/invalid/all-empty-workflow.csv +3 -0
- package/test/fixtures/file-refs-csv/invalid/empty-data.csv +1 -0
- package/test/fixtures/file-refs-csv/invalid/no-workflow-column.csv +3 -0
- package/test/fixtures/file-refs-csv/invalid/unresolvable-vars.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/bmm-style.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/core-style.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/minimal.csv +2 -0
- package/test/test-agent-schema.js +387 -0
- package/test/test-cli-integration.sh +159 -0
- package/test/test-file-refs-csv.js +133 -0
- package/test/test-installation-components.js +212 -0
- package/test/test-rehype-plugins.mjs +1050 -0
- package/test/unit-test-schema.js +133 -0
- package/tests/run_all_tests.py +80 -0
- package/tests/scenarios/cis/brainstorming-coach.test.py +150 -0
- package/tests/scenarios/cis/creative-problem-solver.test.py +167 -0
- package/tests/scenarios/cis/design-thinking-coach.test.py +177 -0
- package/tests/scenarios/cis/innovation-strategist.test.py +191 -0
- package/tests/scenarios/cis/presentation-master.test.py +240 -0
- package/tests/scenarios/cis/storyteller.test.py +324 -0
- package/tests/scenarios/core/mdan-master.test.py +281 -0
- package/tests/scenarios/mmb/agent-builder.test.py +124 -0
- package/tests/scenarios/mmb/module-builder.test.py +124 -0
- package/tests/scenarios/mmb/workflow-builder.test.py +124 -0
- package/tests/scenarios/mmm/analyst.test.py +138 -0
- package/tests/scenarios/mmm/architect.test.py +138 -0
- package/tests/scenarios/mmm/dev.test.py +138 -0
- package/tests/scenarios/mmm/pm.test.py +138 -0
- package/tests/scenarios/mmm/qa.test.py +138 -0
- package/tests/scenarios/mmm/quick-flow-solo-dev.test.py +138 -0
- package/tests/scenarios/mmm/sm.test.py +138 -0
- package/tests/scenarios/mmm/tech-writer.test.py +138 -0
- package/tests/scenarios/mmm/ux-designer.test.py +294 -0
- package/tests/scenarios/packs/db-optimization/db-performance-analyst.test.py +108 -0
- package/tests/scenarios/packs/db-optimization/indexing-specialist.test.py +108 -0
- package/tests/scenarios/packs/db-optimization/query-optimizer.test.py +106 -0
- package/tests/scenarios/packs/devops-azure/azure-specialist.test.py +125 -0
- package/tests/scenarios/packs/devops-azure/cicd-architect.test.py +122 -0
- package/tests/scenarios/packs/devops-azure/devops-engineer.test.py +128 -0
- package/tests/scenarios/packs/fintech/compliance-officer.test.py +165 -0
- package/tests/scenarios/packs/fintech/financial-analyst.test.py +184 -0
- package/tests/scenarios/packs/fintech/risk-manager.test.py +171 -0
- package/tests/scenarios/tea/tea.test.py +346 -0
- package/tests/simple_cis_test.py +285 -0
- package/tests/simple_db_optimization_test.py +199 -0
- package/tests/simple_devops_test.py +193 -0
- package/tests/simple_fintech_test.py +205 -0
- package/tests/simple_mmb_test.py +103 -0
- package/tests/simple_mmm_test.py +159 -0
- package/tests/simple_tea_test.py +80 -0
- package/tests/simple_test.py +111 -0
- package/tests/simple_ux_designer_test.py +144 -0
- package/tests/validate_yaml.py +86 -0
- package/tools/bmad-npx-wrapper.js +38 -0
- package/tools/build-docs.mjs +463 -0
- package/tools/cli/README.md +60 -0
- package/tools/cli/bmad-cli.js +106 -0
- package/tools/cli/commands/install.js +87 -0
- package/tools/cli/commands/status.js +65 -0
- package/tools/cli/commands/uninstall.js +167 -0
- package/tools/cli/external-official-modules.yaml +53 -0
- package/tools/cli/installers/install-messages.yaml +39 -0
- package/tools/cli/installers/lib/core/config-collector.js +1285 -0
- package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +743 -0
- package/tools/cli/installers/lib/core/detector.js +223 -0
- package/tools/cli/installers/lib/core/ide-config-manager.js +157 -0
- package/tools/cli/installers/lib/core/installer.js +3162 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +1081 -0
- package/tools/cli/installers/lib/core/manifest.js +1038 -0
- package/tools/cli/installers/lib/custom/handler.js +358 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +665 -0
- package/tools/cli/installers/lib/ide/_config-driven.js +634 -0
- package/tools/cli/installers/lib/ide/codex.js +440 -0
- package/tools/cli/installers/lib/ide/github-copilot.js +699 -0
- package/tools/cli/installers/lib/ide/kilo.js +269 -0
- package/tools/cli/installers/lib/ide/manager.js +342 -0
- package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +243 -0
- package/tools/cli/installers/lib/ide/rovodev.js +257 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +180 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +174 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
- package/tools/cli/installers/lib/ide/shared/path-utils.js +299 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +366 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +318 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-task.md +10 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +10 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +11 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +11 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +7 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +13 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +13 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/.gitkeep +0 -0
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/message-loader.js +83 -0
- package/tools/cli/installers/lib/modules/external-manager.js +136 -0
- package/tools/cli/installers/lib/modules/manager.js +1498 -0
- package/tools/cli/lib/activation-builder.js +165 -0
- package/tools/cli/lib/agent/compiler.js +525 -0
- package/tools/cli/lib/agent/installer.js +680 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/agent-analyzer.js +109 -0
- package/tools/cli/lib/agent-party-generator.js +194 -0
- package/tools/cli/lib/cli-utils.js +182 -0
- package/tools/cli/lib/config.js +213 -0
- package/tools/cli/lib/file-ops.js +204 -0
- package/tools/cli/lib/platform-codes.js +116 -0
- package/tools/cli/lib/project-root.js +77 -0
- package/tools/cli/lib/prompts.js +809 -0
- package/tools/cli/lib/ui.js +1936 -0
- package/tools/cli/lib/xml-handler.js +177 -0
- package/tools/cli/lib/xml-to-markdown.js +82 -0
- package/tools/cli/lib/yaml-format.js +245 -0
- package/tools/cli/lib/yaml-xml-builder.js +587 -0
- package/tools/docs/_prompt-external-modules-page.md +59 -0
- package/tools/docs/fix-refs.md +91 -0
- package/tools/fix-doc-links.js +285 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/lib/xml-utils.js +13 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +157 -0
- package/tools/schema/agent.js +491 -0
- package/tools/validate-agent-schema.js +110 -0
- package/tools/validate-doc-links.js +407 -0
- package/tools/validate-file-refs.js +554 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/website/README.md +75 -0
- package/website/astro.config.mjs +136 -0
- package/website/public/favicon.ico +0 -0
- package/website/public/img/bmad-dark.png +0 -0
- package/website/public/img/bmad-light.png +0 -0
- package/website/public/workflow-map-diagram.html +361 -0
- package/website/src/components/Banner.astro +62 -0
- package/website/src/components/Header.astro +96 -0
- package/website/src/components/MobileMenuFooter.astro +33 -0
- package/website/src/content/config.ts +6 -0
- package/website/src/lib/site-url.mjs +25 -0
- package/website/src/pages/404.astro +11 -0
- package/website/src/pages/robots.txt.ts +48 -0
- package/website/src/rehype-base-paths.js +112 -0
- package/website/src/rehype-markdown-links.js +119 -0
- package/website/src/styles/custom.css +805 -0
- package/.mcp.json +0 -46
- package/agents/AGENTS-REGISTRY.md +0 -215
- package/agents/architect.md +0 -160
- package/agents/dev.md +0 -166
- package/agents/devops.md +0 -230
- package/agents/doc.md +0 -189
- package/agents/learn.md +0 -377
- package/agents/product.md +0 -124
- package/agents/security.md +0 -168
- package/agents/test.md +0 -209
- package/agents/ux.md +0 -207
- package/cli/mdan.js +0 -628
- package/cli/mdan.py +0 -316
- package/cli/mdan.sh +0 -724
- package/cli/postinstall.js +0 -4
- package/core/orchestrator.md +0 -238
- package/core/universal-envelope.md +0 -160
- package/install.sh +0 -91
- package/integrations/all-integrations.md +0 -300
- package/integrations/claude.md +0 -46
- package/integrations/cursor.md +0 -74
- package/integrations/mcp.md +0 -153
- package/integrations/windsurf.md +0 -48
- package/memory/MDAN-STATE.template.json +0 -44
- package/memory/MEMORY-SYSTEM.md +0 -197
- package/phases/01-discover.md +0 -136
- package/phases/02-design.md +0 -147
- package/phases/03-build.md +0 -113
- package/phases/04-verify.md +0 -107
- package/phases/05-ship.md +0 -156
- package/skills/find-skills/skill.md +0 -133
- package/templates/ARCHITECTURE.md +0 -186
- package/templates/CHANGELOG.md +0 -41
- package/templates/MDAN-KNOWLEDGE.md +0 -73
- package/templates/PRD.md +0 -120
- package/templates/SECURITY-REVIEW.md +0 -99
- package/templates/TEST-PLAN.md +0 -97
- package/templates/prompts/README.md +0 -108
- package/templates/prompts/dev-agent.yaml +0 -85
- package/templates/prompts/orchestrator.yaml +0 -97
- package/templates/prompts.json +0 -81
- package/templates/tests/evaluations/README.md +0 -80
- package/templates/tests/evaluations/classification_eval.md +0 -136
- package/templates/tests/evaluations/rag_eval.md +0 -116
- package/templates/tests/scenarios/README.md +0 -62
- package/templates/tests/scenarios/basic_authentication.test.md +0 -82
- package/templates/tests/scenarios/user_registration.test.md +0 -107
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const csv = require('csv-parse/sync');
|
|
4
|
+
const { toColonName, toColonPath, toDashPath, BMAD_FOLDER_NAME } = require('./path-utils');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generates command files for standalone tasks and tools
|
|
8
|
+
*/
|
|
9
|
+
class TaskToolCommandGenerator {
|
|
10
|
+
/**
|
|
11
|
+
* @param {string} bmadFolderName - Name of the BMAD folder for template rendering (default: '_bmad')
|
|
12
|
+
* Note: This parameter is accepted for API consistency with AgentCommandGenerator and
|
|
13
|
+
* WorkflowCommandGenerator, but is not used for path stripping. The manifest always stores
|
|
14
|
+
* filesystem paths with '_bmad/' prefix (the actual folder name), while bmadFolderName is
|
|
15
|
+
* used for template placeholder rendering ({{bmadFolderName}}).
|
|
16
|
+
*/
|
|
17
|
+
constructor(bmadFolderName = BMAD_FOLDER_NAME) {
|
|
18
|
+
this.bmadFolderName = bmadFolderName;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Collect task and tool artifacts for IDE installation
|
|
23
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
24
|
+
* @returns {Promise<Object>} Artifacts array with metadata
|
|
25
|
+
*/
|
|
26
|
+
async collectTaskToolArtifacts(bmadDir) {
|
|
27
|
+
const tasks = await this.loadTaskManifest(bmadDir);
|
|
28
|
+
const tools = await this.loadToolManifest(bmadDir);
|
|
29
|
+
|
|
30
|
+
// All tasks/tools in manifest are standalone (internal=true items are filtered during manifest generation)
|
|
31
|
+
const artifacts = [];
|
|
32
|
+
const bmadPrefix = `${BMAD_FOLDER_NAME}/`;
|
|
33
|
+
|
|
34
|
+
// Collect task artifacts
|
|
35
|
+
for (const task of tasks || []) {
|
|
36
|
+
let taskPath = (task.path || '').replaceAll('\\', '/');
|
|
37
|
+
// Convert absolute paths to relative paths
|
|
38
|
+
if (path.isAbsolute(taskPath)) {
|
|
39
|
+
taskPath = path.relative(bmadDir, taskPath).replaceAll('\\', '/');
|
|
40
|
+
}
|
|
41
|
+
// Remove _bmad/ prefix if present to get relative path within bmad folder
|
|
42
|
+
if (taskPath.startsWith(bmadPrefix)) {
|
|
43
|
+
taskPath = taskPath.slice(bmadPrefix.length);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const taskExt = path.extname(taskPath) || '.md';
|
|
47
|
+
artifacts.push({
|
|
48
|
+
type: 'task',
|
|
49
|
+
name: task.name,
|
|
50
|
+
displayName: task.displayName || task.name,
|
|
51
|
+
description: task.description || `Execute ${task.displayName || task.name}`,
|
|
52
|
+
module: task.module,
|
|
53
|
+
// Use forward slashes for cross-platform consistency (not path.join which uses backslashes on Windows)
|
|
54
|
+
relativePath: `${task.module}/tasks/${task.name}${taskExt}`,
|
|
55
|
+
path: taskPath,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Collect tool artifacts
|
|
60
|
+
for (const tool of tools || []) {
|
|
61
|
+
let toolPath = (tool.path || '').replaceAll('\\', '/');
|
|
62
|
+
// Convert absolute paths to relative paths
|
|
63
|
+
if (path.isAbsolute(toolPath)) {
|
|
64
|
+
toolPath = path.relative(bmadDir, toolPath).replaceAll('\\', '/');
|
|
65
|
+
}
|
|
66
|
+
// Remove _bmad/ prefix if present to get relative path within bmad folder
|
|
67
|
+
if (toolPath.startsWith(bmadPrefix)) {
|
|
68
|
+
toolPath = toolPath.slice(bmadPrefix.length);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const toolExt = path.extname(toolPath) || '.md';
|
|
72
|
+
artifacts.push({
|
|
73
|
+
type: 'tool',
|
|
74
|
+
name: tool.name,
|
|
75
|
+
displayName: tool.displayName || tool.name,
|
|
76
|
+
description: tool.description || `Execute ${tool.displayName || tool.name}`,
|
|
77
|
+
module: tool.module,
|
|
78
|
+
// Use forward slashes for cross-platform consistency (not path.join which uses backslashes on Windows)
|
|
79
|
+
relativePath: `${tool.module}/tools/${tool.name}${toolExt}`,
|
|
80
|
+
path: toolPath,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
artifacts,
|
|
86
|
+
counts: {
|
|
87
|
+
tasks: (tasks || []).length,
|
|
88
|
+
tools: (tools || []).length,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Generate task and tool commands from manifest CSVs
|
|
95
|
+
* @param {string} projectDir - Project directory
|
|
96
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
97
|
+
* @param {string} baseCommandsDir - Optional base commands directory (defaults to .claude/commands/bmad)
|
|
98
|
+
*/
|
|
99
|
+
async generateTaskToolCommands(projectDir, bmadDir, baseCommandsDir = null) {
|
|
100
|
+
const tasks = await this.loadTaskManifest(bmadDir);
|
|
101
|
+
const tools = await this.loadToolManifest(bmadDir);
|
|
102
|
+
|
|
103
|
+
// Base commands directory - use provided or default to Claude Code structure
|
|
104
|
+
const commandsDir = baseCommandsDir || path.join(projectDir, '.claude', 'commands', 'bmad');
|
|
105
|
+
|
|
106
|
+
let generatedCount = 0;
|
|
107
|
+
|
|
108
|
+
// Generate command files for tasks
|
|
109
|
+
for (const task of tasks || []) {
|
|
110
|
+
const moduleTasksDir = path.join(commandsDir, task.module, 'tasks');
|
|
111
|
+
await fs.ensureDir(moduleTasksDir);
|
|
112
|
+
|
|
113
|
+
const commandContent = this.generateCommandContent(task, 'task');
|
|
114
|
+
const commandPath = path.join(moduleTasksDir, `${task.name}.md`);
|
|
115
|
+
|
|
116
|
+
await fs.writeFile(commandPath, commandContent);
|
|
117
|
+
generatedCount++;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Generate command files for tools
|
|
121
|
+
for (const tool of tools || []) {
|
|
122
|
+
const moduleToolsDir = path.join(commandsDir, tool.module, 'tools');
|
|
123
|
+
await fs.ensureDir(moduleToolsDir);
|
|
124
|
+
|
|
125
|
+
const commandContent = this.generateCommandContent(tool, 'tool');
|
|
126
|
+
const commandPath = path.join(moduleToolsDir, `${tool.name}.md`);
|
|
127
|
+
|
|
128
|
+
await fs.writeFile(commandPath, commandContent);
|
|
129
|
+
generatedCount++;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
generated: generatedCount,
|
|
134
|
+
tasks: (tasks || []).length,
|
|
135
|
+
tools: (tools || []).length,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Generate command content for a task or tool
|
|
141
|
+
*/
|
|
142
|
+
generateCommandContent(item, type) {
|
|
143
|
+
const description = item.description || `Execute ${item.displayName || item.name}`;
|
|
144
|
+
|
|
145
|
+
// Convert path to use {project-root} placeholder
|
|
146
|
+
// Handle undefined/missing path by constructing from module and name
|
|
147
|
+
let itemPath = item.path;
|
|
148
|
+
if (!itemPath || typeof itemPath !== 'string') {
|
|
149
|
+
// Fallback: construct path from module and name if path is missing
|
|
150
|
+
const typePlural = type === 'task' ? 'tasks' : 'tools';
|
|
151
|
+
itemPath = `{project-root}/${this.bmadFolderName}/${item.module}/${typePlural}/${item.name}.md`;
|
|
152
|
+
} else {
|
|
153
|
+
// Normalize path separators to forward slashes
|
|
154
|
+
itemPath = itemPath.replaceAll('\\', '/');
|
|
155
|
+
|
|
156
|
+
// Extract relative path from absolute paths (Windows or Unix)
|
|
157
|
+
// Look for _bmad/ or bmad/ in the path and extract everything after it
|
|
158
|
+
// Match patterns like: /_bmad/core/tasks/... or /bmad/core/tasks/...
|
|
159
|
+
// Use [/\\] to handle both Unix forward slashes and Windows backslashes,
|
|
160
|
+
// and also paths without a leading separator (e.g., C:/_bmad/...)
|
|
161
|
+
const bmadMatch = itemPath.match(/[/\\]_bmad[/\\](.+)$/) || itemPath.match(/[/\\]bmad[/\\](.+)$/);
|
|
162
|
+
if (bmadMatch) {
|
|
163
|
+
// Found /_bmad/ or /bmad/ - use relative path after it
|
|
164
|
+
itemPath = `{project-root}/${this.bmadFolderName}/${bmadMatch[1]}`;
|
|
165
|
+
} else if (itemPath.startsWith(`${BMAD_FOLDER_NAME}/`)) {
|
|
166
|
+
// Relative path starting with _bmad/
|
|
167
|
+
itemPath = `{project-root}/${this.bmadFolderName}/${itemPath.slice(BMAD_FOLDER_NAME.length + 1)}`;
|
|
168
|
+
} else if (itemPath.startsWith('bmad/')) {
|
|
169
|
+
// Relative path starting with bmad/
|
|
170
|
+
itemPath = `{project-root}/${this.bmadFolderName}/${itemPath.slice(5)}`;
|
|
171
|
+
} else if (!itemPath.startsWith('{project-root}')) {
|
|
172
|
+
// For other relative paths, prefix with project root and bmad folder
|
|
173
|
+
itemPath = `{project-root}/${this.bmadFolderName}/${itemPath}`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return `---
|
|
178
|
+
description: '${description.replaceAll("'", "''")}'
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
# ${item.displayName || item.name}
|
|
182
|
+
|
|
183
|
+
Read the entire ${type} file at: ${itemPath}
|
|
184
|
+
|
|
185
|
+
Follow all instructions in the ${type} file exactly as written.
|
|
186
|
+
`;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Load task manifest CSV
|
|
191
|
+
*/
|
|
192
|
+
async loadTaskManifest(bmadDir) {
|
|
193
|
+
const manifestPath = path.join(bmadDir, '_config', 'task-manifest.csv');
|
|
194
|
+
|
|
195
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const csvContent = await fs.readFile(manifestPath, 'utf8');
|
|
200
|
+
return csv.parse(csvContent, {
|
|
201
|
+
columns: true,
|
|
202
|
+
skip_empty_lines: true,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Load tool manifest CSV
|
|
208
|
+
*/
|
|
209
|
+
async loadToolManifest(bmadDir) {
|
|
210
|
+
const manifestPath = path.join(bmadDir, '_config', 'tool-manifest.csv');
|
|
211
|
+
|
|
212
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const csvContent = await fs.readFile(manifestPath, 'utf8');
|
|
217
|
+
return csv.parse(csvContent, {
|
|
218
|
+
columns: true,
|
|
219
|
+
skip_empty_lines: true,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Generate task and tool commands using underscore format (Windows-compatible)
|
|
225
|
+
* Creates flat files like: bmad_bmm_help.md
|
|
226
|
+
*
|
|
227
|
+
* @param {string} projectDir - Project directory
|
|
228
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
229
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
230
|
+
* @returns {Object} Generation results
|
|
231
|
+
*/
|
|
232
|
+
async generateColonTaskToolCommands(projectDir, bmadDir, baseCommandsDir) {
|
|
233
|
+
const tasks = await this.loadTaskManifest(bmadDir);
|
|
234
|
+
const tools = await this.loadToolManifest(bmadDir);
|
|
235
|
+
|
|
236
|
+
let generatedCount = 0;
|
|
237
|
+
|
|
238
|
+
// Generate command files for tasks
|
|
239
|
+
for (const task of tasks || []) {
|
|
240
|
+
const commandContent = this.generateCommandContent(task, 'task');
|
|
241
|
+
// Use underscore format: bmad_bmm_name.md
|
|
242
|
+
const flatName = toColonName(task.module, 'tasks', task.name);
|
|
243
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
244
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
245
|
+
await fs.writeFile(commandPath, commandContent);
|
|
246
|
+
generatedCount++;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Generate command files for tools
|
|
250
|
+
for (const tool of tools || []) {
|
|
251
|
+
const commandContent = this.generateCommandContent(tool, 'tool');
|
|
252
|
+
// Use underscore format: bmad_bmm_name.md
|
|
253
|
+
const flatName = toColonName(tool.module, 'tools', tool.name);
|
|
254
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
255
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
256
|
+
await fs.writeFile(commandPath, commandContent);
|
|
257
|
+
generatedCount++;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return {
|
|
261
|
+
generated: generatedCount,
|
|
262
|
+
tasks: (tasks || []).length,
|
|
263
|
+
tools: (tools || []).length,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Generate task and tool commands using underscore format (Windows-compatible)
|
|
269
|
+
* Creates flat files like: bmad_bmm_help.md
|
|
270
|
+
*
|
|
271
|
+
* @param {string} projectDir - Project directory
|
|
272
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
273
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
274
|
+
* @returns {Object} Generation results
|
|
275
|
+
*/
|
|
276
|
+
async generateDashTaskToolCommands(projectDir, bmadDir, baseCommandsDir) {
|
|
277
|
+
const tasks = await this.loadTaskManifest(bmadDir);
|
|
278
|
+
const tools = await this.loadToolManifest(bmadDir);
|
|
279
|
+
|
|
280
|
+
let generatedCount = 0;
|
|
281
|
+
|
|
282
|
+
// Generate command files for tasks
|
|
283
|
+
for (const task of tasks || []) {
|
|
284
|
+
const commandContent = this.generateCommandContent(task, 'task');
|
|
285
|
+
// Use dash format: bmad-bmm-name.md
|
|
286
|
+
const flatName = toDashPath(`${task.module}/tasks/${task.name}.md`);
|
|
287
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
288
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
289
|
+
await fs.writeFile(commandPath, commandContent);
|
|
290
|
+
generatedCount++;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Generate command files for tools
|
|
294
|
+
for (const tool of tools || []) {
|
|
295
|
+
const commandContent = this.generateCommandContent(tool, 'tool');
|
|
296
|
+
// Use dash format: bmad-bmm-name.md
|
|
297
|
+
const flatName = toDashPath(`${tool.module}/tools/${tool.name}.md`);
|
|
298
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
299
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
300
|
+
await fs.writeFile(commandPath, commandContent);
|
|
301
|
+
generatedCount++;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return {
|
|
305
|
+
generated: generatedCount,
|
|
306
|
+
tasks: (tasks || []).length,
|
|
307
|
+
tools: (tools || []).length,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Write task/tool artifacts using underscore format (Windows-compatible)
|
|
313
|
+
* Creates flat files like: bmad_bmm_help.md
|
|
314
|
+
*
|
|
315
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
316
|
+
* @param {Array} artifacts - Task/tool artifacts with relativePath
|
|
317
|
+
* @returns {number} Count of commands written
|
|
318
|
+
*/
|
|
319
|
+
async writeColonArtifacts(baseCommandsDir, artifacts) {
|
|
320
|
+
let writtenCount = 0;
|
|
321
|
+
|
|
322
|
+
for (const artifact of artifacts) {
|
|
323
|
+
if (artifact.type === 'task' || artifact.type === 'tool') {
|
|
324
|
+
const commandContent = this.generateCommandContent(artifact, artifact.type);
|
|
325
|
+
// Use underscore format: bmad_module_name.md
|
|
326
|
+
const flatName = toColonPath(artifact.relativePath);
|
|
327
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
328
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
329
|
+
await fs.writeFile(commandPath, commandContent);
|
|
330
|
+
writtenCount++;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return writtenCount;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Write task/tool artifacts using dash format (NEW STANDARD)
|
|
339
|
+
* Creates flat files like: bmad-bmm-help.md
|
|
340
|
+
*
|
|
341
|
+
* Note: Tasks/tools do NOT have bmad-agent- prefix - only agents do.
|
|
342
|
+
*
|
|
343
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
344
|
+
* @param {Array} artifacts - Task/tool artifacts with relativePath
|
|
345
|
+
* @returns {number} Count of commands written
|
|
346
|
+
*/
|
|
347
|
+
async writeDashArtifacts(baseCommandsDir, artifacts) {
|
|
348
|
+
let writtenCount = 0;
|
|
349
|
+
|
|
350
|
+
for (const artifact of artifacts) {
|
|
351
|
+
if (artifact.type === 'task' || artifact.type === 'tool') {
|
|
352
|
+
const commandContent = this.generateCommandContent(artifact, artifact.type);
|
|
353
|
+
// Use dash format: bmad-module-name.md
|
|
354
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
355
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
356
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
357
|
+
await fs.writeFile(commandPath, commandContent);
|
|
358
|
+
writtenCount++;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
return writtenCount;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
module.exports = { TaskToolCommandGenerator };
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const csv = require('csv-parse/sync');
|
|
4
|
+
const prompts = require('../../../../lib/prompts');
|
|
5
|
+
const { toColonPath, toDashPath, customAgentColonName, customAgentDashName, BMAD_FOLDER_NAME } = require('./path-utils');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generates command files for each workflow in the manifest
|
|
9
|
+
*/
|
|
10
|
+
class WorkflowCommandGenerator {
|
|
11
|
+
constructor(bmadFolderName = BMAD_FOLDER_NAME) {
|
|
12
|
+
this.templatePath = path.join(__dirname, '../templates/workflow-command-template.md');
|
|
13
|
+
this.bmadFolderName = bmadFolderName;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Generate workflow commands from the manifest CSV
|
|
18
|
+
* @param {string} projectDir - Project directory
|
|
19
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
20
|
+
*/
|
|
21
|
+
async generateWorkflowCommands(projectDir, bmadDir) {
|
|
22
|
+
const workflows = await this.loadWorkflowManifest(bmadDir);
|
|
23
|
+
|
|
24
|
+
if (!workflows) {
|
|
25
|
+
await prompts.log.warn('Workflow manifest not found. Skipping command generation.');
|
|
26
|
+
return { generated: 0 };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// ALL workflows now generate commands - no standalone filtering
|
|
30
|
+
const allWorkflows = workflows;
|
|
31
|
+
|
|
32
|
+
// Base commands directory
|
|
33
|
+
const baseCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
|
|
34
|
+
|
|
35
|
+
let generatedCount = 0;
|
|
36
|
+
|
|
37
|
+
// Generate a command file for each workflow, organized by module
|
|
38
|
+
for (const workflow of allWorkflows) {
|
|
39
|
+
const moduleWorkflowsDir = path.join(baseCommandsDir, workflow.module, 'workflows');
|
|
40
|
+
await fs.ensureDir(moduleWorkflowsDir);
|
|
41
|
+
|
|
42
|
+
const commandContent = await this.generateCommandContent(workflow, bmadDir);
|
|
43
|
+
const commandPath = path.join(moduleWorkflowsDir, `${workflow.name}.md`);
|
|
44
|
+
|
|
45
|
+
await fs.writeFile(commandPath, commandContent);
|
|
46
|
+
generatedCount++;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Also create a workflow launcher README in each module
|
|
50
|
+
const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
|
|
51
|
+
await this.createModuleWorkflowLaunchers(baseCommandsDir, groupedWorkflows);
|
|
52
|
+
|
|
53
|
+
return { generated: generatedCount };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async collectWorkflowArtifacts(bmadDir) {
|
|
57
|
+
const workflows = await this.loadWorkflowManifest(bmadDir);
|
|
58
|
+
|
|
59
|
+
if (!workflows) {
|
|
60
|
+
return { artifacts: [], counts: { commands: 0, launchers: 0 } };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ALL workflows now generate commands - no standalone filtering
|
|
64
|
+
const allWorkflows = workflows;
|
|
65
|
+
|
|
66
|
+
const artifacts = [];
|
|
67
|
+
|
|
68
|
+
for (const workflow of allWorkflows) {
|
|
69
|
+
const commandContent = await this.generateCommandContent(workflow, bmadDir);
|
|
70
|
+
// Calculate the relative workflow path (e.g., bmm/workflows/4-implementation/sprint-planning/workflow.yaml)
|
|
71
|
+
let workflowRelPath = workflow.path || '';
|
|
72
|
+
// Normalize path separators for cross-platform compatibility
|
|
73
|
+
workflowRelPath = workflowRelPath.replaceAll('\\', '/');
|
|
74
|
+
// Remove _bmad/ prefix if present to get relative path from project root
|
|
75
|
+
// Handle both absolute paths (/path/to/_bmad/...) and relative paths (_bmad/...)
|
|
76
|
+
if (workflowRelPath.includes('_bmad/')) {
|
|
77
|
+
const parts = workflowRelPath.split(/_bmad\//);
|
|
78
|
+
if (parts.length > 1) {
|
|
79
|
+
workflowRelPath = parts.slice(1).join('/');
|
|
80
|
+
}
|
|
81
|
+
} else if (workflowRelPath.includes('/src/')) {
|
|
82
|
+
// Normalize source paths (e.g. .../src/bmm/...) to relative module path (e.g. bmm/...)
|
|
83
|
+
const match = workflowRelPath.match(/\/src\/([^/]+)\/(.+)/);
|
|
84
|
+
if (match) {
|
|
85
|
+
workflowRelPath = `${match[1]}/${match[2]}`;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Determine if this is a YAML workflow (use normalized path which is guaranteed to be a string)
|
|
89
|
+
const isYamlWorkflow = workflowRelPath.endsWith('.yaml') || workflowRelPath.endsWith('.yml');
|
|
90
|
+
artifacts.push({
|
|
91
|
+
type: 'workflow-command',
|
|
92
|
+
isYamlWorkflow: isYamlWorkflow, // For template selection
|
|
93
|
+
name: workflow.name,
|
|
94
|
+
description: workflow.description || `${workflow.name} workflow`,
|
|
95
|
+
module: workflow.module,
|
|
96
|
+
relativePath: path.join(workflow.module, 'workflows', `${workflow.name}.md`),
|
|
97
|
+
workflowPath: workflowRelPath, // Relative path to actual workflow file
|
|
98
|
+
content: commandContent,
|
|
99
|
+
sourcePath: workflow.path,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
|
|
104
|
+
for (const [module, launcherContent] of Object.entries(this.buildModuleWorkflowLaunchers(groupedWorkflows))) {
|
|
105
|
+
artifacts.push({
|
|
106
|
+
type: 'workflow-launcher',
|
|
107
|
+
module,
|
|
108
|
+
relativePath: path.join(module, 'workflows', 'README.md'),
|
|
109
|
+
content: launcherContent,
|
|
110
|
+
sourcePath: null,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
artifacts,
|
|
116
|
+
counts: {
|
|
117
|
+
commands: allWorkflows.length,
|
|
118
|
+
launchers: Object.keys(groupedWorkflows).length,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Generate command content for a workflow
|
|
125
|
+
*/
|
|
126
|
+
async generateCommandContent(workflow, bmadDir) {
|
|
127
|
+
// Determine template based on workflow file type
|
|
128
|
+
const isMarkdownWorkflow = workflow.path.endsWith('workflow.md');
|
|
129
|
+
const templateName = isMarkdownWorkflow ? 'workflow-commander.md' : 'workflow-command-template.md';
|
|
130
|
+
const templatePath = path.join(path.dirname(this.templatePath), templateName);
|
|
131
|
+
|
|
132
|
+
// Load the appropriate template
|
|
133
|
+
const template = await fs.readFile(templatePath, 'utf8');
|
|
134
|
+
|
|
135
|
+
// Convert source path to installed path
|
|
136
|
+
// From: /Users/.../src/bmm/workflows/.../workflow.yaml
|
|
137
|
+
// To: {project-root}/_bmad/bmm/workflows/.../workflow.yaml
|
|
138
|
+
let workflowPath = workflow.path;
|
|
139
|
+
|
|
140
|
+
// Extract the relative path from source
|
|
141
|
+
if (workflowPath.includes('/src/bmm/')) {
|
|
142
|
+
// bmm is directly under src/
|
|
143
|
+
const match = workflowPath.match(/\/src\/bmm\/(.+)/);
|
|
144
|
+
if (match) {
|
|
145
|
+
workflowPath = `${this.bmadFolderName}/bmm/${match[1]}`;
|
|
146
|
+
}
|
|
147
|
+
} else if (workflowPath.includes('/src/core/')) {
|
|
148
|
+
const match = workflowPath.match(/\/src\/core\/(.+)/);
|
|
149
|
+
if (match) {
|
|
150
|
+
workflowPath = `${this.bmadFolderName}/core/${match[1]}`;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Replace template variables
|
|
155
|
+
return template
|
|
156
|
+
.replaceAll('{{name}}', workflow.name)
|
|
157
|
+
.replaceAll('{{module}}', workflow.module)
|
|
158
|
+
.replaceAll('{{description}}', workflow.description)
|
|
159
|
+
.replaceAll('{{workflow_path}}', workflowPath)
|
|
160
|
+
.replaceAll('_bmad', this.bmadFolderName);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Create workflow launcher files for each module
|
|
165
|
+
*/
|
|
166
|
+
async createModuleWorkflowLaunchers(baseCommandsDir, workflowsByModule) {
|
|
167
|
+
for (const [module, moduleWorkflows] of Object.entries(workflowsByModule)) {
|
|
168
|
+
const content = this.buildLauncherContent(module, moduleWorkflows);
|
|
169
|
+
const moduleWorkflowsDir = path.join(baseCommandsDir, module, 'workflows');
|
|
170
|
+
await fs.ensureDir(moduleWorkflowsDir);
|
|
171
|
+
const launcherPath = path.join(moduleWorkflowsDir, 'README.md');
|
|
172
|
+
await fs.writeFile(launcherPath, content);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
groupWorkflowsByModule(workflows) {
|
|
177
|
+
const workflowsByModule = {};
|
|
178
|
+
|
|
179
|
+
for (const workflow of workflows) {
|
|
180
|
+
if (!workflowsByModule[workflow.module]) {
|
|
181
|
+
workflowsByModule[workflow.module] = [];
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
workflowsByModule[workflow.module].push({
|
|
185
|
+
...workflow,
|
|
186
|
+
displayPath: this.transformWorkflowPath(workflow.path),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return workflowsByModule;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
buildModuleWorkflowLaunchers(groupedWorkflows) {
|
|
194
|
+
const launchers = {};
|
|
195
|
+
|
|
196
|
+
for (const [module, moduleWorkflows] of Object.entries(groupedWorkflows)) {
|
|
197
|
+
launchers[module] = this.buildLauncherContent(module, moduleWorkflows);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return launchers;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
buildLauncherContent(module, moduleWorkflows) {
|
|
204
|
+
let content = `# ${module.toUpperCase()} Workflows
|
|
205
|
+
|
|
206
|
+
## Available Workflows in ${module}
|
|
207
|
+
|
|
208
|
+
`;
|
|
209
|
+
|
|
210
|
+
for (const workflow of moduleWorkflows) {
|
|
211
|
+
content += `**${workflow.name}**\n`;
|
|
212
|
+
content += `- Path: \`${workflow.displayPath}\`\n`;
|
|
213
|
+
content += `- ${workflow.description}\n\n`;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
content += `
|
|
217
|
+
## Execution
|
|
218
|
+
|
|
219
|
+
When running any workflow:
|
|
220
|
+
1. LOAD {project-root}/${this.bmadFolderName}/core/tasks/workflow.xml
|
|
221
|
+
2. Pass the workflow path as 'workflow-config' parameter
|
|
222
|
+
3. Follow workflow.xml instructions EXACTLY
|
|
223
|
+
4. Save outputs after EACH section
|
|
224
|
+
|
|
225
|
+
## Modes
|
|
226
|
+
- Normal: Full interaction
|
|
227
|
+
- #yolo: Skip optional steps
|
|
228
|
+
`;
|
|
229
|
+
|
|
230
|
+
return content;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
transformWorkflowPath(workflowPath) {
|
|
234
|
+
let transformed = workflowPath;
|
|
235
|
+
|
|
236
|
+
if (workflowPath.includes('/src/bmm/')) {
|
|
237
|
+
const match = workflowPath.match(/\/src\/bmm\/(.+)/);
|
|
238
|
+
if (match) {
|
|
239
|
+
transformed = `{project-root}/${this.bmadFolderName}/bmm/${match[1]}`;
|
|
240
|
+
}
|
|
241
|
+
} else if (workflowPath.includes('/src/core/')) {
|
|
242
|
+
const match = workflowPath.match(/\/src\/core\/(.+)/);
|
|
243
|
+
if (match) {
|
|
244
|
+
transformed = `{project-root}/${this.bmadFolderName}/core/${match[1]}`;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return transformed;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
async loadWorkflowManifest(bmadDir) {
|
|
252
|
+
const manifestPath = path.join(bmadDir, '_config', 'workflow-manifest.csv');
|
|
253
|
+
|
|
254
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const csvContent = await fs.readFile(manifestPath, 'utf8');
|
|
259
|
+
return csv.parse(csvContent, {
|
|
260
|
+
columns: true,
|
|
261
|
+
skip_empty_lines: true,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Write workflow command artifacts using underscore format (Windows-compatible)
|
|
267
|
+
* Creates flat files like: bmad_bmm_correct-course.md
|
|
268
|
+
*
|
|
269
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
270
|
+
* @param {Array} artifacts - Workflow artifacts
|
|
271
|
+
* @returns {number} Count of commands written
|
|
272
|
+
*/
|
|
273
|
+
async writeColonArtifacts(baseCommandsDir, artifacts) {
|
|
274
|
+
let writtenCount = 0;
|
|
275
|
+
|
|
276
|
+
for (const artifact of artifacts) {
|
|
277
|
+
if (artifact.type === 'workflow-command') {
|
|
278
|
+
// Convert relativePath to underscore format: bmm/workflows/correct-course.md → bmad_bmm_correct-course.md
|
|
279
|
+
const flatName = toColonPath(artifact.relativePath);
|
|
280
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
281
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
282
|
+
await fs.writeFile(commandPath, artifact.content);
|
|
283
|
+
writtenCount++;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
return writtenCount;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Write workflow command artifacts using dash format (NEW STANDARD)
|
|
292
|
+
* Creates flat files like: bmad-bmm-correct-course.md
|
|
293
|
+
*
|
|
294
|
+
* Note: Workflows do NOT have bmad-agent- prefix - only agents do.
|
|
295
|
+
*
|
|
296
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
297
|
+
* @param {Array} artifacts - Workflow artifacts
|
|
298
|
+
* @returns {number} Count of commands written
|
|
299
|
+
*/
|
|
300
|
+
async writeDashArtifacts(baseCommandsDir, artifacts) {
|
|
301
|
+
let writtenCount = 0;
|
|
302
|
+
|
|
303
|
+
for (const artifact of artifacts) {
|
|
304
|
+
if (artifact.type === 'workflow-command') {
|
|
305
|
+
// Convert relativePath to dash format: bmm/workflows/correct-course.md → bmad-bmm-correct-course.md
|
|
306
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
307
|
+
const commandPath = path.join(baseCommandsDir, flatName);
|
|
308
|
+
await fs.ensureDir(path.dirname(commandPath));
|
|
309
|
+
await fs.writeFile(commandPath, artifact.content);
|
|
310
|
+
writtenCount++;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return writtenCount;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
module.exports = { WorkflowCommandGenerator };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: '{{name}}'
|
|
3
|
+
description: '{{description}}'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
|
+
|
|
8
|
+
<agent-activation CRITICAL="TRUE">
|
|
9
|
+
1. LOAD the FULL agent file from @_bmad/{{module}}/agents/{{path}}
|
|
10
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
|
+
3. Execute ALL activation steps exactly as written in the agent file
|
|
12
|
+
4. Follow the agent's persona and menu system precisely
|
|
13
|
+
5. Stay in character throughout the session
|
|
14
|
+
</agent-activation>
|