mdan-method 2.6.3
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/.mdan/config/config.yaml +36 -0
- package/.mdan/state/MDAN-STATE.template.json +39 -0
- package/AGENTS.md +308 -0
- package/AGENTS_LIST.md +946 -0
- package/ARCHITECTURE.md +590 -0
- package/CHANGELOG.md +1770 -0
- package/CONTRIBUTING.md +512 -0
- package/INSTALL.md +246 -0
- package/LICENSE +30 -0
- package/MDAN.fr.md +259 -0
- package/README.md +233 -0
- package/SECURITY.md +85 -0
- package/USAGE.md +368 -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/cli/v1/mdan.py +421 -0
- package/cli/v1/mdan.sh +724 -0
- package/cli/v1/mdan_crewai.py +539 -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-mdan.md +172 -0
- package/docs/how-to/established-projects.md +117 -0
- package/docs/how-to/get-answers-about-mdan.md +134 -0
- package/docs/how-to/install-mdan.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/examples/crewai/crewai_auto_mode.py +62 -0
- package/examples/crewai/crewai_custom_crew.py +85 -0
- package/examples/crewai/crewai_debate.py +57 -0
- package/examples/crewai/crewai_with_serper.py +82 -0
- package/examples/crewai/crewai_with_sql.py +117 -0
- package/integrations/__init__.py +33 -0
- package/integrations/crewai/__init__.py +27 -0
- package/integrations/crewai/agents/__init__.py +21 -0
- package/integrations/crewai/agents/architect_agent.py +264 -0
- package/integrations/crewai/agents/dev_agent.py +271 -0
- package/integrations/crewai/agents/devops_agent.py +421 -0
- package/integrations/crewai/agents/doc_agent.py +388 -0
- package/integrations/crewai/agents/product_agent.py +203 -0
- package/integrations/crewai/agents/security_agent.py +386 -0
- package/integrations/crewai/agents/test_agent.py +358 -0
- package/integrations/crewai/agents/ux_agent.py +257 -0
- package/integrations/crewai/flows/__init__.py +13 -0
- package/integrations/crewai/flows/auto_flow.py +451 -0
- package/integrations/crewai/flows/build_flow.py +297 -0
- package/integrations/crewai/flows/debate_flow.py +422 -0
- package/integrations/crewai/flows/discovery_flow.py +267 -0
- package/integrations/crewai/orchestrator.py +558 -0
- package/integrations/crewai/skills/__init__.py +8 -0
- package/integrations/crewai/skills/skill_router.py +534 -0
- package/integrations/crewai/tools/__init__.py +11 -0
- package/integrations/crewai/tools/file_tool.py +355 -0
- package/integrations/crewai/tools/serper_tool.py +169 -0
- package/integrations/crewai/tools/sql_tool.py +435 -0
- package/integrations/docs/all-integrations.md +300 -0
- package/integrations/docs/cursor.md +74 -0
- package/integrations/docs/mcp.md +153 -0
- package/integrations/docs/windsurf.md +48 -0
- package/package.json +119 -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/requirements.txt +5 -0
- package/requirements_crewai.txt +37 -0
- package/src/agents/module-help.csv +31 -0
- package/src/agents/module.yaml +50 -0
- package/src/agents/team/analyst.agent.yaml +43 -0
- package/src/agents/team/architect.agent.yaml +29 -0
- package/src/agents/team/dev.agent.yaml +38 -0
- package/src/agents/team/pm.agent.yaml +44 -0
- package/src/agents/team/qa.agent.yaml +58 -0
- package/src/agents/team/quick-flow-solo-dev.agent.yaml +32 -0
- package/src/agents/team/sm.agent.yaml +37 -0
- package/src/agents/team/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
- package/src/agents/team/tech-writer/tech-writer.agent.yaml +46 -0
- package/src/agents/team/ux-designer.agent.yaml +27 -0
- package/src/agents/teams/default-party.csv +20 -0
- package/src/agents/teams/team-fullstack.yaml +12 -0
- package/src/core/WIZARD-ENGINE.md +94 -0
- package/src/core/agents/mdan-master.agent.yaml +133 -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/memory/MEMORY-AUTO.json +66 -0
- package/src/memory/MEMORY-SYSTEM.md +61 -0
- package/src/memory/v1-memory-system.md +197 -0
- package/src/memory/v1-resume-protocol.md +379 -0
- package/src/packs/db-optimization/agents/prompt.yaml +63 -0
- package/src/packs/devops-azure/agents/prompt.yaml +301 -0
- package/src/packs/fintech/agents/prompt.yaml +135 -0
- package/src/phases/auto/auto-01-load.md +165 -0
- package/src/phases/auto/auto-02-discover.md +207 -0
- package/src/phases/auto/auto-03-plan.md +509 -0
- package/src/phases/auto/auto-04-architect.md +567 -0
- package/src/phases/auto/auto-05-implement.md +713 -0
- package/src/phases/auto/auto-06-test.md +559 -0
- package/src/phases/auto/auto-07-deploy.md +510 -0
- package/src/phases/auto/auto-08-doc.md +970 -0
- package/src/phases/manual/01-discover.md +136 -0
- package/src/phases/manual/02-design.md +147 -0
- package/src/phases/manual/03-build.md +113 -0
- package/src/phases/manual/04-verify.md +107 -0
- package/src/phases/manual/05-ship.md +156 -0
- package/src/protocols/debate-protocol.md +58 -0
- package/src/protocols/universal-envelope.md +42 -0
- package/src/protocols/v1-debate-protocol.md +454 -0
- package/src/protocols/v1-universal-envelope.md +273 -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/src/wizards/01-discover/create-product-brief/steps/step-01-init.md +7 -0
- package/src/wizards/01-discover/create-product-brief/steps/step-02-vision.md +7 -0
- package/src/wizards/01-discover/create-product-brief/steps/step-03-users.md +7 -0
- package/src/wizards/01-discover/create-product-brief/steps/step-04-scope.md +7 -0
- package/src/wizards/01-discover/create-product-brief/steps/step-05-metrics.md +7 -0
- package/src/wizards/01-discover/create-product-brief/steps/step-06-complete.md +7 -0
- package/src/wizards/01-discover/create-product-brief/templates/product-brief.template.md +14 -0
- package/src/wizards/01-discover/create-product-brief/wizard.md +105 -0
- package/src/wizards/01-discover/research/domain-steps/step-01-init.md +137 -0
- package/src/wizards/01-discover/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/wizards/01-discover/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/wizards/01-discover/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/wizards/01-discover/research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/wizards/01-discover/research/domain-steps/step-06-research-synthesis.md +444 -0
- package/src/wizards/01-discover/research/market-steps/step-01-init.md +182 -0
- package/src/wizards/01-discover/research/market-steps/step-02-customer-behavior.md +237 -0
- package/src/wizards/01-discover/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/src/wizards/01-discover/research/market-steps/step-04-customer-decisions.md +259 -0
- package/src/wizards/01-discover/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/src/wizards/01-discover/research/market-steps/step-06-research-completion.md +476 -0
- package/src/wizards/01-discover/research/technical-steps/step-01-init.md +137 -0
- package/src/wizards/01-discover/research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/wizards/01-discover/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/wizards/01-discover/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/wizards/01-discover/research/technical-steps/step-05-implementation-research.md +233 -0
- package/src/wizards/01-discover/research/technical-steps/step-06-research-synthesis.md +487 -0
- package/src/wizards/01-discover/research/templates/research.template.md +29 -0
- package/src/wizards/01-discover/research/workflow-domain-research.md +54 -0
- package/src/wizards/01-discover/research/workflow-market-research.md +54 -0
- package/src/wizards/01-discover/research/workflow-technical-research.md +54 -0
- package/src/wizards/02-plan/create-prd/data/domain-complexity.csv +15 -0
- package/src/wizards/02-plan/create-prd/data/prd-purpose.md +197 -0
- package/src/wizards/02-plan/create-prd/data/project-types.csv +11 -0
- package/src/wizards/02-plan/create-prd/steps/step-01-init.md +191 -0
- package/src/wizards/02-plan/create-prd/steps/step-01b-continue.md +152 -0
- package/src/wizards/02-plan/create-prd/steps/step-02-discovery.md +224 -0
- package/src/wizards/02-plan/create-prd/steps/step-02b-vision.md +154 -0
- package/src/wizards/02-plan/create-prd/steps/step-02c-executive-summary.md +170 -0
- package/src/wizards/02-plan/create-prd/steps/step-03-success.md +226 -0
- package/src/wizards/02-plan/create-prd/steps/step-04-journeys.md +213 -0
- package/src/wizards/02-plan/create-prd/steps/step-05-domain.md +207 -0
- package/src/wizards/02-plan/create-prd/steps/step-06-innovation.md +226 -0
- package/src/wizards/02-plan/create-prd/steps/step-07-project-type.md +237 -0
- package/src/wizards/02-plan/create-prd/steps/step-08-scoping.md +228 -0
- package/src/wizards/02-plan/create-prd/steps/step-09-functional.md +231 -0
- package/src/wizards/02-plan/create-prd/steps/step-10-nonfunctional.md +242 -0
- package/src/wizards/02-plan/create-prd/steps/step-11-polish.md +217 -0
- package/src/wizards/02-plan/create-prd/steps/step-12-complete.md +124 -0
- package/src/wizards/02-plan/create-prd/templates/prd-template.md +10 -0
- package/src/wizards/02-plan/create-prd/wizard.md +63 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-01-init.md +135 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-06-design-system.md +252 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/src/wizards/02-plan/create-ux-design/steps/step-14-complete.md +171 -0
- package/src/wizards/02-plan/create-ux-design/templates/ux-design-template.md +13 -0
- package/src/wizards/02-plan/create-ux-design/wizard.md +42 -0
- package/src/wizards/03-architect/create-architecture/data/domain-complexity.csv +13 -0
- package/src/wizards/03-architect/create-architecture/data/project-types.csv +7 -0
- package/src/wizards/03-architect/create-architecture/steps/step-01-init.md +153 -0
- package/src/wizards/03-architect/create-architecture/steps/step-01b-continue.md +173 -0
- package/src/wizards/03-architect/create-architecture/steps/step-02-context.md +224 -0
- package/src/wizards/03-architect/create-architecture/steps/step-03-starter.md +329 -0
- package/src/wizards/03-architect/create-architecture/steps/step-04-decisions.md +318 -0
- package/src/wizards/03-architect/create-architecture/steps/step-05-patterns.md +359 -0
- package/src/wizards/03-architect/create-architecture/steps/step-06-structure.md +379 -0
- package/src/wizards/03-architect/create-architecture/steps/step-07-validation.md +359 -0
- package/src/wizards/03-architect/create-architecture/steps/step-08-complete.md +76 -0
- package/src/wizards/03-architect/create-architecture/templates/architecture-decision-template.md +12 -0
- package/src/wizards/03-architect/create-architecture/wizard.md +49 -0
- package/src/wizards/03-architect/create-epics/steps/step-01-validate-prerequisites.md +259 -0
- package/src/wizards/03-architect/create-epics/steps/step-02-design-epics.md +233 -0
- package/src/wizards/03-architect/create-epics/steps/step-03-create-stories.md +272 -0
- package/src/wizards/03-architect/create-epics/steps/step-04-final-validation.md +149 -0
- package/src/wizards/03-architect/create-epics/templates/epics-template.md +57 -0
- package/src/wizards/03-architect/create-epics/wizard.md +58 -0
- package/src/wizards/04-build/code-review/checklist.md +23 -0
- package/src/wizards/04-build/code-review/instructions.xml +227 -0
- package/src/wizards/04-build/code-review/workflow.yaml +43 -0
- package/src/wizards/04-build/dev-story/checklist.md +80 -0
- package/src/wizards/04-build/dev-story/instructions.xml +410 -0
- package/src/wizards/04-build/dev-story/workflow.yaml +20 -0
- package/src/wizards/04-build/sprint-planning/checklist.md +33 -0
- package/src/wizards/04-build/sprint-planning/instructions.md +226 -0
- package/src/wizards/04-build/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/wizards/04-build/sprint-planning/workflow.yaml +47 -0
- package/src/wizards/05-ship/document-project/templates/deep-dive-template.md +345 -0
- package/src/wizards/05-ship/document-project/templates/index-template.md +169 -0
- package/src/wizards/05-ship/document-project/templates/project-overview-template.md +103 -0
- package/src/wizards/05-ship/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/wizards/05-ship/document-project/templates/source-tree-template.md +135 -0
- package/src/wizards/05-ship/document-project/wizard.md +130 -0
- package/src/wizards/quick/quick-dev/steps/step-01-mode-detection.md +174 -0
- package/src/wizards/quick/quick-dev/steps/step-02-context-gathering.md +118 -0
- package/src/wizards/quick/quick-dev/steps/step-03-execute.md +111 -0
- package/src/wizards/quick/quick-dev/steps/step-04-self-check.md +111 -0
- package/src/wizards/quick/quick-dev/steps/step-05-adversarial-review.md +104 -0
- package/src/wizards/quick/quick-dev/steps/step-06-resolve-findings.md +146 -0
- package/src/wizards/quick/quick-dev/wizard.md +50 -0
- package/src/wizards/quick/quick-spec/steps/step-01-understand.md +189 -0
- package/src/wizards/quick/quick-spec/steps/step-02-investigate.md +143 -0
- package/src/wizards/quick/quick-spec/steps/step-03-generate.md +126 -0
- package/src/wizards/quick/quick-spec/steps/step-04-review.md +200 -0
- package/src/wizards/quick/quick-spec/templates/tech-spec-template.md +74 -0
- package/src/wizards/quick/quick-spec/wizard.md +79 -0
- package/src/wizards/special/brainstorming/methods/brain-methods.csv +62 -0
- package/src/wizards/special/brainstorming/steps/step-01-session-setup.md +197 -0
- package/src/wizards/special/brainstorming/steps/step-01b-continue.md +122 -0
- package/src/wizards/special/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/src/wizards/special/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/src/wizards/special/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/src/wizards/special/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/src/wizards/special/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/src/wizards/special/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/src/wizards/special/brainstorming/wizard.md +58 -0
- package/src/wizards/special/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/wizards/special/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/src/wizards/special/party-mode/steps/step-03-graceful-exit.md +168 -0
- package/src/wizards/special/party-mode/wizard.md +194 -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/build-docs.mjs +463 -0
- package/tools/cli/README.md +60 -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/mdan-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/cli/mdan-cli.js +106 -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/mdan-npx-wrapper.js +38 -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/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
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"""Scenario tests for Financial 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.fintech.agents.financial_analyst.agent import FinancialAnalyst
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_financial_statement_analysis():
|
|
13
|
+
"""Test financial statement analysis capability."""
|
|
14
|
+
agent = FinancialAnalyst()
|
|
15
|
+
|
|
16
|
+
input_data = {
|
|
17
|
+
"task": "Analyze the following financial data",
|
|
18
|
+
"revenue": "5,000,000",
|
|
19
|
+
"cost_of_goods_sold": "3,000,000",
|
|
20
|
+
"operating_expenses": "1,000,000",
|
|
21
|
+
"interest_expense": "100,000",
|
|
22
|
+
"tax_rate": "25%",
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
result = agent.process(input_data)
|
|
26
|
+
|
|
27
|
+
assert result is not None
|
|
28
|
+
assert "gross_profit" in result.lower() or "gross margin" in result.lower()
|
|
29
|
+
assert "operating_income" in result.lower() or "operating profit" in result.lower()
|
|
30
|
+
assert "net_income" in result.lower() or "net profit" in result.lower()
|
|
31
|
+
print("✓ Financial statement analysis test passed")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_ratio_analysis():
|
|
35
|
+
"""Test financial ratio analysis capability."""
|
|
36
|
+
agent = FinancialAnalyst()
|
|
37
|
+
|
|
38
|
+
input_data = {
|
|
39
|
+
"task": "Calculate and analyze key financial ratios",
|
|
40
|
+
"current_assets": "2,000,000",
|
|
41
|
+
"current_liabilities": "1,000,000",
|
|
42
|
+
"total_assets": "10,000,000",
|
|
43
|
+
"total_liabilities": "4,000,000",
|
|
44
|
+
"net_income": "500,000",
|
|
45
|
+
"revenue": "5,000,000",
|
|
46
|
+
"shareholder_equity": "6,000,000",
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
result = agent.process(input_data)
|
|
50
|
+
|
|
51
|
+
assert result is not None
|
|
52
|
+
assert "current_ratio" in result.lower() or "liquidity" in result.lower()
|
|
53
|
+
assert "debt_to_equity" in result.lower() or "leverage" in result.lower()
|
|
54
|
+
assert "return_on_equity" in result.lower() or "roe" in result.lower()
|
|
55
|
+
print("✓ Ratio analysis test passed")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_investment_analysis():
|
|
59
|
+
"""Test investment analysis capability."""
|
|
60
|
+
agent = FinancialAnalyst()
|
|
61
|
+
|
|
62
|
+
input_data = {
|
|
63
|
+
"task": "Evaluate investment opportunity",
|
|
64
|
+
"company": "TechCorp Inc.",
|
|
65
|
+
"current_price": "100",
|
|
66
|
+
"target_price": "120",
|
|
67
|
+
"dividend_yield": "2.5%",
|
|
68
|
+
"pe_ratio": "25",
|
|
69
|
+
"industry_pe": "30",
|
|
70
|
+
"growth_rate": "15%",
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
result = agent.process(input_data)
|
|
74
|
+
|
|
75
|
+
assert result is not None
|
|
76
|
+
assert "valuation" in result.lower() or "price" in result.lower()
|
|
77
|
+
assert (
|
|
78
|
+
"recommendation" in result.lower()
|
|
79
|
+
or "buy" in result.lower()
|
|
80
|
+
or "sell" in result.lower()
|
|
81
|
+
or "hold" in result.lower()
|
|
82
|
+
)
|
|
83
|
+
print("✓ Investment analysis test passed")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_budget_forecasting():
|
|
87
|
+
"""Test budget forecasting capability."""
|
|
88
|
+
agent = FinancialAnalyst()
|
|
89
|
+
|
|
90
|
+
input_data = {
|
|
91
|
+
"task": "Create budget forecast for next year",
|
|
92
|
+
"current_revenue": "10,000,000",
|
|
93
|
+
"growth_rate": "10%",
|
|
94
|
+
"current_expenses": "8,000,000",
|
|
95
|
+
"inflation_rate": "3%",
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
result = agent.process(input_data)
|
|
99
|
+
|
|
100
|
+
assert result is not None
|
|
101
|
+
assert "forecast" in result.lower() or "projection" in result.lower()
|
|
102
|
+
assert "revenue" in result.lower()
|
|
103
|
+
assert "expenses" in result.lower()
|
|
104
|
+
print("✓ Budget forecasting test passed")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def test_cash_flow_analysis():
|
|
108
|
+
"""Test cash flow analysis capability."""
|
|
109
|
+
agent = FinancialAnalyst()
|
|
110
|
+
|
|
111
|
+
input_data = {
|
|
112
|
+
"task": "Analyze cash flow statement",
|
|
113
|
+
"operating_cash_flow": "1,500,000",
|
|
114
|
+
"investing_cash_flow": "-500,000",
|
|
115
|
+
"financing_cash_flow": "-200,000",
|
|
116
|
+
"beginning_cash": "500,000",
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
result = agent.process(input_data)
|
|
120
|
+
|
|
121
|
+
assert result is not None
|
|
122
|
+
assert "cash_flow" in result.lower() or "cash flow" in result.lower()
|
|
123
|
+
assert "free_cash_flow" in result.lower() or "net_cash" in result.lower()
|
|
124
|
+
print("✓ Cash flow analysis test passed")
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def test_valuation():
|
|
128
|
+
"""Test company valuation capability."""
|
|
129
|
+
agent = FinancialAnalyst()
|
|
130
|
+
|
|
131
|
+
input_data = {
|
|
132
|
+
"task": "Value the company using DCF method",
|
|
133
|
+
"free_cash_flow": "1,000,000",
|
|
134
|
+
"growth_rate": "5%",
|
|
135
|
+
"discount_rate": "10%",
|
|
136
|
+
"terminal_growth_rate": "2%",
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
result = agent.process(input_data)
|
|
140
|
+
|
|
141
|
+
assert result is not None
|
|
142
|
+
assert "valuation" in result.lower() or "value" in result.lower()
|
|
143
|
+
assert "present_value" in result.lower() or "npv" in result.lower()
|
|
144
|
+
print("✓ Valuation test passed")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def test_financial_reporting():
|
|
148
|
+
"""Test financial reporting capability."""
|
|
149
|
+
agent = FinancialAnalyst()
|
|
150
|
+
|
|
151
|
+
input_data = {
|
|
152
|
+
"task": "Prepare financial summary report",
|
|
153
|
+
"period": "Q4 2025",
|
|
154
|
+
"revenue": "15,000,000",
|
|
155
|
+
"expenses": "12,000,000",
|
|
156
|
+
"net_income": "3,000,000",
|
|
157
|
+
"assets": "50,000,000",
|
|
158
|
+
"liabilities": "20,000,000",
|
|
159
|
+
"equity": "30,000,000",
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
result = agent.process(input_data)
|
|
163
|
+
|
|
164
|
+
assert result is not None
|
|
165
|
+
assert "summary" in result.lower() or "report" in result.lower()
|
|
166
|
+
assert "revenue" in result.lower()
|
|
167
|
+
assert "profitability" in result.lower() or "income" in result.lower()
|
|
168
|
+
print("✓ Financial reporting test passed")
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
if __name__ == "__main__":
|
|
172
|
+
print("Running Financial Analyst scenario tests...")
|
|
173
|
+
print()
|
|
174
|
+
|
|
175
|
+
test_financial_statement_analysis()
|
|
176
|
+
test_ratio_analysis()
|
|
177
|
+
test_investment_analysis()
|
|
178
|
+
test_budget_forecasting()
|
|
179
|
+
test_cash_flow_analysis()
|
|
180
|
+
test_valuation()
|
|
181
|
+
test_financial_reporting()
|
|
182
|
+
|
|
183
|
+
print()
|
|
184
|
+
print("All Financial Analyst tests passed! ✓")
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"""Scenario tests for Risk Manager 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.fintech.agents.risk_manager.agent import RiskManager
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_market_risk_assessment():
|
|
13
|
+
"""Test market risk assessment capability."""
|
|
14
|
+
agent = RiskManager()
|
|
15
|
+
|
|
16
|
+
input_data = {
|
|
17
|
+
"task": "Assess market risk for investment portfolio",
|
|
18
|
+
"portfolio": {
|
|
19
|
+
"equities": {"value": "10,000,000", "beta": 1.2},
|
|
20
|
+
"bonds": {"value": "5,000,000", "duration": 6.5},
|
|
21
|
+
},
|
|
22
|
+
"confidence_level": 95,
|
|
23
|
+
"time_horizon": "10 days",
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
result = agent.process(input_data)
|
|
27
|
+
|
|
28
|
+
assert result is not None
|
|
29
|
+
assert "market_risk" in result.lower() or "market risk" in result.lower()
|
|
30
|
+
assert "var" in result.lower() or "value_at_risk" in result.lower()
|
|
31
|
+
print("✓ Market risk assessment test passed")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_credit_risk_assessment():
|
|
35
|
+
"""Test credit risk assessment capability."""
|
|
36
|
+
agent = RiskManager()
|
|
37
|
+
|
|
38
|
+
input_data = {
|
|
39
|
+
"task": "Assess credit risk for lending portfolio",
|
|
40
|
+
"borrowers": [
|
|
41
|
+
{"name": "Company A", "exposure": "1,000,000", "credit_rating": "A"},
|
|
42
|
+
{"name": "Company B", "exposure": "500,000", "credit_rating": "BBB"},
|
|
43
|
+
{"name": "Company C", "exposure": "2,000,000", "credit_rating": "AA"},
|
|
44
|
+
],
|
|
45
|
+
"industry_concentration": {
|
|
46
|
+
"Technology": 40,
|
|
47
|
+
"Healthcare": 30,
|
|
48
|
+
"Financials": 30,
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
result = agent.process(input_data)
|
|
53
|
+
|
|
54
|
+
assert result is not None
|
|
55
|
+
assert "credit_risk" in result.lower() or "credit risk" in result.lower()
|
|
56
|
+
assert "exposure" in result.lower()
|
|
57
|
+
print("✓ Credit risk assessment test passed")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def test_operational_risk():
|
|
61
|
+
"""Test operational risk assessment capability."""
|
|
62
|
+
agent = RiskManager()
|
|
63
|
+
|
|
64
|
+
input_data = {
|
|
65
|
+
"task": "Assess operational risks",
|
|
66
|
+
"business_processes": ["Trading", "Settlement", "Customer Service"],
|
|
67
|
+
"risk_factors": ["System failures", "Human error", "Fraud", "External events"],
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
result = agent.process(input_data)
|
|
71
|
+
|
|
72
|
+
assert result is not None
|
|
73
|
+
assert "operational_risk" in result.lower() or "operational risk" in result.lower()
|
|
74
|
+
assert "mitigation" in result.lower() or "controls" in result.lower()
|
|
75
|
+
print("✓ Operational risk test passed")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def test_stress_testing():
|
|
79
|
+
"""Test stress testing capability."""
|
|
80
|
+
agent = RiskManager()
|
|
81
|
+
|
|
82
|
+
input_data = {
|
|
83
|
+
"task": "Perform stress testing on portfolio",
|
|
84
|
+
"portfolio_value": "15,000,000",
|
|
85
|
+
"scenarios": [
|
|
86
|
+
{"name": "Market crash", "market_decline": "-20%"},
|
|
87
|
+
{"name": "Interest rate spike", "rate_increase": "+200bps"},
|
|
88
|
+
{"name": "Liquidity crisis", "liquidity_impact": "-30%"},
|
|
89
|
+
],
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
result = agent.process(input_data)
|
|
93
|
+
|
|
94
|
+
assert result is not None
|
|
95
|
+
assert "stress_test" in result.lower() or "stress test" in result.lower()
|
|
96
|
+
assert "scenario" in result.lower()
|
|
97
|
+
print("✓ Stress testing test passed")
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def test_risk_mitigation():
|
|
101
|
+
"""Test risk mitigation strategy development capability."""
|
|
102
|
+
agent = RiskManager()
|
|
103
|
+
|
|
104
|
+
input_data = {
|
|
105
|
+
"task": "Develop risk mitigation strategies",
|
|
106
|
+
"identified_risks": [
|
|
107
|
+
{"type": "Market risk", "level": "High"},
|
|
108
|
+
{"type": "Credit risk", "level": "Medium"},
|
|
109
|
+
{"type": "Operational risk", "level": "Medium"},
|
|
110
|
+
],
|
|
111
|
+
"risk_appetite": "Moderate",
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
result = agent.process(input_data)
|
|
115
|
+
|
|
116
|
+
assert result is not None
|
|
117
|
+
assert "mitigation" in result.lower()
|
|
118
|
+
assert "strategy" in result.lower() or "strategies" in result.lower()
|
|
119
|
+
print("✓ Risk mitigation test passed")
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def test_risk_metrics():
|
|
123
|
+
"""Test risk metrics development capability."""
|
|
124
|
+
agent = RiskManager()
|
|
125
|
+
|
|
126
|
+
input_data = {
|
|
127
|
+
"task": "Develop risk metrics and KPIs",
|
|
128
|
+
"risk_types": ["Market", "Credit", "Operational", "Liquidity"],
|
|
129
|
+
"reporting_frequency": "Monthly",
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
result = agent.process(input_data)
|
|
133
|
+
|
|
134
|
+
assert result is not None
|
|
135
|
+
assert "metrics" in result.lower() or "kpi" in result.lower()
|
|
136
|
+
assert "monitoring" in result.lower() or "reporting" in result.lower()
|
|
137
|
+
print("✓ Risk metrics test passed")
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def test_regulatory_compliance():
|
|
141
|
+
"""Test regulatory compliance for risk management capability."""
|
|
142
|
+
agent = RiskManager()
|
|
143
|
+
|
|
144
|
+
input_data = {
|
|
145
|
+
"task": "Ensure risk management regulatory compliance",
|
|
146
|
+
"regulations": ["Basel III", "Solvency II", "FRTB"],
|
|
147
|
+
"organization_type": "Bank",
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
result = agent.process(input_data)
|
|
151
|
+
|
|
152
|
+
assert result is not None
|
|
153
|
+
assert "compliance" in result.lower()
|
|
154
|
+
assert "regulatory" in result.lower()
|
|
155
|
+
print("✓ Regulatory compliance test passed")
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
if __name__ == "__main__":
|
|
159
|
+
print("Running Risk Manager scenario tests...")
|
|
160
|
+
print()
|
|
161
|
+
|
|
162
|
+
test_market_risk_assessment()
|
|
163
|
+
test_credit_risk_assessment()
|
|
164
|
+
test_operational_risk()
|
|
165
|
+
test_stress_testing()
|
|
166
|
+
test_risk_mitigation()
|
|
167
|
+
test_risk_metrics()
|
|
168
|
+
test_regulatory_compliance()
|
|
169
|
+
|
|
170
|
+
print()
|
|
171
|
+
print("All Risk Manager tests passed! ✓")
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Scenario tests for TEA Agent (Murat)
|
|
3
|
+
Tests the Master Test Architect's ability to provide testing guidance
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import asyncio
|
|
7
|
+
import sys
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
# Add the app directory to the path
|
|
11
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../.."))
|
|
12
|
+
|
|
13
|
+
from app.tea.agents.tea.agent import TEA, TEARequest
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class TestTEAAgent:
|
|
17
|
+
"""Test suite for TEA Agent scenarios"""
|
|
18
|
+
|
|
19
|
+
def __init__(self):
|
|
20
|
+
self.agent = TEA()
|
|
21
|
+
|
|
22
|
+
async def test_initialization(self):
|
|
23
|
+
"""Test 1: Agent initializes correctly"""
|
|
24
|
+
print("Test 1: Agent initialization...")
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
assert self.agent is not None
|
|
28
|
+
assert hasattr(self.agent, "process")
|
|
29
|
+
assert hasattr(self.agent, "name")
|
|
30
|
+
assert self.agent.name == "Murat"
|
|
31
|
+
print("✓ Agent initializes correctly")
|
|
32
|
+
return True
|
|
33
|
+
except Exception as e:
|
|
34
|
+
print(f"✗ Initialization failed: {e}")
|
|
35
|
+
return False
|
|
36
|
+
|
|
37
|
+
async def test_teach_me_testing(self):
|
|
38
|
+
"""Test 2: Teach testing fundamentals"""
|
|
39
|
+
print("\nTest 2: Teach me testing...")
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
request = TEARequest(
|
|
43
|
+
task="teach-me-testing", context="I want to learn testing from scratch"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
result = await self.agent.process(request)
|
|
47
|
+
|
|
48
|
+
assert result is not None
|
|
49
|
+
assert isinstance(result, dict)
|
|
50
|
+
assert result["success"] == True
|
|
51
|
+
assert "guidance" in result
|
|
52
|
+
assert "sessions" in result["guidance"]
|
|
53
|
+
assert len(result["guidance"]["sessions"]) == 7
|
|
54
|
+
print("✓ Teach me testing works correctly")
|
|
55
|
+
return True
|
|
56
|
+
except Exception as e:
|
|
57
|
+
print(f"✗ Teach me testing failed: {e}")
|
|
58
|
+
return False
|
|
59
|
+
|
|
60
|
+
async def test_test_framework(self):
|
|
61
|
+
"""Test 3: Initialize test framework"""
|
|
62
|
+
print("\nTest 3: Test framework initialization...")
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
request = TEARequest(
|
|
66
|
+
task="test-framework",
|
|
67
|
+
context="Setting up test framework for a web app",
|
|
68
|
+
project_type="web",
|
|
69
|
+
tech_stack=["pytest", "playwright"],
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
result = await self.agent.process(request)
|
|
73
|
+
|
|
74
|
+
assert result is not None
|
|
75
|
+
assert isinstance(result, dict)
|
|
76
|
+
assert result["success"] == True
|
|
77
|
+
assert "guidance" in result
|
|
78
|
+
assert "architecture" in result["guidance"]
|
|
79
|
+
print("✓ Test framework initialization works correctly")
|
|
80
|
+
return True
|
|
81
|
+
except Exception as e:
|
|
82
|
+
print(f"✗ Test framework initialization failed: {e}")
|
|
83
|
+
return False
|
|
84
|
+
|
|
85
|
+
async def test_atdd(self):
|
|
86
|
+
"""Test 4: Acceptance Test-Driven Development"""
|
|
87
|
+
print("\nTest 4: ATDD guidance...")
|
|
88
|
+
|
|
89
|
+
try:
|
|
90
|
+
request = TEARequest(task="atdd", context="User login feature")
|
|
91
|
+
|
|
92
|
+
result = await self.agent.process(request)
|
|
93
|
+
|
|
94
|
+
assert result is not None
|
|
95
|
+
assert isinstance(result, dict)
|
|
96
|
+
assert result["success"] == True
|
|
97
|
+
assert "guidance" in result
|
|
98
|
+
assert "acceptance_test_template" in result["guidance"]
|
|
99
|
+
assert "implementation_checklist" in result["guidance"]
|
|
100
|
+
print("✓ ATDD guidance works correctly")
|
|
101
|
+
return True
|
|
102
|
+
except Exception as e:
|
|
103
|
+
print(f"✗ ATDD guidance failed: {e}")
|
|
104
|
+
return False
|
|
105
|
+
|
|
106
|
+
async def test_test_automate(self):
|
|
107
|
+
"""Test 5: Test automation strategy"""
|
|
108
|
+
print("\nTest 5: Test automation strategy...")
|
|
109
|
+
|
|
110
|
+
try:
|
|
111
|
+
request = TEARequest(
|
|
112
|
+
task="test-automate",
|
|
113
|
+
context="Automate tests for payment feature",
|
|
114
|
+
risk_level="high",
|
|
115
|
+
scope="feature",
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
result = await self.agent.process(request)
|
|
119
|
+
|
|
120
|
+
assert result is not None
|
|
121
|
+
assert isinstance(result, dict)
|
|
122
|
+
assert result["success"] == True
|
|
123
|
+
assert "guidance" in result
|
|
124
|
+
assert "test_prioritization" in result["guidance"]
|
|
125
|
+
assert "definition_of_done" in result["guidance"]
|
|
126
|
+
print("✓ Test automation strategy works correctly")
|
|
127
|
+
return True
|
|
128
|
+
except Exception as e:
|
|
129
|
+
print(f"✗ Test automation strategy failed: {e}")
|
|
130
|
+
return False
|
|
131
|
+
|
|
132
|
+
async def test_test_design(self):
|
|
133
|
+
"""Test 6: Test design and coverage strategy"""
|
|
134
|
+
print("\nTest 6: Test design strategy...")
|
|
135
|
+
|
|
136
|
+
try:
|
|
137
|
+
request = TEARequest(
|
|
138
|
+
task="test-design",
|
|
139
|
+
context="Design test strategy for e-commerce platform",
|
|
140
|
+
risk_level="high",
|
|
141
|
+
scope="epic",
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
result = await self.agent.process(request)
|
|
145
|
+
|
|
146
|
+
assert result is not None
|
|
147
|
+
assert isinstance(result, dict)
|
|
148
|
+
assert result["success"] == True
|
|
149
|
+
assert "guidance" in result
|
|
150
|
+
assert "risk_assessment" in result["guidance"]
|
|
151
|
+
assert "coverage_strategy" in result["guidance"]
|
|
152
|
+
print("✓ Test design strategy works correctly")
|
|
153
|
+
return True
|
|
154
|
+
except Exception as e:
|
|
155
|
+
print(f"✗ Test design strategy failed: {e}")
|
|
156
|
+
return False
|
|
157
|
+
|
|
158
|
+
async def test_test_trace(self):
|
|
159
|
+
"""Test 7: Requirements to tests traceability"""
|
|
160
|
+
print("\nTest 7: Test traceability...")
|
|
161
|
+
|
|
162
|
+
try:
|
|
163
|
+
request = TEARequest(
|
|
164
|
+
task="test-trace", context="Map requirements to tests for release"
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
result = await self.agent.process(request)
|
|
168
|
+
|
|
169
|
+
assert result is not None
|
|
170
|
+
assert isinstance(result, dict)
|
|
171
|
+
assert result["success"] == True
|
|
172
|
+
assert "guidance" in result
|
|
173
|
+
assert "phase_1_traceability" in result["guidance"]
|
|
174
|
+
assert "phase_2_quality_gate" in result["guidance"]
|
|
175
|
+
print("✓ Test traceability works correctly")
|
|
176
|
+
return True
|
|
177
|
+
except Exception as e:
|
|
178
|
+
print(f"✗ Test traceability failed: {e}")
|
|
179
|
+
return False
|
|
180
|
+
|
|
181
|
+
async def test_nfr_assess(self):
|
|
182
|
+
"""Test 8: Non-Functional Requirements assessment"""
|
|
183
|
+
print("\nTest 8: NFR assessment...")
|
|
184
|
+
|
|
185
|
+
try:
|
|
186
|
+
request = TEARequest(
|
|
187
|
+
task="nfr-assess", context="Assess NFRs for high-traffic API"
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
result = await self.agent.process(request)
|
|
191
|
+
|
|
192
|
+
assert result is not None
|
|
193
|
+
assert isinstance(result, dict)
|
|
194
|
+
assert result["success"] == True
|
|
195
|
+
assert "guidance" in result
|
|
196
|
+
assert "nfr_categories" in result["guidance"]
|
|
197
|
+
assert len(result["guidance"]["nfr_categories"]) >= 5
|
|
198
|
+
print("✓ NFR assessment works correctly")
|
|
199
|
+
return True
|
|
200
|
+
except Exception as e:
|
|
201
|
+
print(f"✗ NFR assessment failed: {e}")
|
|
202
|
+
return False
|
|
203
|
+
|
|
204
|
+
async def test_continuous_integration(self):
|
|
205
|
+
"""Test 9: CI/CD quality pipeline"""
|
|
206
|
+
print("\nTest 9: Continuous integration guidance...")
|
|
207
|
+
|
|
208
|
+
try:
|
|
209
|
+
request = TEARequest(
|
|
210
|
+
task="continuous-integration",
|
|
211
|
+
context="Set up CI/CD pipeline for microservices",
|
|
212
|
+
ci_platform="github-actions",
|
|
213
|
+
tech_stack=["pytest", "go-test"],
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
result = await self.agent.process(request)
|
|
217
|
+
|
|
218
|
+
assert result is not None
|
|
219
|
+
assert isinstance(result, dict)
|
|
220
|
+
assert result["success"] == True
|
|
221
|
+
assert "guidance" in result
|
|
222
|
+
assert "pipeline_stages" in result["guidance"]
|
|
223
|
+
assert "quality_gates" in result["guidance"]
|
|
224
|
+
print("✓ Continuous integration guidance works correctly")
|
|
225
|
+
return True
|
|
226
|
+
except Exception as e:
|
|
227
|
+
print(f"✗ Continuous integration guidance failed: {e}")
|
|
228
|
+
return False
|
|
229
|
+
|
|
230
|
+
async def test_test_review(self):
|
|
231
|
+
"""Test 10: Test quality review"""
|
|
232
|
+
print("\nTest 10: Test quality review...")
|
|
233
|
+
|
|
234
|
+
try:
|
|
235
|
+
request = TEARequest(
|
|
236
|
+
task="test-review", context="Review test suite for quality issues"
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
result = await self.agent.process(request)
|
|
240
|
+
|
|
241
|
+
assert result is not None
|
|
242
|
+
assert isinstance(result, dict)
|
|
243
|
+
assert result["success"] == True
|
|
244
|
+
assert "guidance" in result
|
|
245
|
+
assert "review_criteria" in result["guidance"]
|
|
246
|
+
assert "common_issues" in result["guidance"]
|
|
247
|
+
print("✓ Test quality review works correctly")
|
|
248
|
+
return True
|
|
249
|
+
except Exception as e:
|
|
250
|
+
print(f"✗ Test quality review failed: {e}")
|
|
251
|
+
return False
|
|
252
|
+
|
|
253
|
+
async def test_risk_based_testing(self):
|
|
254
|
+
"""Test 11: Risk-based testing approach"""
|
|
255
|
+
print("\nTest 11: Risk-based testing...")
|
|
256
|
+
|
|
257
|
+
try:
|
|
258
|
+
request = TEARequest(
|
|
259
|
+
task="test-design",
|
|
260
|
+
context="Apply risk-based testing to critical payment system",
|
|
261
|
+
risk_level="critical",
|
|
262
|
+
scope="system",
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
result = await self.agent.process(request)
|
|
266
|
+
|
|
267
|
+
assert result is not None
|
|
268
|
+
assert isinstance(result, dict)
|
|
269
|
+
assert result["success"] == True
|
|
270
|
+
assert "guidance" in result
|
|
271
|
+
assert "risk_assessment" in result["guidance"]
|
|
272
|
+
print("✓ Risk-based testing works correctly")
|
|
273
|
+
return True
|
|
274
|
+
except Exception as e:
|
|
275
|
+
print(f"✗ Risk-based testing failed: {e}")
|
|
276
|
+
return False
|
|
277
|
+
|
|
278
|
+
async def test_api_testing_focus(self):
|
|
279
|
+
"""Test 12: API testing as first-class citizen"""
|
|
280
|
+
print("\nTest 12: API testing focus...")
|
|
281
|
+
|
|
282
|
+
try:
|
|
283
|
+
request = TEARequest(
|
|
284
|
+
task="test-automate",
|
|
285
|
+
context="Automate API tests for REST service",
|
|
286
|
+
project_type="api",
|
|
287
|
+
tech_stack=["pytest"],
|
|
288
|
+
risk_level="high",
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
result = await self.agent.process(request)
|
|
292
|
+
|
|
293
|
+
assert result is not None
|
|
294
|
+
assert isinstance(result, dict)
|
|
295
|
+
assert result["success"] == True
|
|
296
|
+
assert "guidance" in result
|
|
297
|
+
print("✓ API testing focus works correctly")
|
|
298
|
+
return True
|
|
299
|
+
except Exception as e:
|
|
300
|
+
print(f"✗ API testing focus failed: {e}")
|
|
301
|
+
return False
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
async def run_all_tests():
|
|
305
|
+
"""Run all scenario tests for TEA Agent"""
|
|
306
|
+
print("=" * 60)
|
|
307
|
+
print("TEA Agent (Murat) - Scenario Tests")
|
|
308
|
+
print("=" * 60)
|
|
309
|
+
|
|
310
|
+
test_suite = TestTEAAgent()
|
|
311
|
+
|
|
312
|
+
tests = [
|
|
313
|
+
test_suite.test_initialization(),
|
|
314
|
+
test_suite.test_teach_me_testing(),
|
|
315
|
+
test_suite.test_test_framework(),
|
|
316
|
+
test_suite.test_atdd(),
|
|
317
|
+
test_suite.test_test_automate(),
|
|
318
|
+
test_suite.test_test_design(),
|
|
319
|
+
test_suite.test_test_trace(),
|
|
320
|
+
test_suite.test_nfr_assess(),
|
|
321
|
+
test_suite.test_continuous_integration(),
|
|
322
|
+
test_suite.test_test_review(),
|
|
323
|
+
test_suite.test_risk_based_testing(),
|
|
324
|
+
test_suite.test_api_testing_focus(),
|
|
325
|
+
]
|
|
326
|
+
|
|
327
|
+
results = await asyncio.gather(*tests)
|
|
328
|
+
|
|
329
|
+
passed = sum(results)
|
|
330
|
+
total = len(results)
|
|
331
|
+
|
|
332
|
+
print("\n" + "=" * 60)
|
|
333
|
+
print(f"Test Results: {passed}/{total} passed")
|
|
334
|
+
print("=" * 60)
|
|
335
|
+
|
|
336
|
+
if passed == total:
|
|
337
|
+
print("✓ All tests passed!")
|
|
338
|
+
return 0
|
|
339
|
+
else:
|
|
340
|
+
print(f"✗ {total - passed} test(s) failed")
|
|
341
|
+
return 1
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
if __name__ == "__main__":
|
|
345
|
+
exit_code = asyncio.run(run_all_tests())
|
|
346
|
+
sys.exit(exit_code)
|