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,138 @@
|
|
|
1
|
+
"""Scenario tests for the Tech Writer agent."""
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
# Add the app directory to the path
|
|
8
|
+
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "app"))
|
|
9
|
+
|
|
10
|
+
from mmm.agents.tech_writer.agent import TechWriter
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def test_tech_writer_api_documentation():
|
|
14
|
+
"""Test API documentation capability."""
|
|
15
|
+
agent = TechWriter()
|
|
16
|
+
|
|
17
|
+
result = await agent.process(
|
|
18
|
+
"Create comprehensive API documentation for a RESTful user management service"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
assert result is not None
|
|
22
|
+
assert len(result) > 0
|
|
23
|
+
assert "api" in result.lower() or "documentation" in result.lower()
|
|
24
|
+
print("✓ test_tech_writer_api_documentation passed")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
async def test_tech_writer_user_guide():
|
|
28
|
+
"""Test user guide creation capability."""
|
|
29
|
+
agent = TechWriter()
|
|
30
|
+
|
|
31
|
+
result = await agent.process(
|
|
32
|
+
"Create a user guide for a project management application with step-by-step instructions"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
assert result is not None
|
|
36
|
+
assert len(result) > 0
|
|
37
|
+
assert "user guide" in result.lower() or "tutorial" in result.lower()
|
|
38
|
+
print("✓ test_tech_writer_user_guide passed")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
async def test_tech_writer_readme():
|
|
42
|
+
"""Test README creation capability."""
|
|
43
|
+
agent = TechWriter()
|
|
44
|
+
|
|
45
|
+
result = await agent.process(
|
|
46
|
+
"Create a comprehensive README for an open-source project with installation and usage instructions"
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
assert result is not None
|
|
50
|
+
assert len(result) > 0
|
|
51
|
+
assert "readme" in result.lower() or "getting started" in result.lower()
|
|
52
|
+
print("✓ test_tech_writer_readme passed")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
async def test_tech_writer_code_documentation():
|
|
56
|
+
"""Test code documentation capability."""
|
|
57
|
+
agent = TechWriter()
|
|
58
|
+
|
|
59
|
+
result = await agent.process(
|
|
60
|
+
"Document a complex authentication module with inline comments and docstrings"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
assert result is not None
|
|
64
|
+
assert len(result) > 0
|
|
65
|
+
assert "document" in result.lower() or "comment" in result.lower()
|
|
66
|
+
print("✓ test_tech_writer_code_documentation passed")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
async def test_tech_writer_architecture_docs():
|
|
70
|
+
"""Test architecture documentation capability."""
|
|
71
|
+
agent = TechWriter()
|
|
72
|
+
|
|
73
|
+
result = await agent.process(
|
|
74
|
+
"Create architecture documentation for a microservices-based e-commerce platform"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
assert result is not None
|
|
78
|
+
assert len(result) > 0
|
|
79
|
+
assert "architecture" in result.lower() or "design" in result.lower()
|
|
80
|
+
print("✓ test_tech_writer_architecture_docs passed")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
async def test_tech_writer_troubleshooting_guide():
|
|
84
|
+
"""Test troubleshooting guide creation capability."""
|
|
85
|
+
agent = TechWriter()
|
|
86
|
+
|
|
87
|
+
result = await agent.process(
|
|
88
|
+
"Create a troubleshooting guide for common issues in a web application"
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
assert result is not None
|
|
92
|
+
assert len(result) > 0
|
|
93
|
+
assert "troubleshoot" in result.lower() or "issue" in result.lower()
|
|
94
|
+
print("✓ test_tech_writer_troubleshooting_guide passed")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
async def test_tech_writer_release_notes():
|
|
98
|
+
"""Test release notes creation capability."""
|
|
99
|
+
agent = TechWriter()
|
|
100
|
+
|
|
101
|
+
result = await agent.process(
|
|
102
|
+
"Create release notes for version 2.0 of a software product with new features and bug fixes"
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
assert result is not None
|
|
106
|
+
assert len(result) > 0
|
|
107
|
+
assert "release" in result.lower() or "changelog" in result.lower()
|
|
108
|
+
print("✓ test_tech_writer_release_notes passed")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
async def main():
|
|
112
|
+
"""Run all scenario tests."""
|
|
113
|
+
print("Running Tech Writer agent scenario tests...\n")
|
|
114
|
+
|
|
115
|
+
tests = [
|
|
116
|
+
test_tech_writer_api_documentation,
|
|
117
|
+
test_tech_writer_user_guide,
|
|
118
|
+
test_tech_writer_readme,
|
|
119
|
+
test_tech_writer_code_documentation,
|
|
120
|
+
test_tech_writer_architecture_docs,
|
|
121
|
+
test_tech_writer_troubleshooting_guide,
|
|
122
|
+
test_tech_writer_release_notes,
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
for test in tests:
|
|
126
|
+
try:
|
|
127
|
+
await test()
|
|
128
|
+
except Exception as e:
|
|
129
|
+
print(f"✗ {test.__name__} failed: {e}")
|
|
130
|
+
import traceback
|
|
131
|
+
|
|
132
|
+
traceback.print_exc()
|
|
133
|
+
|
|
134
|
+
print("\nAll Tech Writer agent scenario tests completed!")
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
if __name__ == "__main__":
|
|
138
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Scenario tests for UX Designer Agent
|
|
3
|
+
|
|
4
|
+
Tests the UX Designer agent's ability to handle various UX design tasks
|
|
5
|
+
including user research, interaction design, and experience strategy.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
import os
|
|
10
|
+
import asyncio
|
|
11
|
+
import importlib.util
|
|
12
|
+
|
|
13
|
+
# Load the agent directly from file path (due to hyphen in directory name)
|
|
14
|
+
agent_path = os.path.join(
|
|
15
|
+
os.path.dirname(__file__),
|
|
16
|
+
"../../..",
|
|
17
|
+
"app",
|
|
18
|
+
"mmm",
|
|
19
|
+
"agents",
|
|
20
|
+
"ux-designer",
|
|
21
|
+
"agent.py",
|
|
22
|
+
)
|
|
23
|
+
spec = importlib.util.spec_from_file_location("ux_designer_agent", agent_path)
|
|
24
|
+
ux_designer_module = importlib.util.module_from_spec(spec)
|
|
25
|
+
sys.modules["ux_designer_agent"] = ux_designer_module
|
|
26
|
+
spec.loader.exec_module(ux_designer_module)
|
|
27
|
+
|
|
28
|
+
UXDesigner = ux_designer_module.UXDesigner
|
|
29
|
+
UXDesignerRequest = ux_designer_module.UXDesignerRequest
|
|
30
|
+
UXDesignerResponse = ux_designer_module.UXDesignerResponse
|
|
31
|
+
UXDesignAction = ux_designer_module.UXDesignAction
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
async def test_scenario_1_redisplay_menu():
|
|
35
|
+
"""Test: User requests to see the menu"""
|
|
36
|
+
agent = UXDesigner()
|
|
37
|
+
request = UXDesignerRequest(action=UXDesignAction.REDISPLAY_MENU)
|
|
38
|
+
|
|
39
|
+
response = await agent.process(request)
|
|
40
|
+
|
|
41
|
+
assert isinstance(response, UXDesignerResponse)
|
|
42
|
+
assert response.action_taken == UXDesignAction.REDISPLAY_MENU
|
|
43
|
+
assert "Menu" in response.content
|
|
44
|
+
assert "MH" in response.content or "menu" in response.content.lower()
|
|
45
|
+
print("✓ Scenario 1: Menu redisplay works correctly")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def test_scenario_2_chat_basic():
|
|
49
|
+
"""Test: User wants to chat about UX design"""
|
|
50
|
+
agent = UXDesigner()
|
|
51
|
+
request = UXDesignerRequest(
|
|
52
|
+
action=UXDesignAction.CHAT, user_input="I need help with a mobile app design"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
response = await agent.process(request)
|
|
56
|
+
|
|
57
|
+
assert isinstance(response, UXDesignerResponse)
|
|
58
|
+
assert response.action_taken == UXDesignAction.CHAT
|
|
59
|
+
assert "Sally" in response.content or "empathetic" in response.content.lower()
|
|
60
|
+
print("✓ Scenario 2: Basic chat works correctly")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
async def test_scenario_3_create_ux_design_basic():
|
|
64
|
+
"""Test: User wants to create a UX design with basic context"""
|
|
65
|
+
agent = UXDesigner()
|
|
66
|
+
request = UXDesignerRequest(
|
|
67
|
+
action=UXDesignAction.CREATE_UX_DESIGN,
|
|
68
|
+
target_audience="young professionals",
|
|
69
|
+
platform="mobile",
|
|
70
|
+
user_stories=[
|
|
71
|
+
"As a user, I want to quickly find nearby restaurants",
|
|
72
|
+
"As a user, I want to see ratings and reviews",
|
|
73
|
+
],
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
response = await agent.process(request)
|
|
77
|
+
|
|
78
|
+
assert isinstance(response, UXDesignerResponse)
|
|
79
|
+
assert response.action_taken == UXDesignAction.CREATE_UX_DESIGN
|
|
80
|
+
assert "young professionals" in response.content
|
|
81
|
+
assert "user flows" in response.content.lower()
|
|
82
|
+
assert response.user_flows is not None
|
|
83
|
+
assert len(response.user_flows) > 0
|
|
84
|
+
assert response.recommendations is not None
|
|
85
|
+
assert len(response.recommendations) > 0
|
|
86
|
+
print("✓ Scenario 3: Basic UX design creation works correctly")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
async def test_scenario_4_create_ux_design_with_project_context():
|
|
90
|
+
"""Test: User wants to create a UX design with detailed project context"""
|
|
91
|
+
agent = UXDesigner()
|
|
92
|
+
request = UXDesignerRequest(
|
|
93
|
+
action=UXDesignAction.CREATE_UX_DESIGN,
|
|
94
|
+
target_audience="enterprise developers",
|
|
95
|
+
platform="web",
|
|
96
|
+
project_context={
|
|
97
|
+
"feature_name": "Code Review Dashboard",
|
|
98
|
+
"goals": ["Improve review speed", "Increase code quality"],
|
|
99
|
+
"constraints": ["Must support dark mode", "Accessible"],
|
|
100
|
+
},
|
|
101
|
+
user_stories=[
|
|
102
|
+
"As a developer, I want to see pending reviews",
|
|
103
|
+
"As a developer, I want to filter by repository",
|
|
104
|
+
],
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
response = await agent.process(request)
|
|
108
|
+
|
|
109
|
+
assert isinstance(response, UXDesignerResponse)
|
|
110
|
+
assert response.action_taken == UXDesignAction.CREATE_UX_DESIGN
|
|
111
|
+
assert "enterprise developers" in response.content
|
|
112
|
+
assert "Code Review Dashboard" in response.content
|
|
113
|
+
assert response.wireframes is not None
|
|
114
|
+
assert len(response.wireframes) > 0
|
|
115
|
+
assert response.next_steps is not None
|
|
116
|
+
assert len(response.next_steps) > 0
|
|
117
|
+
print("✓ Scenario 4: UX design with project context works correctly")
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
async def test_scenario_5_create_ux_design_web_platform():
|
|
121
|
+
"""Test: UX design creation for web platform"""
|
|
122
|
+
agent = UXDesigner()
|
|
123
|
+
request = UXDesignerRequest(
|
|
124
|
+
action=UXDesignAction.CREATE_UX_DESIGN,
|
|
125
|
+
platform="web",
|
|
126
|
+
target_audience="online shoppers",
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
response = await agent.process(request)
|
|
130
|
+
|
|
131
|
+
assert isinstance(response, UXDesignerResponse)
|
|
132
|
+
assert response.action_taken == UXDesignAction.CREATE_UX_DESIGN
|
|
133
|
+
assert "online shoppers" in response.content
|
|
134
|
+
assert response.wireframes is not None
|
|
135
|
+
# Web platform should have standard wireframes
|
|
136
|
+
assert any(wf["screen"] == "Landing/Home" for wf in response.wireframes)
|
|
137
|
+
print("✓ Scenario 5: Web platform UX design works correctly")
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
async def test_scenario_6_create_ux_design_mobile_platform():
|
|
141
|
+
"""Test: UX design creation for mobile platform"""
|
|
142
|
+
agent = UXDesigner()
|
|
143
|
+
request = UXDesignerRequest(
|
|
144
|
+
action=UXDesignAction.CREATE_UX_DESIGN,
|
|
145
|
+
platform="mobile",
|
|
146
|
+
target_audience="fitness enthusiasts",
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
response = await agent.process(request)
|
|
150
|
+
|
|
151
|
+
assert isinstance(response, UXDesignerResponse)
|
|
152
|
+
assert response.action_taken == UXDesignAction.CREATE_UX_DESIGN
|
|
153
|
+
assert "fitness enthusiasts" in response.content
|
|
154
|
+
assert response.wireframes is not None
|
|
155
|
+
# Mobile platform should have navigation wireframe
|
|
156
|
+
assert any(wf["screen"] == "Navigation" for wf in response.wireframes)
|
|
157
|
+
print("✓ Scenario 6: Mobile platform UX design works correctly")
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
async def test_scenario_7_party_mode():
|
|
161
|
+
"""Test: User activates party mode"""
|
|
162
|
+
agent = UXDesigner()
|
|
163
|
+
request = UXDesignerRequest(action=UXDesignAction.PARTY_MODE)
|
|
164
|
+
|
|
165
|
+
response = await agent.process(request)
|
|
166
|
+
|
|
167
|
+
assert isinstance(response, UXDesignerResponse)
|
|
168
|
+
assert response.action_taken == UXDesignAction.PARTY_MODE
|
|
169
|
+
assert "PARTY MODE" in response.content or "party" in response.content.lower()
|
|
170
|
+
assert "🎉" in response.content or "🎨" in response.content
|
|
171
|
+
print("✓ Scenario 7: Party mode works correctly")
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
async def test_scenario_8_dismiss_agent():
|
|
175
|
+
"""Test: User dismisses the agent"""
|
|
176
|
+
agent = UXDesigner()
|
|
177
|
+
request = UXDesignerRequest(action=UXDesignAction.DISMISS)
|
|
178
|
+
|
|
179
|
+
response = await agent.process(request)
|
|
180
|
+
|
|
181
|
+
assert isinstance(response, UXDesignerResponse)
|
|
182
|
+
assert response.action_taken == UXDesignAction.DISMISS
|
|
183
|
+
assert (
|
|
184
|
+
"goodbye" in response.content.lower()
|
|
185
|
+
or "dismiss" in response.content.lower()
|
|
186
|
+
or "pleasure" in response.content.lower()
|
|
187
|
+
)
|
|
188
|
+
print("✓ Scenario 8: Agent dismissal works correctly")
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
async def test_scenario_9_user_flows_generation():
|
|
192
|
+
"""Test: User flows are generated correctly"""
|
|
193
|
+
agent = UXDesigner()
|
|
194
|
+
request = UXDesignerRequest(
|
|
195
|
+
action=UXDesignAction.CREATE_UX_DESIGN,
|
|
196
|
+
project_context={"feature_name": "User Profile Management"},
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
response = await agent.process(request)
|
|
200
|
+
|
|
201
|
+
assert isinstance(response, UXDesignerResponse)
|
|
202
|
+
assert response.user_flows is not None
|
|
203
|
+
assert len(response.user_flows) > 0
|
|
204
|
+
|
|
205
|
+
# Check that flows have required structure
|
|
206
|
+
for flow in response.user_flows:
|
|
207
|
+
assert "name" in flow
|
|
208
|
+
assert "steps" in flow
|
|
209
|
+
assert "emotional_journey" in flow
|
|
210
|
+
assert len(flow["steps"]) > 0
|
|
211
|
+
|
|
212
|
+
print("✓ Scenario 9: User flows generation works correctly")
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
async def test_scenario_10_wireframe_recommendations():
|
|
216
|
+
"""Test: Wireframe recommendations are generated correctly"""
|
|
217
|
+
agent = UXDesigner()
|
|
218
|
+
request = UXDesignerRequest(action=UXDesignAction.CREATE_UX_DESIGN, platform="web")
|
|
219
|
+
|
|
220
|
+
response = await agent.process(request)
|
|
221
|
+
|
|
222
|
+
assert isinstance(response, UXDesignerResponse)
|
|
223
|
+
assert response.wireframes is not None
|
|
224
|
+
assert len(response.wireframes) > 0
|
|
225
|
+
|
|
226
|
+
# Check that wireframes have required structure
|
|
227
|
+
for wf in response.wireframes:
|
|
228
|
+
assert "screen" in wf
|
|
229
|
+
assert "elements" in wf
|
|
230
|
+
assert "priority" in wf
|
|
231
|
+
assert len(wf["elements"]) > 0
|
|
232
|
+
assert wf["priority"] in ["High", "Medium", "Low"]
|
|
233
|
+
|
|
234
|
+
print("✓ Scenario 10: Wireframe recommendations work correctly")
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
async def test_scenario_11_design_principles_included():
|
|
238
|
+
"""Test: Design principles are included in response"""
|
|
239
|
+
agent = UXDesigner()
|
|
240
|
+
request = UXDesignerRequest(action=UXDesignAction.CREATE_UX_DESIGN)
|
|
241
|
+
|
|
242
|
+
response = await agent.process(request)
|
|
243
|
+
|
|
244
|
+
assert isinstance(response, UXDesignerResponse)
|
|
245
|
+
assert "user needs" in response.content.lower()
|
|
246
|
+
assert "feedback" in response.content.lower()
|
|
247
|
+
assert "empathy" in response.content.lower()
|
|
248
|
+
print("✓ Scenario 11: Design principles are included correctly")
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
async def test_scenario_12_next_steps_provided():
|
|
252
|
+
"""Test: Next steps are provided in response"""
|
|
253
|
+
agent = UXDesigner()
|
|
254
|
+
request = UXDesignerRequest(action=UXDesignAction.CREATE_UX_DESIGN)
|
|
255
|
+
|
|
256
|
+
response = await agent.process(request)
|
|
257
|
+
|
|
258
|
+
assert isinstance(response, UXDesignerResponse)
|
|
259
|
+
assert response.next_steps is not None
|
|
260
|
+
assert len(response.next_steps) > 0
|
|
261
|
+
|
|
262
|
+
# Check that next steps are numbered
|
|
263
|
+
for step in response.next_steps:
|
|
264
|
+
assert step.strip().startswith(("1.", "2.", "3.", "4.", "5.", "6.", "7.", "8."))
|
|
265
|
+
|
|
266
|
+
print("✓ Scenario 12: Next steps are provided correctly")
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
async def run_all_scenarios():
|
|
270
|
+
"""Run all scenario tests"""
|
|
271
|
+
print("\n" + "=" * 60)
|
|
272
|
+
print("Running UX Designer Agent Scenario Tests")
|
|
273
|
+
print("=" * 60 + "\n")
|
|
274
|
+
|
|
275
|
+
await test_scenario_1_redisplay_menu()
|
|
276
|
+
await test_scenario_2_chat_basic()
|
|
277
|
+
await test_scenario_3_create_ux_design_basic()
|
|
278
|
+
await test_scenario_4_create_ux_design_with_project_context()
|
|
279
|
+
await test_scenario_5_create_ux_design_web_platform()
|
|
280
|
+
await test_scenario_6_create_ux_design_mobile_platform()
|
|
281
|
+
await test_scenario_7_party_mode()
|
|
282
|
+
await test_scenario_8_dismiss_agent()
|
|
283
|
+
await test_scenario_9_user_flows_generation()
|
|
284
|
+
await test_scenario_10_wireframe_recommendations()
|
|
285
|
+
await test_scenario_11_design_principles_included()
|
|
286
|
+
await test_scenario_12_next_steps_provided()
|
|
287
|
+
|
|
288
|
+
print("\n" + "=" * 60)
|
|
289
|
+
print("✓ All 12 scenario tests passed!")
|
|
290
|
+
print("=" * 60 + "\n")
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
if __name__ == "__main__":
|
|
294
|
+
asyncio.run(run_all_scenarios())
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""Scenario tests for DB Performance Analyst Agent."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
# Add the app directory to the path
|
|
7
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../.."))
|
|
8
|
+
|
|
9
|
+
from app.packs.db_optimization.agents.db_performance_analyst.agent import (
|
|
10
|
+
DBPerformanceAnalystAgent,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_db_performance_analyst_basic_info():
|
|
15
|
+
"""Test that DB Performance Analyst provides basic information."""
|
|
16
|
+
agent = DBPerformanceAnalystAgent()
|
|
17
|
+
result = agent.get_info()
|
|
18
|
+
assert result is not None
|
|
19
|
+
assert "name" in result
|
|
20
|
+
assert result["name"] == "DB Performance Analyst"
|
|
21
|
+
assert "capabilities" in result
|
|
22
|
+
assert len(result["capabilities"]) > 0
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_db_performance_analyst_analyze():
|
|
26
|
+
"""Test that DB Performance Analyst can analyze performance."""
|
|
27
|
+
agent = DBPerformanceAnalystAgent()
|
|
28
|
+
result = agent.process("analyze")
|
|
29
|
+
assert result is not None
|
|
30
|
+
assert len(result) > 0
|
|
31
|
+
assert "analysis" in result or "recommendations" in result
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_db_performance_analyst_optimize():
|
|
35
|
+
"""Test that DB Performance Analyst can optimize performance."""
|
|
36
|
+
agent = DBPerformanceAnalystAgent()
|
|
37
|
+
result = agent.process("optimize")
|
|
38
|
+
assert result is not None
|
|
39
|
+
assert len(result) > 0
|
|
40
|
+
assert "optimizations" in result or "recommendations" in result
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_db_performance_analyst_monitor():
|
|
44
|
+
"""Test that DB Performance Analyst can set up monitoring."""
|
|
45
|
+
agent = DBPerformanceAnalystAgent()
|
|
46
|
+
result = agent.process("monitor")
|
|
47
|
+
assert result is not None
|
|
48
|
+
assert len(result) > 0
|
|
49
|
+
assert "monitoring" in result or "metrics" in result
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def test_db_performance_analyst_tune():
|
|
53
|
+
"""Test that DB Performance Analyst can tune configuration."""
|
|
54
|
+
agent = DBPerformanceAnalystAgent()
|
|
55
|
+
result = agent.process("tune")
|
|
56
|
+
assert result is not None
|
|
57
|
+
assert len(result) > 0
|
|
58
|
+
assert "configuration" in result or "tuning" in result
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_db_performance_analyst_scale():
|
|
62
|
+
"""Test that DB Performance Analyst can recommend scaling."""
|
|
63
|
+
agent = DBPerformanceAnalystAgent()
|
|
64
|
+
result = agent.process("scale")
|
|
65
|
+
assert result is not None
|
|
66
|
+
assert len(result) > 0
|
|
67
|
+
assert "scaling" in result or "strategy" in result
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_db_performance_analyst_slow_queries():
|
|
71
|
+
"""Test that DB Performance Analyst can handle slow query issues."""
|
|
72
|
+
agent = DBPerformanceAnalystAgent()
|
|
73
|
+
result = agent.process("analyze")
|
|
74
|
+
assert result is not None
|
|
75
|
+
assert len(result) > 0
|
|
76
|
+
# Check that the response contains relevant information
|
|
77
|
+
assert "performance" in str(result).lower() or "query" in str(result).lower()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
if __name__ == "__main__":
|
|
81
|
+
print("Running DB Performance Analyst Agent Scenario Tests...")
|
|
82
|
+
print()
|
|
83
|
+
|
|
84
|
+
tests = [
|
|
85
|
+
("Basic Info", test_db_performance_analyst_basic_info),
|
|
86
|
+
("Analyze Performance", test_db_performance_analyst_analyze),
|
|
87
|
+
("Optimize Performance", test_db_performance_analyst_optimize),
|
|
88
|
+
("Setup Monitoring", test_db_performance_analyst_monitor),
|
|
89
|
+
("Tune Configuration", test_db_performance_analyst_tune),
|
|
90
|
+
("Recommend Scaling", test_db_performance_analyst_scale),
|
|
91
|
+
("Slow Queries", test_db_performance_analyst_slow_queries),
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
passed = 0
|
|
95
|
+
failed = 0
|
|
96
|
+
|
|
97
|
+
for name, test_func in tests:
|
|
98
|
+
try:
|
|
99
|
+
test_func()
|
|
100
|
+
print(f"✓ {name}")
|
|
101
|
+
passed += 1
|
|
102
|
+
except Exception as e:
|
|
103
|
+
print(f"✗ {name}: {e}")
|
|
104
|
+
failed += 1
|
|
105
|
+
|
|
106
|
+
print()
|
|
107
|
+
print(f"Results: {passed} passed, {failed} failed")
|
|
108
|
+
sys.exit(0 if failed == 0 else 1)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""Scenario tests for Indexing Specialist Agent."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
# Add the app directory to the path
|
|
7
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../.."))
|
|
8
|
+
|
|
9
|
+
from app.packs.db_optimization.agents.indexing_specialist.agent import (
|
|
10
|
+
IndexingSpecialistAgent,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_indexing_specialist_basic_info():
|
|
15
|
+
"""Test that Indexing Specialist provides basic information."""
|
|
16
|
+
agent = IndexingSpecialistAgent()
|
|
17
|
+
result = agent.get_info()
|
|
18
|
+
assert result is not None
|
|
19
|
+
assert "name" in result
|
|
20
|
+
assert result["name"] == "Indexing Specialist"
|
|
21
|
+
assert "capabilities" in result
|
|
22
|
+
assert len(result["capabilities"]) > 0
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_indexing_specialist_design():
|
|
26
|
+
"""Test that Indexing Specialist can design indexes."""
|
|
27
|
+
agent = IndexingSpecialistAgent()
|
|
28
|
+
result = agent.process("design")
|
|
29
|
+
assert result is not None
|
|
30
|
+
assert len(result) > 0
|
|
31
|
+
assert "index" in result or "indexes" in result
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_indexing_specialist_analyze():
|
|
35
|
+
"""Test that Indexing Specialist can analyze indexes."""
|
|
36
|
+
agent = IndexingSpecialistAgent()
|
|
37
|
+
result = agent.process("analyze")
|
|
38
|
+
assert result is not None
|
|
39
|
+
assert len(result) > 0
|
|
40
|
+
assert "analysis" in result or "usage" in result
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_indexing_specialist_optimize():
|
|
44
|
+
"""Test that Indexing Specialist can optimize indexes."""
|
|
45
|
+
agent = IndexingSpecialistAgent()
|
|
46
|
+
result = agent.process("optimize")
|
|
47
|
+
assert result is not None
|
|
48
|
+
assert len(result) > 0
|
|
49
|
+
assert "optimization" in result or "optimize" in result
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def test_indexing_specialist_maintain():
|
|
53
|
+
"""Test that Indexing Specialist can provide maintenance recommendations."""
|
|
54
|
+
agent = IndexingSpecialistAgent()
|
|
55
|
+
result = agent.process("maintain")
|
|
56
|
+
assert result is not None
|
|
57
|
+
assert len(result) > 0
|
|
58
|
+
assert "maintenance" in result or "maintain" in result
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_indexing_specialist_recommend():
|
|
62
|
+
"""Test that Indexing Specialist can recommend strategies."""
|
|
63
|
+
agent = IndexingSpecialistAgent()
|
|
64
|
+
result = agent.process("recommend")
|
|
65
|
+
assert result is not None
|
|
66
|
+
assert len(result) > 0
|
|
67
|
+
assert "strategy" in result or "recommend" in result
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_indexing_specialist_covering_indexes():
|
|
71
|
+
"""Test that Indexing Specialist can design covering indexes."""
|
|
72
|
+
agent = IndexingSpecialistAgent()
|
|
73
|
+
result = agent.process("design")
|
|
74
|
+
assert result is not None
|
|
75
|
+
assert len(result) > 0
|
|
76
|
+
# Check that the response contains relevant information
|
|
77
|
+
assert "index" in str(result).lower() or "covering" in str(result).lower()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
if __name__ == "__main__":
|
|
81
|
+
print("Running Indexing Specialist Agent Scenario Tests...")
|
|
82
|
+
print()
|
|
83
|
+
|
|
84
|
+
tests = [
|
|
85
|
+
("Basic Info", test_indexing_specialist_basic_info),
|
|
86
|
+
("Design Indexes", test_indexing_specialist_design),
|
|
87
|
+
("Analyze Indexes", test_indexing_specialist_analyze),
|
|
88
|
+
("Optimize Indexes", test_indexing_specialist_optimize),
|
|
89
|
+
("Maintain Indexes", test_indexing_specialist_maintain),
|
|
90
|
+
("Recommend Strategy", test_indexing_specialist_recommend),
|
|
91
|
+
("Covering Indexes", test_indexing_specialist_covering_indexes),
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
passed = 0
|
|
95
|
+
failed = 0
|
|
96
|
+
|
|
97
|
+
for name, test_func in tests:
|
|
98
|
+
try:
|
|
99
|
+
test_func()
|
|
100
|
+
print(f"✓ {name}")
|
|
101
|
+
passed += 1
|
|
102
|
+
except Exception as e:
|
|
103
|
+
print(f"✗ {name}: {e}")
|
|
104
|
+
failed += 1
|
|
105
|
+
|
|
106
|
+
print()
|
|
107
|
+
print(f"Results: {passed} passed, {failed} failed")
|
|
108
|
+
sys.exit(0 if failed == 0 else 1)
|