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,285 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Simple integration test for all cis module agents
|
|
3
|
+
Tests that all agents can be imported and instantiated correctly
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import asyncio
|
|
7
|
+
import sys
|
|
8
|
+
import os
|
|
9
|
+
import importlib.util
|
|
10
|
+
|
|
11
|
+
# Add the app directory to the path
|
|
12
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def load_agent_from_path(agent_path, agent_class_name):
|
|
16
|
+
"""Load an agent class from a file path using importlib"""
|
|
17
|
+
spec = importlib.util.spec_from_file_location("agent_module", agent_path)
|
|
18
|
+
if spec is None or spec.loader is None:
|
|
19
|
+
raise ImportError(f"Could not load spec from {agent_path}")
|
|
20
|
+
module = importlib.util.module_from_spec(spec)
|
|
21
|
+
spec.loader.exec_module(module)
|
|
22
|
+
return getattr(module, agent_class_name)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
async def test_brainstorming_coach():
|
|
26
|
+
"""Test Brainstorming Coach Agent"""
|
|
27
|
+
print("Testing Brainstorming Coach Agent (Carson)...")
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
agent_path = os.path.join(
|
|
31
|
+
os.path.dirname(__file__), "../app/cis/agents/brainstorming-coach/agent.py"
|
|
32
|
+
)
|
|
33
|
+
module = importlib.util.spec_from_file_location("agent_module", agent_path)
|
|
34
|
+
if module is None or module.loader is None:
|
|
35
|
+
raise ImportError(f"Could not load spec from {agent_path}")
|
|
36
|
+
agent_module = importlib.util.module_from_spec(module)
|
|
37
|
+
module.loader.exec_module(agent_module)
|
|
38
|
+
|
|
39
|
+
BrainstormingCoach = agent_module.BrainstormingCoach
|
|
40
|
+
BrainstormingCoachRequest = agent_module.BrainstormingCoachRequest
|
|
41
|
+
|
|
42
|
+
agent = BrainstormingCoach()
|
|
43
|
+
|
|
44
|
+
# Test basic processing
|
|
45
|
+
request = BrainstormingCoachRequest(topic="product innovation", participants=5)
|
|
46
|
+
result = await agent.process(request)
|
|
47
|
+
|
|
48
|
+
assert result is not None
|
|
49
|
+
assert isinstance(result, dict)
|
|
50
|
+
print("✓ Brainstorming Coach Agent works correctly")
|
|
51
|
+
return True
|
|
52
|
+
except Exception as e:
|
|
53
|
+
print(f"✗ Brainstorming Coach Agent failed: {e}")
|
|
54
|
+
import traceback
|
|
55
|
+
|
|
56
|
+
traceback.print_exc()
|
|
57
|
+
return False
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
async def test_creative_problem_solver():
|
|
61
|
+
"""Test Creative Problem Solver Agent"""
|
|
62
|
+
print("\nTesting Creative Problem Solver Agent (Dr. Quinn)...")
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
agent_path = os.path.join(
|
|
66
|
+
os.path.dirname(__file__),
|
|
67
|
+
"../app/cis/agents/creative-problem-solver/agent.py",
|
|
68
|
+
)
|
|
69
|
+
module = importlib.util.spec_from_file_location("agent_module", agent_path)
|
|
70
|
+
if module is None or module.loader is None:
|
|
71
|
+
raise ImportError(f"Could not load spec from {agent_path}")
|
|
72
|
+
agent_module = importlib.util.module_from_spec(module)
|
|
73
|
+
module.loader.exec_module(agent_module)
|
|
74
|
+
|
|
75
|
+
CreativeProblemSolver = agent_module.CreativeProblemSolver
|
|
76
|
+
CreativeProblemSolverRequest = agent_module.CreativeProblemSolverRequest
|
|
77
|
+
|
|
78
|
+
agent = CreativeProblemSolver()
|
|
79
|
+
|
|
80
|
+
# Test basic processing
|
|
81
|
+
request = CreativeProblemSolverRequest(
|
|
82
|
+
problem="declining user engagement", constraints=["budget", "timeline"]
|
|
83
|
+
)
|
|
84
|
+
result = await agent.process(request)
|
|
85
|
+
|
|
86
|
+
assert result is not None
|
|
87
|
+
assert isinstance(result, dict)
|
|
88
|
+
print("✓ Creative Problem Solver Agent works correctly")
|
|
89
|
+
return True
|
|
90
|
+
except Exception as e:
|
|
91
|
+
print(f"✗ Creative Problem Solver Agent failed: {e}")
|
|
92
|
+
import traceback
|
|
93
|
+
|
|
94
|
+
traceback.print_exc()
|
|
95
|
+
return False
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
async def test_design_thinking_coach():
|
|
99
|
+
"""Test Design Thinking Coach Agent"""
|
|
100
|
+
print("\nTesting Design Thinking Coach Agent (Maya)...")
|
|
101
|
+
|
|
102
|
+
try:
|
|
103
|
+
agent_path = os.path.join(
|
|
104
|
+
os.path.dirname(__file__),
|
|
105
|
+
"../app/cis/agents/design-thinking-coach/agent.py",
|
|
106
|
+
)
|
|
107
|
+
module = importlib.util.spec_from_file_location("agent_module", agent_path)
|
|
108
|
+
if module is None or module.loader is None:
|
|
109
|
+
raise ImportError(f"Could not load spec from {agent_path}")
|
|
110
|
+
agent_module = importlib.util.module_from_spec(module)
|
|
111
|
+
module.loader.exec_module(agent_module)
|
|
112
|
+
|
|
113
|
+
DesignThinkingCoach = agent_module.DesignThinkingCoach
|
|
114
|
+
DesignThinkingCoachRequest = agent_module.DesignThinkingCoachRequest
|
|
115
|
+
|
|
116
|
+
agent = DesignThinkingCoach()
|
|
117
|
+
|
|
118
|
+
# Test basic processing
|
|
119
|
+
request = DesignThinkingCoachRequest(
|
|
120
|
+
challenge="improve mobile app UX", phase="empathize"
|
|
121
|
+
)
|
|
122
|
+
result = await agent.process(request)
|
|
123
|
+
|
|
124
|
+
assert result is not None
|
|
125
|
+
assert isinstance(result, dict)
|
|
126
|
+
print("✓ Design Thinking Coach Agent works correctly")
|
|
127
|
+
return True
|
|
128
|
+
except Exception as e:
|
|
129
|
+
print(f"✗ Design Thinking Coach Agent failed: {e}")
|
|
130
|
+
import traceback
|
|
131
|
+
|
|
132
|
+
traceback.print_exc()
|
|
133
|
+
return False
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
async def test_innovation_strategist():
|
|
137
|
+
"""Test Innovation Strategist Agent"""
|
|
138
|
+
print("\nTesting Innovation Strategist Agent (Victor)...")
|
|
139
|
+
|
|
140
|
+
try:
|
|
141
|
+
agent_path = os.path.join(
|
|
142
|
+
os.path.dirname(__file__),
|
|
143
|
+
"../app/cis/agents/innovation-strategist/agent.py",
|
|
144
|
+
)
|
|
145
|
+
module = importlib.util.spec_from_file_location("agent_module", agent_path)
|
|
146
|
+
if module is None or module.loader is None:
|
|
147
|
+
raise ImportError(f"Could not load spec from {agent_path}")
|
|
148
|
+
agent_module = importlib.util.module_from_spec(module)
|
|
149
|
+
module.loader.exec_module(agent_module)
|
|
150
|
+
|
|
151
|
+
InnovationStrategist = agent_module.InnovationStrategist
|
|
152
|
+
InnovationStrategistRequest = agent_module.InnovationStrategistRequest
|
|
153
|
+
|
|
154
|
+
agent = InnovationStrategist()
|
|
155
|
+
|
|
156
|
+
# Test basic processing
|
|
157
|
+
request = InnovationStrategistRequest(
|
|
158
|
+
market_context="fintech", goals=["growth", "differentiation"]
|
|
159
|
+
)
|
|
160
|
+
result = await agent.process(request)
|
|
161
|
+
|
|
162
|
+
assert result is not None
|
|
163
|
+
assert isinstance(result, dict)
|
|
164
|
+
print("✓ Innovation Strategist Agent works correctly")
|
|
165
|
+
return True
|
|
166
|
+
except Exception as e:
|
|
167
|
+
print(f"✗ Innovation Strategist Agent failed: {e}")
|
|
168
|
+
import traceback
|
|
169
|
+
|
|
170
|
+
traceback.print_exc()
|
|
171
|
+
return False
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
async def test_presentation_master():
|
|
175
|
+
"""Test Presentation Master Agent"""
|
|
176
|
+
print("\nTesting Presentation Master Agent (Caravaggio)...")
|
|
177
|
+
|
|
178
|
+
try:
|
|
179
|
+
agent_path = os.path.join(
|
|
180
|
+
os.path.dirname(__file__), "../app/cis/agents/presentation-master/agent.py"
|
|
181
|
+
)
|
|
182
|
+
module = importlib.util.spec_from_file_location("agent_module", agent_path)
|
|
183
|
+
if module is None or module.loader is None:
|
|
184
|
+
raise ImportError(f"Could not load spec from {agent_path}")
|
|
185
|
+
agent_module = importlib.util.module_from_spec(module)
|
|
186
|
+
module.loader.exec_module(agent_module)
|
|
187
|
+
|
|
188
|
+
PresentationMaster = agent_module.PresentationMaster
|
|
189
|
+
PresentationMasterRequest = agent_module.PresentationMasterRequest
|
|
190
|
+
|
|
191
|
+
agent = PresentationMaster()
|
|
192
|
+
|
|
193
|
+
# Test basic processing
|
|
194
|
+
request = PresentationMasterRequest(
|
|
195
|
+
presentation_type="slide-deck",
|
|
196
|
+
topic="quarterly results",
|
|
197
|
+
audience="stakeholders",
|
|
198
|
+
length=30,
|
|
199
|
+
)
|
|
200
|
+
result = await agent.process(request)
|
|
201
|
+
|
|
202
|
+
assert result is not None
|
|
203
|
+
assert isinstance(result, dict)
|
|
204
|
+
print("✓ Presentation Master Agent works correctly")
|
|
205
|
+
return True
|
|
206
|
+
except Exception as e:
|
|
207
|
+
print(f"✗ Presentation Master Agent failed: {e}")
|
|
208
|
+
import traceback
|
|
209
|
+
|
|
210
|
+
traceback.print_exc()
|
|
211
|
+
return False
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
async def test_storyteller():
|
|
215
|
+
"""Test Storyteller Agent"""
|
|
216
|
+
print("\nTesting Storyteller Agent (Sophia)...")
|
|
217
|
+
|
|
218
|
+
try:
|
|
219
|
+
agent_path = os.path.join(
|
|
220
|
+
os.path.dirname(__file__), "../app/cis/agents/storyteller/agent.py"
|
|
221
|
+
)
|
|
222
|
+
module = importlib.util.spec_from_file_location("agent_module", agent_path)
|
|
223
|
+
if module is None or module.loader is None:
|
|
224
|
+
raise ImportError(f"Could not load spec from {agent_path}")
|
|
225
|
+
agent_module = importlib.util.module_from_spec(module)
|
|
226
|
+
module.loader.exec_module(agent_module)
|
|
227
|
+
|
|
228
|
+
Storyteller = agent_module.Storyteller
|
|
229
|
+
StorytellerRequest = agent_module.StorytellerRequest
|
|
230
|
+
|
|
231
|
+
agent = Storyteller()
|
|
232
|
+
|
|
233
|
+
# Test basic processing
|
|
234
|
+
request = StorytellerRequest(
|
|
235
|
+
story_purpose="brand", core_message="company transformation journey"
|
|
236
|
+
)
|
|
237
|
+
result = await agent.process(request)
|
|
238
|
+
|
|
239
|
+
assert result is not None
|
|
240
|
+
assert isinstance(result, dict)
|
|
241
|
+
print("✓ Storyteller Agent works correctly")
|
|
242
|
+
return True
|
|
243
|
+
except Exception as e:
|
|
244
|
+
print(f"✗ Storyteller Agent failed: {e}")
|
|
245
|
+
import traceback
|
|
246
|
+
|
|
247
|
+
traceback.print_exc()
|
|
248
|
+
return False
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
async def run_all_tests():
|
|
252
|
+
"""Run all cis module agent tests"""
|
|
253
|
+
print("=" * 60)
|
|
254
|
+
print("CIS Module - Integration Tests")
|
|
255
|
+
print("=" * 60)
|
|
256
|
+
|
|
257
|
+
tests = [
|
|
258
|
+
test_brainstorming_coach(),
|
|
259
|
+
test_creative_problem_solver(),
|
|
260
|
+
test_design_thinking_coach(),
|
|
261
|
+
test_innovation_strategist(),
|
|
262
|
+
test_presentation_master(),
|
|
263
|
+
test_storyteller(),
|
|
264
|
+
]
|
|
265
|
+
|
|
266
|
+
results = await asyncio.gather(*tests)
|
|
267
|
+
|
|
268
|
+
passed = sum(results)
|
|
269
|
+
total = len(results)
|
|
270
|
+
|
|
271
|
+
print("\n" + "=" * 60)
|
|
272
|
+
print(f"Test Results: {passed}/{total} agents passed")
|
|
273
|
+
print("=" * 60)
|
|
274
|
+
|
|
275
|
+
if passed == total:
|
|
276
|
+
print("✓ All CIS agents work correctly!")
|
|
277
|
+
return 0
|
|
278
|
+
else:
|
|
279
|
+
print(f"✗ {total - passed} agent(s) failed")
|
|
280
|
+
return 1
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
if __name__ == "__main__":
|
|
284
|
+
exit_code = asyncio.run(run_all_tests())
|
|
285
|
+
sys.exit(exit_code)
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"""Simple test script for DB Optimization Pack agents."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import os
|
|
5
|
+
import asyncio
|
|
6
|
+
import importlib.util
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def load_agent(module_path, class_name):
|
|
10
|
+
"""Load an agent class from a file path."""
|
|
11
|
+
spec = importlib.util.spec_from_file_location("agent_module", module_path)
|
|
12
|
+
if spec is None:
|
|
13
|
+
raise ImportError(f"Could not load spec from {module_path}")
|
|
14
|
+
module = importlib.util.module_from_spec(spec)
|
|
15
|
+
spec.loader.exec_module(module)
|
|
16
|
+
return getattr(module, class_name)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Load agents
|
|
20
|
+
DBPerformanceAnalystAgent = load_agent(
|
|
21
|
+
os.path.join(
|
|
22
|
+
os.path.dirname(__file__),
|
|
23
|
+
"../app/packs/db-optimization/agents/db-performance-analyst/agent.py",
|
|
24
|
+
),
|
|
25
|
+
"DBPerformanceAnalystAgent",
|
|
26
|
+
)
|
|
27
|
+
QueryOptimizerAgent = load_agent(
|
|
28
|
+
os.path.join(
|
|
29
|
+
os.path.dirname(__file__),
|
|
30
|
+
"../app/packs/db-optimization/agents/query-optimizer/agent.py",
|
|
31
|
+
),
|
|
32
|
+
"QueryOptimizerAgent",
|
|
33
|
+
)
|
|
34
|
+
IndexingSpecialistAgent = load_agent(
|
|
35
|
+
os.path.join(
|
|
36
|
+
os.path.dirname(__file__),
|
|
37
|
+
"../app/packs/db-optimization/agents/indexing-specialist/agent.py",
|
|
38
|
+
),
|
|
39
|
+
"IndexingSpecialistAgent",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
async def test_db_performance_analyst():
|
|
44
|
+
"""Test DB Performance Analyst agent."""
|
|
45
|
+
print("Testing DB Performance Analyst agent...")
|
|
46
|
+
agent = DBPerformanceAnalystAgent()
|
|
47
|
+
|
|
48
|
+
# Test get_info method
|
|
49
|
+
info = agent.get_info()
|
|
50
|
+
assert info is not None
|
|
51
|
+
assert "name" in info
|
|
52
|
+
assert info["name"] == "DB Performance Analyst"
|
|
53
|
+
assert "capabilities" in info
|
|
54
|
+
assert len(info["capabilities"]) > 0
|
|
55
|
+
|
|
56
|
+
# Test process method with a simple request
|
|
57
|
+
from dataclasses import dataclass
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class DBPerformanceRequest:
|
|
61
|
+
action: str
|
|
62
|
+
db_type: str = None
|
|
63
|
+
performance_issue: str = None
|
|
64
|
+
metrics: dict = None
|
|
65
|
+
query_samples: list = None
|
|
66
|
+
schema_info: dict = None
|
|
67
|
+
|
|
68
|
+
request = DBPerformanceRequest(action="analyze", db_type="PostgreSQL")
|
|
69
|
+
|
|
70
|
+
result = await agent.process(request)
|
|
71
|
+
assert result is not None
|
|
72
|
+
assert len(result) > 0
|
|
73
|
+
print("✓ DB Performance Analyst agent test passed")
|
|
74
|
+
return True
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
async def test_query_optimizer():
|
|
78
|
+
"""Test Query Optimizer agent."""
|
|
79
|
+
print("Testing Query Optimizer agent...")
|
|
80
|
+
agent = QueryOptimizerAgent()
|
|
81
|
+
|
|
82
|
+
# Test get_info method
|
|
83
|
+
info = agent.get_info()
|
|
84
|
+
assert info is not None
|
|
85
|
+
assert "name" in info
|
|
86
|
+
assert info["name"] == "Query Optimizer"
|
|
87
|
+
assert "capabilities" in info
|
|
88
|
+
assert len(info["capabilities"]) > 0
|
|
89
|
+
|
|
90
|
+
# Test process method with a simple request
|
|
91
|
+
from dataclasses import dataclass
|
|
92
|
+
|
|
93
|
+
@dataclass
|
|
94
|
+
class QueryOptimizationRequest:
|
|
95
|
+
action: str
|
|
96
|
+
db_type: str = None
|
|
97
|
+
query: str = None
|
|
98
|
+
execution_plan: dict = None
|
|
99
|
+
schema_info: dict = None
|
|
100
|
+
performance_goal: str = None
|
|
101
|
+
|
|
102
|
+
request = QueryOptimizationRequest(action="analyze", db_type="PostgreSQL")
|
|
103
|
+
|
|
104
|
+
result = await agent.process(request)
|
|
105
|
+
assert result is not None
|
|
106
|
+
assert len(result) > 0
|
|
107
|
+
print("✓ Query Optimizer agent test passed")
|
|
108
|
+
return True
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
async def test_indexing_specialist():
|
|
112
|
+
"""Test Indexing Specialist agent."""
|
|
113
|
+
print("Testing Indexing Specialist agent...")
|
|
114
|
+
agent = IndexingSpecialistAgent()
|
|
115
|
+
|
|
116
|
+
# Test get_info method
|
|
117
|
+
info = agent.get_info()
|
|
118
|
+
assert info is not None
|
|
119
|
+
assert "name" in info
|
|
120
|
+
assert info["name"] == "Indexing Specialist"
|
|
121
|
+
assert "capabilities" in info
|
|
122
|
+
assert len(info["capabilities"]) > 0
|
|
123
|
+
|
|
124
|
+
# Test process method with a simple request
|
|
125
|
+
from dataclasses import dataclass
|
|
126
|
+
|
|
127
|
+
@dataclass
|
|
128
|
+
class IndexingRequest:
|
|
129
|
+
action: str
|
|
130
|
+
db_type: str = None
|
|
131
|
+
table_name: str = None
|
|
132
|
+
query_patterns: list = None
|
|
133
|
+
schema_info: dict = None
|
|
134
|
+
current_indexes: list = None
|
|
135
|
+
workload_type: str = None
|
|
136
|
+
|
|
137
|
+
request = IndexingRequest(action="design", db_type="PostgreSQL")
|
|
138
|
+
|
|
139
|
+
result = await agent.process(request)
|
|
140
|
+
assert result is not None
|
|
141
|
+
assert len(result) > 0
|
|
142
|
+
print("✓ Indexing Specialist agent test passed")
|
|
143
|
+
return True
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
async def main():
|
|
147
|
+
"""Run all tests."""
|
|
148
|
+
print("=" * 60)
|
|
149
|
+
print("DB Optimization Pack - Simple Agent Tests")
|
|
150
|
+
print("=" * 60)
|
|
151
|
+
print()
|
|
152
|
+
|
|
153
|
+
all_passed = True
|
|
154
|
+
|
|
155
|
+
try:
|
|
156
|
+
all_passed &= await test_db_performance_analyst()
|
|
157
|
+
except Exception as e:
|
|
158
|
+
print(f"✗ DB Performance Analyst agent test failed: {e}")
|
|
159
|
+
import traceback
|
|
160
|
+
|
|
161
|
+
traceback.print_exc()
|
|
162
|
+
all_passed = False
|
|
163
|
+
|
|
164
|
+
print()
|
|
165
|
+
|
|
166
|
+
try:
|
|
167
|
+
all_passed &= await test_query_optimizer()
|
|
168
|
+
except Exception as e:
|
|
169
|
+
print(f"✗ Query Optimizer agent test failed: {e}")
|
|
170
|
+
import traceback
|
|
171
|
+
|
|
172
|
+
traceback.print_exc()
|
|
173
|
+
all_passed = False
|
|
174
|
+
|
|
175
|
+
print()
|
|
176
|
+
|
|
177
|
+
try:
|
|
178
|
+
all_passed &= await test_indexing_specialist()
|
|
179
|
+
except Exception as e:
|
|
180
|
+
print(f"✗ Indexing Specialist agent test failed: {e}")
|
|
181
|
+
import traceback
|
|
182
|
+
|
|
183
|
+
traceback.print_exc()
|
|
184
|
+
all_passed = False
|
|
185
|
+
|
|
186
|
+
print()
|
|
187
|
+
print("=" * 60)
|
|
188
|
+
if all_passed:
|
|
189
|
+
print("All DB Optimization Pack tests passed! ✓")
|
|
190
|
+
else:
|
|
191
|
+
print("Some tests failed! ✗")
|
|
192
|
+
print("=" * 60)
|
|
193
|
+
|
|
194
|
+
return all_passed
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
if __name__ == "__main__":
|
|
198
|
+
all_passed = asyncio.run(main())
|
|
199
|
+
sys.exit(0 if all_passed else 1)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"""Simple test script for DevOps/Azure Pack agents."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import os
|
|
5
|
+
import asyncio
|
|
6
|
+
import importlib.util
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def load_agent(module_path, class_name):
|
|
10
|
+
"""Load an agent class from a file path."""
|
|
11
|
+
spec = importlib.util.spec_from_file_location("agent_module", module_path)
|
|
12
|
+
if spec is None:
|
|
13
|
+
raise ImportError(f"Could not load spec from {module_path}")
|
|
14
|
+
module = importlib.util.module_from_spec(spec)
|
|
15
|
+
spec.loader.exec_module(module)
|
|
16
|
+
return getattr(module, class_name)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Load agents
|
|
20
|
+
DevOpsEngineerAgent = load_agent(
|
|
21
|
+
os.path.join(
|
|
22
|
+
os.path.dirname(__file__),
|
|
23
|
+
"../app/packs/devops-azure/agents/devops-engineer/agent.py",
|
|
24
|
+
),
|
|
25
|
+
"DevOpsEngineerAgent",
|
|
26
|
+
)
|
|
27
|
+
AzureSpecialistAgent = load_agent(
|
|
28
|
+
os.path.join(
|
|
29
|
+
os.path.dirname(__file__),
|
|
30
|
+
"../app/packs/devops-azure/agents/azure-specialist/agent.py",
|
|
31
|
+
),
|
|
32
|
+
"AzureSpecialistAgent",
|
|
33
|
+
)
|
|
34
|
+
CICDArchitectAgent = load_agent(
|
|
35
|
+
os.path.join(
|
|
36
|
+
os.path.dirname(__file__),
|
|
37
|
+
"../app/packs/devops-azure/agents/cicd-architect/agent.py",
|
|
38
|
+
),
|
|
39
|
+
"CICDArchitectAgent",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
async def test_devops_engineer():
|
|
44
|
+
"""Test DevOps Engineer Agent."""
|
|
45
|
+
print("Testing DevOps Engineer Agent...")
|
|
46
|
+
agent = DevOpsEngineerAgent()
|
|
47
|
+
|
|
48
|
+
# Test get_info method
|
|
49
|
+
info = agent.get_info()
|
|
50
|
+
assert info is not None
|
|
51
|
+
assert "name" in info
|
|
52
|
+
assert info["name"] == "DevOps Engineer"
|
|
53
|
+
assert "capabilities" in info
|
|
54
|
+
assert len(info["capabilities"]) > 0
|
|
55
|
+
|
|
56
|
+
# Test process method with a simple request
|
|
57
|
+
from dataclasses import dataclass
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class DevOpsRequest:
|
|
61
|
+
action: str
|
|
62
|
+
task: str = None
|
|
63
|
+
context: dict = None
|
|
64
|
+
tools: list = None
|
|
65
|
+
|
|
66
|
+
request = DevOpsRequest(action="explain", task="CI/CD pipeline")
|
|
67
|
+
|
|
68
|
+
result = await agent.process(request)
|
|
69
|
+
assert result is not None
|
|
70
|
+
assert len(result) > 0
|
|
71
|
+
print("✓ DevOps Engineer agent test passed")
|
|
72
|
+
return True
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
async def test_azure_specialist():
|
|
76
|
+
"""Test Azure Specialist Agent."""
|
|
77
|
+
print("Testing Azure Specialist Agent...")
|
|
78
|
+
agent = AzureSpecialistAgent()
|
|
79
|
+
|
|
80
|
+
# Test get_info method
|
|
81
|
+
info = agent.get_info()
|
|
82
|
+
assert info is not None
|
|
83
|
+
assert "name" in info
|
|
84
|
+
assert info["name"] == "Azure Specialist"
|
|
85
|
+
assert "capabilities" in info
|
|
86
|
+
assert len(info["capabilities"]) > 0
|
|
87
|
+
|
|
88
|
+
# Test process method with a simple request
|
|
89
|
+
from dataclasses import dataclass
|
|
90
|
+
|
|
91
|
+
@dataclass
|
|
92
|
+
class AzureRequest:
|
|
93
|
+
action: str
|
|
94
|
+
service: str = None
|
|
95
|
+
task: str = None
|
|
96
|
+
context: dict = None
|
|
97
|
+
|
|
98
|
+
request = AzureRequest(action="explain", service="Virtual Machines")
|
|
99
|
+
|
|
100
|
+
result = await agent.process(request)
|
|
101
|
+
assert result is not None
|
|
102
|
+
assert len(result) > 0
|
|
103
|
+
print("✓ Azure Specialist agent test passed")
|
|
104
|
+
return True
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
async def test_cicd_architect():
|
|
108
|
+
"""Test CI/CD Architect Agent."""
|
|
109
|
+
print("Testing CI/CD Architect Agent...")
|
|
110
|
+
agent = CICDArchitectAgent()
|
|
111
|
+
|
|
112
|
+
# Test get_info method
|
|
113
|
+
info = agent.get_info()
|
|
114
|
+
assert info is not None
|
|
115
|
+
assert "name" in info
|
|
116
|
+
assert info["name"] == "CI/CD Architect"
|
|
117
|
+
assert "capabilities" in info
|
|
118
|
+
assert len(info["capabilities"]) > 0
|
|
119
|
+
|
|
120
|
+
# Test process method with a simple request
|
|
121
|
+
from dataclasses import dataclass
|
|
122
|
+
|
|
123
|
+
@dataclass
|
|
124
|
+
class CICDRequest:
|
|
125
|
+
action: str
|
|
126
|
+
pipeline_type: str = None
|
|
127
|
+
deployment_strategy: str = None
|
|
128
|
+
tools: list = None
|
|
129
|
+
environment: str = None
|
|
130
|
+
|
|
131
|
+
request = CICDRequest(action="design", pipeline_type="application_deployment")
|
|
132
|
+
|
|
133
|
+
result = await agent.process(request)
|
|
134
|
+
assert result is not None
|
|
135
|
+
assert len(result) > 0
|
|
136
|
+
print("✓ CI/CD Architect agent test passed")
|
|
137
|
+
return True
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
async def main():
|
|
141
|
+
"""Run all tests."""
|
|
142
|
+
print("=" * 60)
|
|
143
|
+
print("DevOps/Azure Pack - Simple Agent Tests")
|
|
144
|
+
print("=" * 60)
|
|
145
|
+
print()
|
|
146
|
+
|
|
147
|
+
all_passed = True
|
|
148
|
+
|
|
149
|
+
try:
|
|
150
|
+
all_passed &= await test_devops_engineer()
|
|
151
|
+
except Exception as e:
|
|
152
|
+
print(f"✗ DevOps Engineer agent test failed: {e}")
|
|
153
|
+
import traceback
|
|
154
|
+
|
|
155
|
+
traceback.print_exc()
|
|
156
|
+
all_passed = False
|
|
157
|
+
|
|
158
|
+
print()
|
|
159
|
+
|
|
160
|
+
try:
|
|
161
|
+
all_passed &= await test_azure_specialist()
|
|
162
|
+
except Exception as e:
|
|
163
|
+
print(f"✗ Azure Specialist agent test failed: {e}")
|
|
164
|
+
import traceback
|
|
165
|
+
|
|
166
|
+
traceback.print_exc()
|
|
167
|
+
all_passed = False
|
|
168
|
+
|
|
169
|
+
print()
|
|
170
|
+
|
|
171
|
+
try:
|
|
172
|
+
all_passed &= await test_cicd_architect()
|
|
173
|
+
except Exception as e:
|
|
174
|
+
print(f"✗ CI/CD Architect agent test failed: {e}")
|
|
175
|
+
import traceback
|
|
176
|
+
|
|
177
|
+
traceback.print_exc()
|
|
178
|
+
all_passed = False
|
|
179
|
+
|
|
180
|
+
print()
|
|
181
|
+
print("=" * 60)
|
|
182
|
+
if all_passed:
|
|
183
|
+
print("All DevOps/Azure Pack tests passed! ✓")
|
|
184
|
+
else:
|
|
185
|
+
print("Some tests failed! ✗")
|
|
186
|
+
print("=" * 60)
|
|
187
|
+
|
|
188
|
+
return all_passed
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
if __name__ == "__main__":
|
|
192
|
+
all_passed = asyncio.run(main())
|
|
193
|
+
sys.exit(0 if all_passed else 1)
|