mdan-cli 2.5.0 → 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,243 @@
|
|
|
1
|
+
# BMAD Platform Codes Configuration
|
|
2
|
+
# Central configuration for all platform/IDE codes used in the BMAD system
|
|
3
|
+
#
|
|
4
|
+
# This file defines:
|
|
5
|
+
# 1. Platform metadata (name, preferred status, category, description)
|
|
6
|
+
# 2. Installer configuration (target directories, templates, artifact types)
|
|
7
|
+
#
|
|
8
|
+
# Format:
|
|
9
|
+
# code: Platform identifier used internally
|
|
10
|
+
# name: Display name shown to users
|
|
11
|
+
# preferred: Whether this platform is shown as a recommended option on install
|
|
12
|
+
# category: Type of platform (ide, cli, tool, service)
|
|
13
|
+
# description: Brief description of the platform
|
|
14
|
+
# installer: Installation configuration (optional - omit for custom installers)
|
|
15
|
+
|
|
16
|
+
platforms:
|
|
17
|
+
antigravity:
|
|
18
|
+
name: "Google Antigravity"
|
|
19
|
+
preferred: false
|
|
20
|
+
category: ide
|
|
21
|
+
description: "Google's AI development environment"
|
|
22
|
+
installer:
|
|
23
|
+
target_dir: .agent/workflows
|
|
24
|
+
template_type: antigravity
|
|
25
|
+
|
|
26
|
+
auggie:
|
|
27
|
+
name: "Auggie"
|
|
28
|
+
preferred: false
|
|
29
|
+
category: cli
|
|
30
|
+
description: "AI development tool"
|
|
31
|
+
installer:
|
|
32
|
+
target_dir: .augment/commands
|
|
33
|
+
template_type: default
|
|
34
|
+
|
|
35
|
+
claude-code:
|
|
36
|
+
name: "Claude Code"
|
|
37
|
+
preferred: true
|
|
38
|
+
category: cli
|
|
39
|
+
description: "Anthropic's official CLI for Claude"
|
|
40
|
+
installer:
|
|
41
|
+
target_dir: .claude/commands
|
|
42
|
+
template_type: default
|
|
43
|
+
ancestor_conflict_check: true
|
|
44
|
+
|
|
45
|
+
cline:
|
|
46
|
+
name: "Cline"
|
|
47
|
+
preferred: false
|
|
48
|
+
category: ide
|
|
49
|
+
description: "AI coding assistant"
|
|
50
|
+
installer:
|
|
51
|
+
target_dir: .clinerules/workflows
|
|
52
|
+
template_type: windsurf
|
|
53
|
+
|
|
54
|
+
codex:
|
|
55
|
+
name: "Codex"
|
|
56
|
+
preferred: false
|
|
57
|
+
category: cli
|
|
58
|
+
description: "OpenAI Codex integration"
|
|
59
|
+
# No installer config - uses custom codex.js
|
|
60
|
+
|
|
61
|
+
codebuddy:
|
|
62
|
+
name: "CodeBuddy"
|
|
63
|
+
preferred: false
|
|
64
|
+
category: ide
|
|
65
|
+
description: "Tencent Cloud Code Assistant - AI-powered coding companion"
|
|
66
|
+
installer:
|
|
67
|
+
target_dir: .codebuddy/commands
|
|
68
|
+
template_type: default
|
|
69
|
+
|
|
70
|
+
crush:
|
|
71
|
+
name: "Crush"
|
|
72
|
+
preferred: false
|
|
73
|
+
category: ide
|
|
74
|
+
description: "AI development assistant"
|
|
75
|
+
installer:
|
|
76
|
+
target_dir: .crush/commands
|
|
77
|
+
template_type: default
|
|
78
|
+
|
|
79
|
+
cursor:
|
|
80
|
+
name: "Cursor"
|
|
81
|
+
preferred: true
|
|
82
|
+
category: ide
|
|
83
|
+
description: "AI-first code editor"
|
|
84
|
+
installer:
|
|
85
|
+
target_dir: .cursor/commands
|
|
86
|
+
template_type: default
|
|
87
|
+
|
|
88
|
+
gemini:
|
|
89
|
+
name: "Gemini CLI"
|
|
90
|
+
preferred: false
|
|
91
|
+
category: cli
|
|
92
|
+
description: "Google's CLI for Gemini"
|
|
93
|
+
installer:
|
|
94
|
+
target_dir: .gemini/commands
|
|
95
|
+
template_type: gemini
|
|
96
|
+
|
|
97
|
+
github-copilot:
|
|
98
|
+
name: "GitHub Copilot"
|
|
99
|
+
preferred: false
|
|
100
|
+
category: ide
|
|
101
|
+
description: "GitHub's AI pair programmer"
|
|
102
|
+
# No installer config - uses custom github-copilot.js
|
|
103
|
+
|
|
104
|
+
iflow:
|
|
105
|
+
name: "iFlow"
|
|
106
|
+
preferred: false
|
|
107
|
+
category: ide
|
|
108
|
+
description: "AI workflow automation"
|
|
109
|
+
installer:
|
|
110
|
+
target_dir: .iflow/commands
|
|
111
|
+
template_type: default
|
|
112
|
+
|
|
113
|
+
kilo:
|
|
114
|
+
name: "KiloCoder"
|
|
115
|
+
preferred: false
|
|
116
|
+
category: ide
|
|
117
|
+
description: "AI coding platform"
|
|
118
|
+
# No installer config - uses custom kilo.js (creates .kilocodemodes file)
|
|
119
|
+
|
|
120
|
+
kiro:
|
|
121
|
+
name: "Kiro"
|
|
122
|
+
preferred: false
|
|
123
|
+
category: ide
|
|
124
|
+
description: "Amazon's AI-powered IDE"
|
|
125
|
+
installer:
|
|
126
|
+
target_dir: .kiro/steering
|
|
127
|
+
template_type: kiro
|
|
128
|
+
|
|
129
|
+
opencode:
|
|
130
|
+
name: "OpenCode"
|
|
131
|
+
preferred: false
|
|
132
|
+
category: ide
|
|
133
|
+
description: "OpenCode terminal coding assistant"
|
|
134
|
+
installer:
|
|
135
|
+
legacy_targets:
|
|
136
|
+
- .opencode/agent
|
|
137
|
+
- .opencode/command
|
|
138
|
+
targets:
|
|
139
|
+
- target_dir: .opencode/agents
|
|
140
|
+
template_type: opencode
|
|
141
|
+
artifact_types: [agents]
|
|
142
|
+
- target_dir: .opencode/commands
|
|
143
|
+
template_type: opencode
|
|
144
|
+
artifact_types: [workflows, tasks, tools]
|
|
145
|
+
|
|
146
|
+
qwen:
|
|
147
|
+
name: "QwenCoder"
|
|
148
|
+
preferred: false
|
|
149
|
+
category: ide
|
|
150
|
+
description: "Qwen AI coding assistant"
|
|
151
|
+
installer:
|
|
152
|
+
target_dir: .qwen/commands
|
|
153
|
+
template_type: default
|
|
154
|
+
|
|
155
|
+
roo:
|
|
156
|
+
name: "Roo Cline"
|
|
157
|
+
preferred: false
|
|
158
|
+
category: ide
|
|
159
|
+
description: "Enhanced Cline fork"
|
|
160
|
+
installer:
|
|
161
|
+
target_dir: .roo/commands
|
|
162
|
+
template_type: default
|
|
163
|
+
|
|
164
|
+
rovo-dev:
|
|
165
|
+
name: "Rovo Dev"
|
|
166
|
+
preferred: false
|
|
167
|
+
category: ide
|
|
168
|
+
description: "Atlassian's Rovo development environment"
|
|
169
|
+
# No installer config - uses custom rovodev.js (generates prompts.yml manifest)
|
|
170
|
+
|
|
171
|
+
trae:
|
|
172
|
+
name: "Trae"
|
|
173
|
+
preferred: false
|
|
174
|
+
category: ide
|
|
175
|
+
description: "AI coding tool"
|
|
176
|
+
installer:
|
|
177
|
+
target_dir: .trae/rules
|
|
178
|
+
template_type: trae
|
|
179
|
+
|
|
180
|
+
windsurf:
|
|
181
|
+
name: "Windsurf"
|
|
182
|
+
preferred: false
|
|
183
|
+
category: ide
|
|
184
|
+
description: "AI-powered IDE with cascade flows"
|
|
185
|
+
installer:
|
|
186
|
+
target_dir: .windsurf/workflows
|
|
187
|
+
template_type: windsurf
|
|
188
|
+
|
|
189
|
+
# ============================================================================
|
|
190
|
+
# Installer Config Schema
|
|
191
|
+
# ============================================================================
|
|
192
|
+
#
|
|
193
|
+
# installer:
|
|
194
|
+
# target_dir: string # Directory where artifacts are installed
|
|
195
|
+
# template_type: string # Default template type to use
|
|
196
|
+
# header_template: string (optional) # Override for header/frontmatter template
|
|
197
|
+
# body_template: string (optional) # Override for body/content template
|
|
198
|
+
# legacy_targets: array (optional) # Old target dirs to clean up on reinstall (migration)
|
|
199
|
+
# - string # Relative path, e.g. .opencode/agent
|
|
200
|
+
# targets: array (optional) # For multi-target installations
|
|
201
|
+
# - target_dir: string
|
|
202
|
+
# template_type: string
|
|
203
|
+
# artifact_types: [agents, workflows, tasks, tools]
|
|
204
|
+
# artifact_types: array (optional) # Filter which artifacts to install (default: all)
|
|
205
|
+
# skip_existing: boolean (optional) # Skip files that already exist (default: false)
|
|
206
|
+
# ancestor_conflict_check: boolean (optional) # Refuse install when ancestor dir has BMAD files
|
|
207
|
+
# # in the same target_dir (for IDEs that inherit
|
|
208
|
+
# # commands from parent directories)
|
|
209
|
+
|
|
210
|
+
# ============================================================================
|
|
211
|
+
# Platform Categories
|
|
212
|
+
# ============================================================================
|
|
213
|
+
|
|
214
|
+
categories:
|
|
215
|
+
ide:
|
|
216
|
+
name: "Integrated Development Environment"
|
|
217
|
+
description: "Full-featured code editors with AI assistance"
|
|
218
|
+
|
|
219
|
+
cli:
|
|
220
|
+
name: "Command Line Interface"
|
|
221
|
+
description: "Terminal-based tools"
|
|
222
|
+
|
|
223
|
+
tool:
|
|
224
|
+
name: "Development Tool"
|
|
225
|
+
description: "Standalone development utilities"
|
|
226
|
+
|
|
227
|
+
service:
|
|
228
|
+
name: "Cloud Service"
|
|
229
|
+
description: "Cloud-based development platforms"
|
|
230
|
+
|
|
231
|
+
extension:
|
|
232
|
+
name: "Editor Extension"
|
|
233
|
+
description: "Plugins for existing editors"
|
|
234
|
+
|
|
235
|
+
# ============================================================================
|
|
236
|
+
# Naming Conventions and Rules
|
|
237
|
+
# ============================================================================
|
|
238
|
+
|
|
239
|
+
conventions:
|
|
240
|
+
code_format: "lowercase-kebab-case"
|
|
241
|
+
name_format: "Title Case"
|
|
242
|
+
max_code_length: 20
|
|
243
|
+
allowed_characters: "a-z0-9-"
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const yaml = require('yaml');
|
|
4
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
5
|
+
const prompts = require('../../../lib/prompts');
|
|
6
|
+
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
7
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
8
|
+
const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
|
|
9
|
+
const { toDashPath } = require('./shared/path-utils');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Rovo Dev IDE setup handler
|
|
13
|
+
*
|
|
14
|
+
* Custom installer that writes .md workflow files to .rovodev/workflows/
|
|
15
|
+
* and generates .rovodev/prompts.yml to register them with Rovo Dev's /prompts feature.
|
|
16
|
+
*
|
|
17
|
+
* prompts.yml format (per Rovo Dev docs):
|
|
18
|
+
* prompts:
|
|
19
|
+
* - name: bmad-bmm-create-prd
|
|
20
|
+
* description: "PRD workflow..."
|
|
21
|
+
* content_file: workflows/bmad-bmm-create-prd.md
|
|
22
|
+
*/
|
|
23
|
+
class RovoDevSetup extends BaseIdeSetup {
|
|
24
|
+
constructor() {
|
|
25
|
+
super('rovo-dev', 'Rovo Dev', false);
|
|
26
|
+
this.rovoDir = '.rovodev';
|
|
27
|
+
this.workflowsDir = 'workflows';
|
|
28
|
+
this.promptsFile = 'prompts.yml';
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Setup Rovo Dev configuration
|
|
33
|
+
* @param {string} projectDir - Project directory
|
|
34
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
35
|
+
* @param {Object} options - Setup options
|
|
36
|
+
* @returns {Promise<Object>} Setup result with { success, results: { agents, workflows, tasks, tools } }
|
|
37
|
+
*/
|
|
38
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
39
|
+
if (!options.silent) await prompts.log.info(`Setting up ${this.name}...`);
|
|
40
|
+
|
|
41
|
+
// Clean up any old BMAD installation first
|
|
42
|
+
await this.cleanup(projectDir, options);
|
|
43
|
+
|
|
44
|
+
const workflowsPath = path.join(projectDir, this.rovoDir, this.workflowsDir);
|
|
45
|
+
await this.ensureDir(workflowsPath);
|
|
46
|
+
|
|
47
|
+
const selectedModules = options.selectedModules || [];
|
|
48
|
+
const writtenFiles = [];
|
|
49
|
+
|
|
50
|
+
// Generate and write agent launchers
|
|
51
|
+
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
52
|
+
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, selectedModules);
|
|
53
|
+
const agentCount = await agentGen.writeDashArtifacts(workflowsPath, agentArtifacts);
|
|
54
|
+
this._collectPromptEntries(writtenFiles, agentArtifacts, ['agent-launcher'], 'agent');
|
|
55
|
+
|
|
56
|
+
// Generate and write workflow commands
|
|
57
|
+
const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
58
|
+
const { artifacts: workflowArtifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir);
|
|
59
|
+
const workflowCount = await workflowGen.writeDashArtifacts(workflowsPath, workflowArtifacts);
|
|
60
|
+
this._collectPromptEntries(writtenFiles, workflowArtifacts, ['workflow-command'], 'workflow');
|
|
61
|
+
|
|
62
|
+
// Generate and write task/tool commands
|
|
63
|
+
const taskToolGen = new TaskToolCommandGenerator(this.bmadFolderName);
|
|
64
|
+
const { artifacts: taskToolArtifacts, counts: taskToolCounts } = await taskToolGen.collectTaskToolArtifacts(bmadDir);
|
|
65
|
+
await taskToolGen.writeDashArtifacts(workflowsPath, taskToolArtifacts);
|
|
66
|
+
const taskCount = taskToolCounts.tasks || 0;
|
|
67
|
+
const toolCount = taskToolCounts.tools || 0;
|
|
68
|
+
this._collectPromptEntries(writtenFiles, taskToolArtifacts, ['task', 'tool']);
|
|
69
|
+
|
|
70
|
+
// Generate prompts.yml manifest (only if we have entries to write)
|
|
71
|
+
if (writtenFiles.length > 0) {
|
|
72
|
+
await this.generatePromptsYml(projectDir, writtenFiles);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!options.silent) {
|
|
76
|
+
await prompts.log.success(
|
|
77
|
+
`${this.name} configured: ${agentCount} agents, ${workflowCount} workflows, ${taskCount} tasks, ${toolCount} tools`,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
success: true,
|
|
83
|
+
results: {
|
|
84
|
+
agents: agentCount,
|
|
85
|
+
workflows: workflowCount,
|
|
86
|
+
tasks: taskCount,
|
|
87
|
+
tools: toolCount,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Collect prompt entries from artifacts into writtenFiles array
|
|
94
|
+
* @param {Array} writtenFiles - Target array to push entries into
|
|
95
|
+
* @param {Array} artifacts - Artifacts from a generator's collect method
|
|
96
|
+
* @param {string[]} acceptedTypes - Artifact types to include (e.g., ['agent-launcher'])
|
|
97
|
+
* @param {string} [fallbackSuffix] - Suffix for fallback description; defaults to artifact.type
|
|
98
|
+
*/
|
|
99
|
+
_collectPromptEntries(writtenFiles, artifacts, acceptedTypes, fallbackSuffix) {
|
|
100
|
+
for (const artifact of artifacts) {
|
|
101
|
+
if (!acceptedTypes.includes(artifact.type)) continue;
|
|
102
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
103
|
+
writtenFiles.push({
|
|
104
|
+
name: path.basename(flatName, '.md'),
|
|
105
|
+
description: artifact.description || `${artifact.name} ${fallbackSuffix || artifact.type}`,
|
|
106
|
+
contentFile: `${this.workflowsDir}/${flatName}`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Generate .rovodev/prompts.yml manifest
|
|
113
|
+
* Merges with existing user entries -- strips entries with names starting 'bmad-',
|
|
114
|
+
* appends new BMAD entries, and writes back.
|
|
115
|
+
*
|
|
116
|
+
* @param {string} projectDir - Project directory
|
|
117
|
+
* @param {Array<Object>} writtenFiles - Array of { name, description, contentFile }
|
|
118
|
+
*/
|
|
119
|
+
async generatePromptsYml(projectDir, writtenFiles) {
|
|
120
|
+
const promptsPath = path.join(projectDir, this.rovoDir, this.promptsFile);
|
|
121
|
+
let existingPrompts = [];
|
|
122
|
+
|
|
123
|
+
// Read existing prompts.yml and preserve non-BMAD entries
|
|
124
|
+
if (await this.pathExists(promptsPath)) {
|
|
125
|
+
try {
|
|
126
|
+
const content = await this.readFile(promptsPath);
|
|
127
|
+
const parsed = yaml.parse(content);
|
|
128
|
+
if (parsed && Array.isArray(parsed.prompts)) {
|
|
129
|
+
// Keep only non-BMAD entries (entries whose name does NOT start with bmad-)
|
|
130
|
+
existingPrompts = parsed.prompts.filter((entry) => !entry.name || !entry.name.startsWith('bmad-'));
|
|
131
|
+
}
|
|
132
|
+
} catch {
|
|
133
|
+
// If parsing fails, start fresh but preserve file safety
|
|
134
|
+
existingPrompts = [];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Build new BMAD entries (prefix description with name so /prompts list is scannable)
|
|
139
|
+
const bmadEntries = writtenFiles.map((file) => ({
|
|
140
|
+
name: file.name,
|
|
141
|
+
description: `${file.name} - ${file.description}`,
|
|
142
|
+
content_file: file.contentFile,
|
|
143
|
+
}));
|
|
144
|
+
|
|
145
|
+
// Merge: user entries first, then BMAD entries
|
|
146
|
+
const allPrompts = [...existingPrompts, ...bmadEntries];
|
|
147
|
+
|
|
148
|
+
const config = { prompts: allPrompts };
|
|
149
|
+
const yamlContent = yaml.stringify(config, { lineWidth: 0 });
|
|
150
|
+
await this.writeFile(promptsPath, yamlContent);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Cleanup Rovo Dev configuration
|
|
155
|
+
* Removes bmad-* files from .rovodev/workflows/ and strips BMAD entries from prompts.yml
|
|
156
|
+
* @param {string} projectDir - Project directory
|
|
157
|
+
* @param {Object} options - Cleanup options
|
|
158
|
+
*/
|
|
159
|
+
async cleanup(projectDir, options = {}) {
|
|
160
|
+
const workflowsPath = path.join(projectDir, this.rovoDir, this.workflowsDir);
|
|
161
|
+
|
|
162
|
+
// Remove all bmad-* entries from workflows dir (aligned with detect() predicate)
|
|
163
|
+
if (await this.pathExists(workflowsPath)) {
|
|
164
|
+
const entries = await fs.readdir(workflowsPath);
|
|
165
|
+
for (const entry of entries) {
|
|
166
|
+
if (entry.startsWith('bmad-')) {
|
|
167
|
+
await fs.remove(path.join(workflowsPath, entry));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Clean BMAD entries from prompts.yml (preserve user entries)
|
|
173
|
+
const promptsPath = path.join(projectDir, this.rovoDir, this.promptsFile);
|
|
174
|
+
if (await this.pathExists(promptsPath)) {
|
|
175
|
+
try {
|
|
176
|
+
const content = await this.readFile(promptsPath);
|
|
177
|
+
const parsed = yaml.parse(content) || {};
|
|
178
|
+
|
|
179
|
+
if (Array.isArray(parsed.prompts)) {
|
|
180
|
+
const originalCount = parsed.prompts.length;
|
|
181
|
+
parsed.prompts = parsed.prompts.filter((entry) => !entry.name || !entry.name.startsWith('bmad-'));
|
|
182
|
+
const removedCount = originalCount - parsed.prompts.length;
|
|
183
|
+
|
|
184
|
+
if (removedCount > 0) {
|
|
185
|
+
if (parsed.prompts.length === 0) {
|
|
186
|
+
// If no entries remain, remove the file entirely
|
|
187
|
+
await fs.remove(promptsPath);
|
|
188
|
+
} else {
|
|
189
|
+
await this.writeFile(promptsPath, yaml.stringify(parsed, { lineWidth: 0 }));
|
|
190
|
+
}
|
|
191
|
+
if (!options.silent) {
|
|
192
|
+
await prompts.log.message(`Removed ${removedCount} BMAD entries from ${this.promptsFile}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
} catch {
|
|
197
|
+
// If parsing fails, leave file as-is
|
|
198
|
+
if (!options.silent) {
|
|
199
|
+
await prompts.log.warn(`Warning: Could not parse ${this.promptsFile} for cleanup`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Remove empty .rovodev directories
|
|
205
|
+
if (await this.pathExists(workflowsPath)) {
|
|
206
|
+
const remaining = await fs.readdir(workflowsPath);
|
|
207
|
+
if (remaining.length === 0) {
|
|
208
|
+
await fs.remove(workflowsPath);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const rovoDirPath = path.join(projectDir, this.rovoDir);
|
|
213
|
+
if (await this.pathExists(rovoDirPath)) {
|
|
214
|
+
const remaining = await fs.readdir(rovoDirPath);
|
|
215
|
+
if (remaining.length === 0) {
|
|
216
|
+
await fs.remove(rovoDirPath);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Detect whether Rovo Dev configuration exists in the project
|
|
223
|
+
* Checks for .rovodev/ dir with bmad files or bmad entries in prompts.yml
|
|
224
|
+
* @param {string} projectDir - Project directory
|
|
225
|
+
* @returns {boolean}
|
|
226
|
+
*/
|
|
227
|
+
async detect(projectDir) {
|
|
228
|
+
const workflowsPath = path.join(projectDir, this.rovoDir, this.workflowsDir);
|
|
229
|
+
|
|
230
|
+
// Check for bmad files in workflows dir
|
|
231
|
+
if (await fs.pathExists(workflowsPath)) {
|
|
232
|
+
const entries = await fs.readdir(workflowsPath);
|
|
233
|
+
if (entries.some((entry) => entry.startsWith('bmad-'))) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Check for bmad entries in prompts.yml
|
|
239
|
+
const promptsPath = path.join(projectDir, this.rovoDir, this.promptsFile);
|
|
240
|
+
if (await fs.pathExists(promptsPath)) {
|
|
241
|
+
try {
|
|
242
|
+
const content = await fs.readFile(promptsPath, 'utf8');
|
|
243
|
+
const parsed = yaml.parse(content);
|
|
244
|
+
if (parsed && Array.isArray(parsed.prompts)) {
|
|
245
|
+
return parsed.prompts.some((entry) => entry.name && entry.name.startsWith('bmad-'));
|
|
246
|
+
}
|
|
247
|
+
} catch {
|
|
248
|
+
// If parsing fails, check raw content
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
module.exports = { RovoDevSetup };
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const { toColonPath, toDashPath, customAgentColonName, customAgentDashName, BMAD_FOLDER_NAME } = require('./path-utils');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates launcher command files for each agent
|
|
7
|
+
* Similar to WorkflowCommandGenerator but for agents
|
|
8
|
+
*/
|
|
9
|
+
class AgentCommandGenerator {
|
|
10
|
+
constructor(bmadFolderName = BMAD_FOLDER_NAME) {
|
|
11
|
+
this.templatePath = path.join(__dirname, '../templates/agent-command-template.md');
|
|
12
|
+
this.bmadFolderName = bmadFolderName;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Collect agent artifacts for IDE installation
|
|
17
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
18
|
+
* @param {Array} selectedModules - Modules to include
|
|
19
|
+
* @returns {Object} Artifacts array with metadata
|
|
20
|
+
*/
|
|
21
|
+
async collectAgentArtifacts(bmadDir, selectedModules = []) {
|
|
22
|
+
const { getAgentsFromBmad } = require('./bmad-artifacts');
|
|
23
|
+
|
|
24
|
+
// Get agents from INSTALLED bmad/ directory
|
|
25
|
+
const agents = await getAgentsFromBmad(bmadDir, selectedModules);
|
|
26
|
+
|
|
27
|
+
const artifacts = [];
|
|
28
|
+
|
|
29
|
+
for (const agent of agents) {
|
|
30
|
+
const launcherContent = await this.generateLauncherContent(agent);
|
|
31
|
+
// Use relativePath if available (for nested agents), otherwise just name with .md
|
|
32
|
+
const agentPathInModule = agent.relativePath || `${agent.name}.md`;
|
|
33
|
+
// Calculate the relative agent path (e.g., bmm/agents/pm.md)
|
|
34
|
+
let agentRelPath = agent.path || '';
|
|
35
|
+
// Normalize path separators for cross-platform compatibility
|
|
36
|
+
agentRelPath = agentRelPath.replaceAll('\\', '/');
|
|
37
|
+
// Remove _bmad/ prefix if present to get relative path from project root
|
|
38
|
+
// Handle both absolute paths (/path/to/_bmad/...) and relative paths (_bmad/...)
|
|
39
|
+
if (agentRelPath.includes('_bmad/')) {
|
|
40
|
+
const parts = agentRelPath.split(/_bmad\//);
|
|
41
|
+
if (parts.length > 1) {
|
|
42
|
+
agentRelPath = parts.slice(1).join('/');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
artifacts.push({
|
|
46
|
+
type: 'agent-launcher',
|
|
47
|
+
name: agent.name,
|
|
48
|
+
description: agent.description || `${agent.name} agent`,
|
|
49
|
+
module: agent.module,
|
|
50
|
+
relativePath: path.join(agent.module, 'agents', agentPathInModule), // For command filename
|
|
51
|
+
agentPath: agentRelPath, // Relative path to actual agent file
|
|
52
|
+
content: launcherContent,
|
|
53
|
+
sourcePath: agent.path,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
artifacts,
|
|
59
|
+
counts: {
|
|
60
|
+
agents: agents.length,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Generate launcher content for an agent
|
|
67
|
+
* @param {Object} agent - Agent metadata
|
|
68
|
+
* @returns {string} Launcher file content
|
|
69
|
+
*/
|
|
70
|
+
async generateLauncherContent(agent) {
|
|
71
|
+
// Load the template
|
|
72
|
+
const template = await fs.readFile(this.templatePath, 'utf8');
|
|
73
|
+
|
|
74
|
+
// Replace template variables
|
|
75
|
+
// Use relativePath if available (for nested agents), otherwise just name with .md
|
|
76
|
+
const agentPathInModule = agent.relativePath || `${agent.name}.md`;
|
|
77
|
+
return template
|
|
78
|
+
.replaceAll('{{name}}', agent.name)
|
|
79
|
+
.replaceAll('{{module}}', agent.module)
|
|
80
|
+
.replaceAll('{{path}}', agentPathInModule)
|
|
81
|
+
.replaceAll('{{description}}', agent.description || `${agent.name} agent`)
|
|
82
|
+
.replaceAll('_bmad', this.bmadFolderName)
|
|
83
|
+
.replaceAll('_bmad', '_bmad');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Write agent launcher artifacts to IDE commands directory
|
|
88
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
89
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
90
|
+
* @returns {number} Count of launchers written
|
|
91
|
+
*/
|
|
92
|
+
async writeAgentLaunchers(baseCommandsDir, artifacts) {
|
|
93
|
+
let writtenCount = 0;
|
|
94
|
+
|
|
95
|
+
for (const artifact of artifacts) {
|
|
96
|
+
if (artifact.type === 'agent-launcher') {
|
|
97
|
+
const moduleAgentsDir = path.join(baseCommandsDir, artifact.module, 'agents');
|
|
98
|
+
await fs.ensureDir(moduleAgentsDir);
|
|
99
|
+
|
|
100
|
+
const launcherPath = path.join(moduleAgentsDir, `${artifact.name}.md`);
|
|
101
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
102
|
+
writtenCount++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return writtenCount;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Write agent launcher artifacts using underscore format (Windows-compatible)
|
|
111
|
+
* Creates flat files like: bmad_bmm_pm.md
|
|
112
|
+
*
|
|
113
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
114
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
115
|
+
* @returns {number} Count of launchers written
|
|
116
|
+
*/
|
|
117
|
+
async writeColonArtifacts(baseCommandsDir, artifacts) {
|
|
118
|
+
let writtenCount = 0;
|
|
119
|
+
|
|
120
|
+
for (const artifact of artifacts) {
|
|
121
|
+
if (artifact.type === 'agent-launcher') {
|
|
122
|
+
// Convert relativePath to underscore format: bmm/agents/pm.md → bmad_bmm_pm.md
|
|
123
|
+
const flatName = toColonPath(artifact.relativePath);
|
|
124
|
+
const launcherPath = path.join(baseCommandsDir, flatName);
|
|
125
|
+
await fs.ensureDir(path.dirname(launcherPath));
|
|
126
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
127
|
+
writtenCount++;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return writtenCount;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Write agent launcher artifacts using dash format (NEW STANDARD)
|
|
136
|
+
* Creates flat files like: bmad-agent-bmm-pm.md
|
|
137
|
+
*
|
|
138
|
+
* The bmad-agent- prefix distinguishes agents from workflows/tasks/tools.
|
|
139
|
+
*
|
|
140
|
+
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
141
|
+
* @param {Array} artifacts - Agent launcher artifacts
|
|
142
|
+
* @returns {number} Count of launchers written
|
|
143
|
+
*/
|
|
144
|
+
async writeDashArtifacts(baseCommandsDir, artifacts) {
|
|
145
|
+
let writtenCount = 0;
|
|
146
|
+
|
|
147
|
+
for (const artifact of artifacts) {
|
|
148
|
+
if (artifact.type === 'agent-launcher') {
|
|
149
|
+
// Convert relativePath to dash format: bmm/agents/pm.md → bmad-agent-bmm-pm.md
|
|
150
|
+
const flatName = toDashPath(artifact.relativePath);
|
|
151
|
+
const launcherPath = path.join(baseCommandsDir, flatName);
|
|
152
|
+
await fs.ensureDir(path.dirname(launcherPath));
|
|
153
|
+
await fs.writeFile(launcherPath, artifact.content);
|
|
154
|
+
writtenCount++;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return writtenCount;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get the custom agent name in underscore format (Windows-compatible)
|
|
163
|
+
* @param {string} agentName - Custom agent name
|
|
164
|
+
* @returns {string} Underscore-formatted filename
|
|
165
|
+
*/
|
|
166
|
+
getCustomAgentColonName(agentName) {
|
|
167
|
+
return customAgentColonName(agentName);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Get the custom agent name in underscore format (Windows-compatible)
|
|
172
|
+
* @param {string} agentName - Custom agent name
|
|
173
|
+
* @returns {string} Underscore-formatted filename
|
|
174
|
+
*/
|
|
175
|
+
getCustomAgentDashName(agentName) {
|
|
176
|
+
return customAgentDashName(agentName);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
module.exports = { AgentCommandGenerator };
|