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,92 @@
|
|
|
1
|
+
name: indexing-specialist
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: Specialized agent for database index design, optimization, and maintenance strategies
|
|
4
|
+
|
|
5
|
+
system_prompt: |
|
|
6
|
+
You are Iliass, an Indexing Specialist, a Database Index Design and Optimization Expert.
|
|
7
|
+
|
|
8
|
+
Your capabilities:
|
|
9
|
+
- Index design and strategy
|
|
10
|
+
- Index type selection (B-tree, Hash, GIN, GiST, etc.)
|
|
11
|
+
- Covering index design
|
|
12
|
+
- Partial index optimization
|
|
13
|
+
- Composite index ordering
|
|
14
|
+
- Index usage analysis
|
|
15
|
+
- Index maintenance strategies
|
|
16
|
+
- Index fragmentation management
|
|
17
|
+
- Index size optimization
|
|
18
|
+
- Index performance monitoring
|
|
19
|
+
|
|
20
|
+
Your communication style:
|
|
21
|
+
- Strategic and analytical, focusing on index design principles, query patterns, and performance trade-offs
|
|
22
|
+
- Provides specific index definitions with explanations of their purpose and impact
|
|
23
|
+
- Considers the full lifecycle of indexes from creation to maintenance
|
|
24
|
+
- Explains the reasoning behind index design decisions
|
|
25
|
+
|
|
26
|
+
Your principles:
|
|
27
|
+
- Design indexes based on actual query patterns
|
|
28
|
+
- Prioritize indexes for the most frequent and expensive queries
|
|
29
|
+
- Consider the write vs. read trade-off
|
|
30
|
+
- Use appropriate index types for the data and queries
|
|
31
|
+
- Avoid over-indexing to minimize write overhead
|
|
32
|
+
- Monitor index usage and remove unused indexes
|
|
33
|
+
- Regularly maintain indexes to prevent fragmentation
|
|
34
|
+
- Consider index size and memory requirements
|
|
35
|
+
|
|
36
|
+
Your role:
|
|
37
|
+
Expert indexing specialist with deep knowledge of database index structures, query optimization, and index maintenance strategies. Specialized in designing efficient indexing solutions for various workloads and database systems including PostgreSQL, MySQL, SQL Server, and Oracle.
|
|
38
|
+
|
|
39
|
+
When designing indexes:
|
|
40
|
+
1. Analyze query patterns and access methods
|
|
41
|
+
2. Identify columns used in WHERE, JOIN, ORDER BY, and GROUP BY clauses
|
|
42
|
+
3. Evaluate selectivity and cardinality of columns
|
|
43
|
+
4. Consider the workload type (read-heavy, write-heavy, mixed)
|
|
44
|
+
5. Choose appropriate index types for the use case
|
|
45
|
+
6. Design composite indexes with optimal column ordering
|
|
46
|
+
7. Consider covering indexes to enable index-only scans
|
|
47
|
+
8. Evaluate partial indexes for filtered data
|
|
48
|
+
|
|
49
|
+
When analyzing existing indexes:
|
|
50
|
+
- Review index usage statistics
|
|
51
|
+
- Identify unused or rarely used indexes
|
|
52
|
+
- Find duplicate or redundant indexes
|
|
53
|
+
- Detect inefficient index designs
|
|
54
|
+
- Identify missing indexes for common queries
|
|
55
|
+
- Assess index fragmentation and size
|
|
56
|
+
|
|
57
|
+
Index types and when to use them:
|
|
58
|
+
- B-tree: Default for most use cases, supports equality and range queries
|
|
59
|
+
- Hash: Equality queries only, faster than B-tree for exact matches
|
|
60
|
+
- GIN: JSONB, arrays, full-text search, containment queries
|
|
61
|
+
- GiST: Geometric data, ranges, spatial queries
|
|
62
|
+
- BRIN: Very large tables with naturally ordered data
|
|
63
|
+
- SP-GiST: Partitioned data, phone numbers, IP addresses
|
|
64
|
+
|
|
65
|
+
Index design best practices:
|
|
66
|
+
- Index columns used in WHERE clauses for filtering
|
|
67
|
+
- Index columns used in JOIN conditions
|
|
68
|
+
- Index columns used in ORDER BY for sorting
|
|
69
|
+
- Consider composite indexes for multi-column queries
|
|
70
|
+
- Use covering indexes to include all query columns
|
|
71
|
+
- Use partial indexes for frequently filtered subsets
|
|
72
|
+
- Consider index-only scans for performance
|
|
73
|
+
- Monitor index size and memory usage
|
|
74
|
+
|
|
75
|
+
Index maintenance:
|
|
76
|
+
- Regularly rebuild fragmented indexes
|
|
77
|
+
- Update statistics after significant data changes
|
|
78
|
+
- Monitor index usage and remove unused indexes
|
|
79
|
+
- Schedule maintenance during low-traffic periods
|
|
80
|
+
- Use appropriate fill factors to reduce fragmentation
|
|
81
|
+
|
|
82
|
+
user_prompt_template: |
|
|
83
|
+
Task: {action}
|
|
84
|
+
|
|
85
|
+
Database Type: {db_type}
|
|
86
|
+
Table Name: {table_name}
|
|
87
|
+
Query Patterns: {query_patterns}
|
|
88
|
+
Schema Info: {schema_info}
|
|
89
|
+
Current Indexes: {current_indexes}
|
|
90
|
+
Workload Type: {workload_type}
|
|
91
|
+
|
|
92
|
+
Please provide comprehensive indexing recommendations and strategies.
|
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Query Optimizer Agent
|
|
3
|
+
|
|
4
|
+
Specialized agent for SQL query optimization, execution plan analysis, and query refactoring.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, Any, List, Optional
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
import asyncio
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class QueryOptimizationRequest:
|
|
14
|
+
"""Request data structure for the Query Optimizer agent."""
|
|
15
|
+
|
|
16
|
+
action: str
|
|
17
|
+
db_type: Optional[str] = None
|
|
18
|
+
query: Optional[str] = None
|
|
19
|
+
execution_plan: Optional[Dict[str, Any]] = None
|
|
20
|
+
schema_info: Optional[Dict[str, Any]] = None
|
|
21
|
+
performance_goal: Optional[str] = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class QueryOptimizerAgent:
|
|
25
|
+
"""
|
|
26
|
+
Query Optimizer - Expert in SQL query optimization and execution plan analysis.
|
|
27
|
+
|
|
28
|
+
Specialized in analyzing SQL queries, understanding execution plans, and providing
|
|
29
|
+
optimization recommendations. Expert in query refactoring, index utilization, and
|
|
30
|
+
join optimization strategies.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(self):
|
|
34
|
+
"""Initialize the Query Optimizer agent."""
|
|
35
|
+
self.name = "Query Optimizer"
|
|
36
|
+
self.title = "SQL Query Optimization and Execution Plan Expert"
|
|
37
|
+
self.icon = "⚡"
|
|
38
|
+
self.capabilities = [
|
|
39
|
+
"SQL query analysis and optimization",
|
|
40
|
+
"Execution plan interpretation",
|
|
41
|
+
"Query refactoring and rewriting",
|
|
42
|
+
"Index utilization optimization",
|
|
43
|
+
"Join strategy optimization",
|
|
44
|
+
"Subquery optimization",
|
|
45
|
+
"CTE and window function optimization",
|
|
46
|
+
"Query performance prediction",
|
|
47
|
+
"Index design for queries",
|
|
48
|
+
"Query caching strategies",
|
|
49
|
+
]
|
|
50
|
+
self.role = "Query Optimization Expert"
|
|
51
|
+
self.identity = (
|
|
52
|
+
"Expert query optimizer with deep understanding of SQL query execution, "
|
|
53
|
+
"database query planners, and optimization techniques. Specialized in "
|
|
54
|
+
"transforming inefficient queries into high-performing alternatives."
|
|
55
|
+
)
|
|
56
|
+
self.communication_style = (
|
|
57
|
+
"Technical and precise, focusing on query mechanics, execution plans, "
|
|
58
|
+
"and optimization techniques. Provides concrete query rewrites with "
|
|
59
|
+
"explanations of why they perform better."
|
|
60
|
+
)
|
|
61
|
+
self.principles = [
|
|
62
|
+
"Understand the execution plan before optimizing",
|
|
63
|
+
"Optimize for the actual data distribution",
|
|
64
|
+
"Consider the query's place in the overall workload",
|
|
65
|
+
"Balance query complexity with maintainability",
|
|
66
|
+
"Use appropriate join types and orders",
|
|
67
|
+
"Leverage indexes effectively",
|
|
68
|
+
"Avoid unnecessary data processing",
|
|
69
|
+
"Test optimizations with realistic data volumes",
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
async def process(self, request: QueryOptimizationRequest) -> Dict[str, Any]:
|
|
73
|
+
"""
|
|
74
|
+
Process the query optimization request and return a response.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
request: The query optimization request to process
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
A dictionary containing the optimization analysis and recommendations
|
|
81
|
+
"""
|
|
82
|
+
action = request.action.lower()
|
|
83
|
+
|
|
84
|
+
if action == "analyze":
|
|
85
|
+
return await self._analyze_query(request)
|
|
86
|
+
elif action == "optimize":
|
|
87
|
+
return await self._optimize_query(request)
|
|
88
|
+
elif action == "rewrite":
|
|
89
|
+
return await self._rewrite_query(request)
|
|
90
|
+
elif action == "explain":
|
|
91
|
+
return await self._explain_plan(request)
|
|
92
|
+
elif action == "index":
|
|
93
|
+
return await self._design_indexes(request)
|
|
94
|
+
else:
|
|
95
|
+
return await self._handle_unknown_action(request)
|
|
96
|
+
|
|
97
|
+
async def _analyze_query(self, request: QueryOptimizationRequest) -> Dict[str, Any]:
|
|
98
|
+
"""
|
|
99
|
+
Analyze query performance.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
request: The request to process
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Query analysis results
|
|
106
|
+
"""
|
|
107
|
+
db_type = request.db_type or "PostgreSQL"
|
|
108
|
+
query = request.query or ""
|
|
109
|
+
execution_plan = request.execution_plan or {}
|
|
110
|
+
|
|
111
|
+
analysis = {
|
|
112
|
+
"status": "success",
|
|
113
|
+
"action": "analyze",
|
|
114
|
+
"db_type": db_type,
|
|
115
|
+
"query": query,
|
|
116
|
+
"query_type": self._identify_query_type(query),
|
|
117
|
+
"complexity": self._assess_complexity(query),
|
|
118
|
+
"performance_issues": self._identify_performance_issues(
|
|
119
|
+
query, execution_plan
|
|
120
|
+
),
|
|
121
|
+
"bottlenecks": self._identify_bottlenecks(execution_plan),
|
|
122
|
+
"optimization_potential": self._estimate_optimization_potential(
|
|
123
|
+
query, execution_plan
|
|
124
|
+
),
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return analysis
|
|
128
|
+
|
|
129
|
+
async def _optimize_query(
|
|
130
|
+
self, request: QueryOptimizationRequest
|
|
131
|
+
) -> Dict[str, Any]:
|
|
132
|
+
"""
|
|
133
|
+
Optimize query performance.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
request: The request to process
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
Query optimization recommendations
|
|
140
|
+
"""
|
|
141
|
+
db_type = request.db_type or "PostgreSQL"
|
|
142
|
+
query = request.query or ""
|
|
143
|
+
execution_plan = request.execution_plan or {}
|
|
144
|
+
|
|
145
|
+
optimization = {
|
|
146
|
+
"status": "success",
|
|
147
|
+
"action": "optimize",
|
|
148
|
+
"db_type": db_type,
|
|
149
|
+
"original_query": query,
|
|
150
|
+
"optimized_query": self._generate_optimized_query(query, db_type),
|
|
151
|
+
"optimizations_applied": self._list_optimizations(query, db_type),
|
|
152
|
+
"expected_improvement": self._estimate_improvement(query, execution_plan),
|
|
153
|
+
"index_recommendations": self._recommend_indexes_for_query(query, db_type),
|
|
154
|
+
"configuration_suggestions": self._suggest_configuration(query, db_type),
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return optimization
|
|
158
|
+
|
|
159
|
+
async def _rewrite_query(self, request: QueryOptimizationRequest) -> Dict[str, Any]:
|
|
160
|
+
"""
|
|
161
|
+
Rewrite query for better performance.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
request: The request to process
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
Query rewrite recommendations
|
|
168
|
+
"""
|
|
169
|
+
db_type = request.db_type or "PostgreSQL"
|
|
170
|
+
query = request.query or ""
|
|
171
|
+
|
|
172
|
+
rewrite = {
|
|
173
|
+
"status": "success",
|
|
174
|
+
"action": "rewrite",
|
|
175
|
+
"db_type": db_type,
|
|
176
|
+
"original_query": query,
|
|
177
|
+
"rewritten_query": self._rewrite_query_for_performance(query, db_type),
|
|
178
|
+
"rewrite_explanation": self._explain_rewrite(query, db_type),
|
|
179
|
+
"alternative_approaches": self._provide_alternatives(query, db_type),
|
|
180
|
+
"trade_offs": self._explain_trade_offs(query, db_type),
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return rewrite
|
|
184
|
+
|
|
185
|
+
async def _explain_plan(self, request: QueryOptimizationRequest) -> Dict[str, Any]:
|
|
186
|
+
"""
|
|
187
|
+
Explain execution plan.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
request: The request to process
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
Execution plan explanation
|
|
194
|
+
"""
|
|
195
|
+
db_type = request.db_type or "PostgreSQL"
|
|
196
|
+
execution_plan = request.execution_plan or {}
|
|
197
|
+
|
|
198
|
+
explanation = {
|
|
199
|
+
"status": "success",
|
|
200
|
+
"action": "explain",
|
|
201
|
+
"db_type": db_type,
|
|
202
|
+
"plan_summary": self._summarize_plan(execution_plan),
|
|
203
|
+
"step_by_step": self._explain_plan_steps(execution_plan),
|
|
204
|
+
"cost_analysis": self._analyze_plan_cost(execution_plan),
|
|
205
|
+
"bottlenecks": self._identify_plan_bottlenecks(execution_plan),
|
|
206
|
+
"optimization_opportunities": self._find_plan_optimizations(execution_plan),
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return explanation
|
|
210
|
+
|
|
211
|
+
async def _design_indexes(
|
|
212
|
+
self, request: QueryOptimizationRequest
|
|
213
|
+
) -> Dict[str, Any]:
|
|
214
|
+
"""
|
|
215
|
+
Design indexes for query optimization.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
request: The request to process
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
Index design recommendations
|
|
222
|
+
"""
|
|
223
|
+
db_type = request.db_type or "PostgreSQL"
|
|
224
|
+
query = request.query or ""
|
|
225
|
+
schema_info = request.schema_info or {}
|
|
226
|
+
|
|
227
|
+
index_design = {
|
|
228
|
+
"status": "success",
|
|
229
|
+
"action": "index",
|
|
230
|
+
"db_type": db_type,
|
|
231
|
+
"query": query,
|
|
232
|
+
"recommended_indexes": self._design_query_indexes(
|
|
233
|
+
query, schema_info, db_type
|
|
234
|
+
),
|
|
235
|
+
"index_types": self._recommend_index_types(query, db_type),
|
|
236
|
+
"index_ordering": self._recommend_index_ordering(query, db_type),
|
|
237
|
+
"partial_indexes": self._suggest_partial_indexes(query, db_type),
|
|
238
|
+
"covering_indexes": self._suggest_covering_indexes(query, db_type),
|
|
239
|
+
"maintenance_considerations": self._explain_index_maintenance(db_type),
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return index_design
|
|
243
|
+
|
|
244
|
+
async def _handle_unknown_action(
|
|
245
|
+
self, request: QueryOptimizationRequest
|
|
246
|
+
) -> Dict[str, Any]:
|
|
247
|
+
"""
|
|
248
|
+
Handle unknown action.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
request: The request to process
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
Error response
|
|
255
|
+
"""
|
|
256
|
+
return {
|
|
257
|
+
"status": "error",
|
|
258
|
+
"action": request.action,
|
|
259
|
+
"message": f"Unknown action: {request.action}",
|
|
260
|
+
"available_actions": [
|
|
261
|
+
"analyze",
|
|
262
|
+
"optimize",
|
|
263
|
+
"rewrite",
|
|
264
|
+
"explain",
|
|
265
|
+
"index",
|
|
266
|
+
],
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
def _identify_query_type(self, query: str) -> str:
|
|
270
|
+
"""Identify query type."""
|
|
271
|
+
query_upper = query.upper().strip()
|
|
272
|
+
if query_upper.startswith("SELECT"):
|
|
273
|
+
return "SELECT"
|
|
274
|
+
elif query_upper.startswith("INSERT"):
|
|
275
|
+
return "INSERT"
|
|
276
|
+
elif query_upper.startswith("UPDATE"):
|
|
277
|
+
return "UPDATE"
|
|
278
|
+
elif query_upper.startswith("DELETE"):
|
|
279
|
+
return "DELETE"
|
|
280
|
+
else:
|
|
281
|
+
return "UNKNOWN"
|
|
282
|
+
|
|
283
|
+
def _assess_complexity(self, query: str) -> str:
|
|
284
|
+
"""Assess query complexity."""
|
|
285
|
+
complexity_indicators = [
|
|
286
|
+
"JOIN",
|
|
287
|
+
"SUBQUERY",
|
|
288
|
+
"UNION",
|
|
289
|
+
"GROUP BY",
|
|
290
|
+
"HAVING",
|
|
291
|
+
"WINDOW",
|
|
292
|
+
"CTE",
|
|
293
|
+
]
|
|
294
|
+
|
|
295
|
+
count = sum(
|
|
296
|
+
1 for indicator in complexity_indicators if indicator in query.upper()
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
if count == 0:
|
|
300
|
+
return "simple"
|
|
301
|
+
elif count <= 2:
|
|
302
|
+
return "moderate"
|
|
303
|
+
else:
|
|
304
|
+
return "complex"
|
|
305
|
+
|
|
306
|
+
def _identify_performance_issues(
|
|
307
|
+
self, query: str, execution_plan: Dict[str, Any]
|
|
308
|
+
) -> List[str]:
|
|
309
|
+
"""Identify performance issues."""
|
|
310
|
+
issues = []
|
|
311
|
+
|
|
312
|
+
query_upper = query.upper()
|
|
313
|
+
|
|
314
|
+
if "SELECT *" in query_upper:
|
|
315
|
+
issues.append("Using SELECT * instead of specific columns")
|
|
316
|
+
|
|
317
|
+
if "ORDER BY" in query_upper and "LIMIT" not in query_upper:
|
|
318
|
+
issues.append("ORDER BY without LIMIT may process many rows")
|
|
319
|
+
|
|
320
|
+
if query_upper.count("JOIN") > 3:
|
|
321
|
+
issues.append("Multiple joins may benefit from optimization")
|
|
322
|
+
|
|
323
|
+
if execution_plan.get("seq_scan", False):
|
|
324
|
+
issues.append("Sequential scan detected - consider indexing")
|
|
325
|
+
|
|
326
|
+
if execution_plan.get("nested_loop", False):
|
|
327
|
+
issues.append("Nested loop join may be inefficient for large datasets")
|
|
328
|
+
|
|
329
|
+
return issues
|
|
330
|
+
|
|
331
|
+
def _identify_bottlenecks(self, execution_plan: Dict[str, Any]) -> List[str]:
|
|
332
|
+
"""Identify execution plan bottlenecks."""
|
|
333
|
+
bottlenecks = []
|
|
334
|
+
|
|
335
|
+
if execution_plan.get("high_cost", False):
|
|
336
|
+
bottlenecks.append("High cost operation detected")
|
|
337
|
+
|
|
338
|
+
if execution_plan.get("large_rows", False):
|
|
339
|
+
bottlenecks.append("Processing large number of rows")
|
|
340
|
+
|
|
341
|
+
if execution_plan.get("disk_spill", False):
|
|
342
|
+
bottlenecks.append("Disk spill detected - increase work_mem")
|
|
343
|
+
|
|
344
|
+
return bottlenecks
|
|
345
|
+
|
|
346
|
+
def _estimate_optimization_potential(
|
|
347
|
+
self, query: str, execution_plan: Dict[str, Any]
|
|
348
|
+
) -> str:
|
|
349
|
+
"""Estimate optimization potential."""
|
|
350
|
+
issues = self._identify_performance_issues(query, execution_plan)
|
|
351
|
+
|
|
352
|
+
if len(issues) == 0:
|
|
353
|
+
return "low"
|
|
354
|
+
elif len(issues) <= 2:
|
|
355
|
+
return "medium"
|
|
356
|
+
else:
|
|
357
|
+
return "high"
|
|
358
|
+
|
|
359
|
+
def _generate_optimized_query(self, query: str, db_type: str) -> str:
|
|
360
|
+
"""Generate optimized query."""
|
|
361
|
+
# Simple optimization examples
|
|
362
|
+
optimized = query
|
|
363
|
+
|
|
364
|
+
# Replace SELECT * with specific columns (placeholder)
|
|
365
|
+
if "SELECT *" in optimized.upper():
|
|
366
|
+
optimized = optimized.replace("SELECT *", "SELECT id, name, created_at")
|
|
367
|
+
|
|
368
|
+
# Add LIMIT if missing (placeholder)
|
|
369
|
+
if "ORDER BY" in optimized.upper() and "LIMIT" not in optimized.upper():
|
|
370
|
+
optimized += " LIMIT 1000"
|
|
371
|
+
|
|
372
|
+
return optimized
|
|
373
|
+
|
|
374
|
+
def _list_optimizations(self, query: str, db_type: str) -> List[Dict[str, Any]]:
|
|
375
|
+
"""List optimizations applied."""
|
|
376
|
+
optimizations = []
|
|
377
|
+
|
|
378
|
+
if "SELECT *" in query.upper():
|
|
379
|
+
optimizations.append(
|
|
380
|
+
{
|
|
381
|
+
"type": "column_selection",
|
|
382
|
+
"description": "Replaced SELECT * with specific columns",
|
|
383
|
+
"impact": "Reduces I/O and network transfer",
|
|
384
|
+
}
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
if "ORDER BY" in query.upper() and "LIMIT" not in query.upper():
|
|
388
|
+
optimizations.append(
|
|
389
|
+
{
|
|
390
|
+
"type": "limit_clause",
|
|
391
|
+
"description": "Added LIMIT clause",
|
|
392
|
+
"impact": "Prevents processing unnecessary rows",
|
|
393
|
+
}
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
return optimizations
|
|
397
|
+
|
|
398
|
+
def _estimate_improvement(
|
|
399
|
+
self, query: str, execution_plan: Dict[str, Any]
|
|
400
|
+
) -> Dict[str, str]:
|
|
401
|
+
"""Estimate performance improvement."""
|
|
402
|
+
return {
|
|
403
|
+
"execution_time": "30-70% faster",
|
|
404
|
+
"resource_usage": "40-60% reduction",
|
|
405
|
+
"io_operations": "50-80% reduction",
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
def _recommend_indexes_for_query(
|
|
409
|
+
self, query: str, db_type: str
|
|
410
|
+
) -> List[Dict[str, Any]]:
|
|
411
|
+
"""Recommend indexes for query."""
|
|
412
|
+
return [
|
|
413
|
+
{
|
|
414
|
+
"table": "users",
|
|
415
|
+
"columns": ["email"],
|
|
416
|
+
"type": "btree",
|
|
417
|
+
"unique": True,
|
|
418
|
+
"reason": "Frequent WHERE clause on email",
|
|
419
|
+
},
|
|
420
|
+
]
|
|
421
|
+
|
|
422
|
+
def _suggest_configuration(self, query: str, db_type: str) -> List[Dict[str, Any]]:
|
|
423
|
+
"""Suggest configuration changes."""
|
|
424
|
+
return [
|
|
425
|
+
{
|
|
426
|
+
"parameter": "work_mem",
|
|
427
|
+
"value": "16MB",
|
|
428
|
+
"reason": "Improve sort and hash operations",
|
|
429
|
+
},
|
|
430
|
+
]
|
|
431
|
+
|
|
432
|
+
def _rewrite_query_for_performance(self, query: str, db_type: str) -> str:
|
|
433
|
+
"""Rewrite query for performance."""
|
|
434
|
+
# Example rewrite: subquery to JOIN
|
|
435
|
+
if "IN (SELECT" in query.upper():
|
|
436
|
+
# Simple placeholder rewrite
|
|
437
|
+
return query.replace("IN (SELECT", "JOIN")
|
|
438
|
+
|
|
439
|
+
return query
|
|
440
|
+
|
|
441
|
+
def _explain_rewrite(self, query: str, db_type: str) -> str:
|
|
442
|
+
"""Explain query rewrite."""
|
|
443
|
+
return "Rewritten to use JOIN instead of subquery for better performance"
|
|
444
|
+
|
|
445
|
+
def _provide_alternatives(self, query: str, db_type: str) -> List[Dict[str, Any]]:
|
|
446
|
+
"""Provide alternative approaches."""
|
|
447
|
+
return [
|
|
448
|
+
{
|
|
449
|
+
"approach": "Use EXISTS instead of IN",
|
|
450
|
+
"when": "Checking for existence in subquery",
|
|
451
|
+
"benefit": "Can be faster with proper indexing",
|
|
452
|
+
},
|
|
453
|
+
]
|
|
454
|
+
|
|
455
|
+
def _explain_trade_offs(self, query: str, db_type: str) -> List[str]:
|
|
456
|
+
"""Explain trade-offs."""
|
|
457
|
+
return [
|
|
458
|
+
"More complex queries may be harder to maintain",
|
|
459
|
+
"Indexing improves read performance but slows writes",
|
|
460
|
+
"Denormalization improves read speed but complicates updates",
|
|
461
|
+
]
|
|
462
|
+
|
|
463
|
+
def _summarize_plan(self, execution_plan: Dict[str, Any]) -> str:
|
|
464
|
+
"""Summarize execution plan."""
|
|
465
|
+
return "Query uses index scan with nested loop join"
|
|
466
|
+
|
|
467
|
+
def _explain_plan_steps(
|
|
468
|
+
self, execution_plan: Dict[str, Any]
|
|
469
|
+
) -> List[Dict[str, Any]]:
|
|
470
|
+
"""Explain plan steps."""
|
|
471
|
+
return [
|
|
472
|
+
{"step": 1, "operation": "Index Scan", "table": "users", "cost": "low"},
|
|
473
|
+
{"step": 2, "operation": "Nested Loop", "cost": "medium"},
|
|
474
|
+
{"step": 3, "operation": "Sort", "cost": "medium"},
|
|
475
|
+
]
|
|
476
|
+
|
|
477
|
+
def _analyze_plan_cost(self, execution_plan: Dict[str, Any]) -> Dict[str, Any]:
|
|
478
|
+
"""Analyze plan cost."""
|
|
479
|
+
return {
|
|
480
|
+
"total_cost": "medium",
|
|
481
|
+
"startup_cost": "low",
|
|
482
|
+
"rows_estimated": 1000,
|
|
483
|
+
"width": "100 bytes",
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
def _identify_plan_bottlenecks(self, execution_plan: Dict[str, Any]) -> List[str]:
|
|
487
|
+
"""Identify plan bottlenecks."""
|
|
488
|
+
return ["Sort operation on large dataset"]
|
|
489
|
+
|
|
490
|
+
def _find_plan_optimizations(self, execution_plan: Dict[str, Any]) -> List[str]:
|
|
491
|
+
"""Find plan optimizations."""
|
|
492
|
+
return ["Add index on sort column", "Increase work_mem for sort"]
|
|
493
|
+
|
|
494
|
+
def _design_query_indexes(
|
|
495
|
+
self, query: str, schema_info: Dict[str, Any], db_type: str
|
|
496
|
+
) -> List[Dict[str, Any]]:
|
|
497
|
+
"""Design indexes for query."""
|
|
498
|
+
return [
|
|
499
|
+
{
|
|
500
|
+
"name": "idx_users_email",
|
|
501
|
+
"table": "users",
|
|
502
|
+
"columns": ["email"],
|
|
503
|
+
"type": "btree",
|
|
504
|
+
"unique": True,
|
|
505
|
+
},
|
|
506
|
+
]
|
|
507
|
+
|
|
508
|
+
def _recommend_index_types(self, query: str, db_type: str) -> List[Dict[str, Any]]:
|
|
509
|
+
"""Recommend index types."""
|
|
510
|
+
return [
|
|
511
|
+
{"type": "btree", "use_case": "Equality and range queries"},
|
|
512
|
+
{"type": "hash", "use_case": "Equality queries only"},
|
|
513
|
+
{"type": "gin", "use_case": "JSONB and array columns"},
|
|
514
|
+
]
|
|
515
|
+
|
|
516
|
+
def _recommend_index_ordering(self, query: str, db_type: str) -> List[str]:
|
|
517
|
+
"""Recommend index column ordering."""
|
|
518
|
+
return ["Most selective column first", "Equality columns before range columns"]
|
|
519
|
+
|
|
520
|
+
def _suggest_partial_indexes(
|
|
521
|
+
self, query: str, db_type: str
|
|
522
|
+
) -> List[Dict[str, Any]]:
|
|
523
|
+
"""Suggest partial indexes."""
|
|
524
|
+
return [
|
|
525
|
+
{
|
|
526
|
+
"condition": "WHERE active = true",
|
|
527
|
+
"benefit": "Smaller index, faster queries",
|
|
528
|
+
},
|
|
529
|
+
]
|
|
530
|
+
|
|
531
|
+
def _suggest_covering_indexes(
|
|
532
|
+
self, query: str, db_type: str
|
|
533
|
+
) -> List[Dict[str, Any]]:
|
|
534
|
+
"""Suggest covering indexes."""
|
|
535
|
+
return [
|
|
536
|
+
{
|
|
537
|
+
"columns": ["user_id", "created_at", "status"],
|
|
538
|
+
"benefit": "Index-only scan, no table access needed",
|
|
539
|
+
},
|
|
540
|
+
]
|
|
541
|
+
|
|
542
|
+
def _explain_index_maintenance(self, db_type: str) -> List[str]:
|
|
543
|
+
"""Explain index maintenance considerations."""
|
|
544
|
+
return [
|
|
545
|
+
"Indexes slow down INSERT, UPDATE, DELETE operations",
|
|
546
|
+
"Regular index maintenance (VACUUM, ANALYZE) required",
|
|
547
|
+
"Monitor index usage and remove unused indexes",
|
|
548
|
+
]
|
|
549
|
+
|
|
550
|
+
def get_info(self) -> Dict[str, Any]:
|
|
551
|
+
"""
|
|
552
|
+
Get agent information.
|
|
553
|
+
|
|
554
|
+
Returns:
|
|
555
|
+
Agent information dictionary
|
|
556
|
+
"""
|
|
557
|
+
return {
|
|
558
|
+
"name": self.name,
|
|
559
|
+
"title": self.title,
|
|
560
|
+
"icon": self.icon,
|
|
561
|
+
"role": self.role,
|
|
562
|
+
"capabilities": self.capabilities,
|
|
563
|
+
"identity": self.identity,
|
|
564
|
+
"communication_style": self.communication_style,
|
|
565
|
+
"principles": self.principles,
|
|
566
|
+
}
|