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,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit Tests for Agent Schema Edge Cases
|
|
3
|
+
*
|
|
4
|
+
* Tests internal functions to achieve 100% branch coverage
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { validateAgentFile } = require('../tools/schema/agent.js');
|
|
8
|
+
|
|
9
|
+
console.log('Running edge case unit tests...\n');
|
|
10
|
+
|
|
11
|
+
let passed = 0;
|
|
12
|
+
let failed = 0;
|
|
13
|
+
|
|
14
|
+
// Test 1: Path with malformed module structure (no slash after module name)
|
|
15
|
+
// This tests line 213: slashIndex === -1
|
|
16
|
+
console.log('Test 1: Malformed module path (no slash after module name)');
|
|
17
|
+
try {
|
|
18
|
+
const result = validateAgentFile('src/bmm', {
|
|
19
|
+
agent: {
|
|
20
|
+
metadata: {
|
|
21
|
+
id: 'test',
|
|
22
|
+
name: 'Test',
|
|
23
|
+
title: 'Test',
|
|
24
|
+
icon: '🧪',
|
|
25
|
+
},
|
|
26
|
+
persona: {
|
|
27
|
+
role: 'Test',
|
|
28
|
+
identity: 'Test',
|
|
29
|
+
communication_style: 'Test',
|
|
30
|
+
principles: ['Test'],
|
|
31
|
+
},
|
|
32
|
+
menu: [{ trigger: 'help', description: 'Help', action: 'help' }],
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
if (result.success) {
|
|
37
|
+
console.log('✗ Should have failed - missing module field');
|
|
38
|
+
failed++;
|
|
39
|
+
} else {
|
|
40
|
+
console.log('✓ Correctly handled malformed path (treated as core agent)');
|
|
41
|
+
passed++;
|
|
42
|
+
}
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.log('✗ Unexpected error:', error.message);
|
|
45
|
+
failed++;
|
|
46
|
+
}
|
|
47
|
+
console.log('');
|
|
48
|
+
|
|
49
|
+
// Test 2: Module option with empty string
|
|
50
|
+
// This tests line 222: trimmed.length > 0
|
|
51
|
+
console.log('Test 2: Module agent with empty string in module field');
|
|
52
|
+
try {
|
|
53
|
+
const result = validateAgentFile('src/bmm/agents/test.agent.yaml', {
|
|
54
|
+
agent: {
|
|
55
|
+
metadata: {
|
|
56
|
+
id: 'test',
|
|
57
|
+
name: 'Test',
|
|
58
|
+
title: 'Test',
|
|
59
|
+
icon: '🧪',
|
|
60
|
+
module: ' ', // Empty after trimming
|
|
61
|
+
},
|
|
62
|
+
persona: {
|
|
63
|
+
role: 'Test',
|
|
64
|
+
identity: 'Test',
|
|
65
|
+
communication_style: 'Test',
|
|
66
|
+
principles: ['Test'],
|
|
67
|
+
},
|
|
68
|
+
menu: [{ trigger: 'help', description: 'Help', action: 'help' }],
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
if (result.success) {
|
|
73
|
+
console.log('✗ Should have failed - empty module string');
|
|
74
|
+
failed++;
|
|
75
|
+
} else {
|
|
76
|
+
console.log('✓ Correctly rejected empty module string');
|
|
77
|
+
passed++;
|
|
78
|
+
}
|
|
79
|
+
} catch (error) {
|
|
80
|
+
console.log('✗ Unexpected error:', error.message);
|
|
81
|
+
failed++;
|
|
82
|
+
}
|
|
83
|
+
console.log('');
|
|
84
|
+
|
|
85
|
+
// Test 3: Core agent path (src/core/agents/...) - tests the !filePath.startsWith(marker) branch
|
|
86
|
+
console.log('Test 3: Core agent path returns null for module');
|
|
87
|
+
try {
|
|
88
|
+
const result = validateAgentFile('src/core/agents/test.agent.yaml', {
|
|
89
|
+
agent: {
|
|
90
|
+
metadata: {
|
|
91
|
+
id: 'test',
|
|
92
|
+
name: 'Test',
|
|
93
|
+
title: 'Test',
|
|
94
|
+
icon: '🧪',
|
|
95
|
+
// No module field - correct for core agent
|
|
96
|
+
},
|
|
97
|
+
persona: {
|
|
98
|
+
role: 'Test',
|
|
99
|
+
identity: 'Test',
|
|
100
|
+
communication_style: 'Test',
|
|
101
|
+
principles: ['Test'],
|
|
102
|
+
},
|
|
103
|
+
menu: [{ trigger: 'help', description: 'Help', action: 'help' }],
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (result.success) {
|
|
108
|
+
console.log('✓ Core agent validated correctly (no module required)');
|
|
109
|
+
passed++;
|
|
110
|
+
} else {
|
|
111
|
+
console.log('✗ Core agent should pass without module field');
|
|
112
|
+
failed++;
|
|
113
|
+
}
|
|
114
|
+
} catch (error) {
|
|
115
|
+
console.log('✗ Unexpected error:', error.message);
|
|
116
|
+
failed++;
|
|
117
|
+
}
|
|
118
|
+
console.log('');
|
|
119
|
+
|
|
120
|
+
// Summary
|
|
121
|
+
console.log('═══════════════════════════════════════');
|
|
122
|
+
console.log('Edge Case Unit Test Results:');
|
|
123
|
+
console.log(` Passed: ${passed}`);
|
|
124
|
+
console.log(` Failed: ${failed}`);
|
|
125
|
+
console.log('═══════════════════════════════════════\n');
|
|
126
|
+
|
|
127
|
+
if (failed === 0) {
|
|
128
|
+
console.log('✨ All edge case tests passed!\n');
|
|
129
|
+
process.exit(0);
|
|
130
|
+
} else {
|
|
131
|
+
console.log('❌ Some edge case tests failed\n');
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Comprehensive Test Runner for MDAN
|
|
3
|
+
|
|
4
|
+
This script runs all integration tests to verify all agents are working correctly.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
import os
|
|
9
|
+
import subprocess
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def run_test(test_file, description):
|
|
13
|
+
"""Run a test file and return the result."""
|
|
14
|
+
print(f"\n{'=' * 60}")
|
|
15
|
+
print(f"Running: {description}")
|
|
16
|
+
print(f"{'=' * 60}\n")
|
|
17
|
+
|
|
18
|
+
result = subprocess.run([sys.executable, test_file], capture_output=True, text=True)
|
|
19
|
+
|
|
20
|
+
if result.returncode == 0:
|
|
21
|
+
print(f"✓ {description} - PASSED")
|
|
22
|
+
return True
|
|
23
|
+
else:
|
|
24
|
+
print(f"✗ {description} - FAILED")
|
|
25
|
+
print("STDOUT:", result.stdout)
|
|
26
|
+
print("STDERR:", result.stderr)
|
|
27
|
+
return False
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def main():
|
|
31
|
+
"""Run all integration tests."""
|
|
32
|
+
print("\n" + "=" * 60)
|
|
33
|
+
print("MDAN - Comprehensive Integration Test Suite")
|
|
34
|
+
print("=" * 60 + "\n")
|
|
35
|
+
|
|
36
|
+
tests = [
|
|
37
|
+
("tests/simple_test.py", "Core (MDAN Master)"),
|
|
38
|
+
("tests/simple_fintech_test.py", "FinTech Pack"),
|
|
39
|
+
("tests/simple_devops_test.py", "DevOps/Azure Pack"),
|
|
40
|
+
("tests/simple_mmb_test.py", "MMB Module"),
|
|
41
|
+
("tests/simple_cis_test.py", "CIS Module"),
|
|
42
|
+
("tests/simple_tea_test.py", "TEA Module"),
|
|
43
|
+
("tests/simple_ux_designer_test.py", "UX Designer (MMM)"),
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
results = []
|
|
47
|
+
for test_file, description in tests:
|
|
48
|
+
if os.path.exists(test_file):
|
|
49
|
+
result = run_test(test_file, description)
|
|
50
|
+
results.append((description, result))
|
|
51
|
+
else:
|
|
52
|
+
print(f"⚠ {description} - Test file not found: {test_file}")
|
|
53
|
+
results.append((description, False))
|
|
54
|
+
|
|
55
|
+
# Print summary
|
|
56
|
+
print("\n" + "=" * 60)
|
|
57
|
+
print("Test Summary")
|
|
58
|
+
print("=" * 60 + "\n")
|
|
59
|
+
|
|
60
|
+
passed = sum(1 for _, result in results if result)
|
|
61
|
+
total = len(results)
|
|
62
|
+
|
|
63
|
+
for description, result in results:
|
|
64
|
+
status = "✓ PASSED" if result else "✗ FAILED"
|
|
65
|
+
print(f"{status}: {description}")
|
|
66
|
+
|
|
67
|
+
print("\n" + "=" * 60)
|
|
68
|
+
print(f"Results: {passed}/{total} tests passed")
|
|
69
|
+
print("=" * 60 + "\n")
|
|
70
|
+
|
|
71
|
+
if passed == total:
|
|
72
|
+
print("🎉 All integration tests passed!")
|
|
73
|
+
return 0
|
|
74
|
+
else:
|
|
75
|
+
print(f"⚠ {total - passed} test(s) failed")
|
|
76
|
+
return 1
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
if __name__ == "__main__":
|
|
80
|
+
sys.exit(main())
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Scenario tests for Brainstorming Coach agent
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../.."))
|
|
9
|
+
|
|
10
|
+
from app.cis.agents.brainstorming_coach import (
|
|
11
|
+
BrainstormingCoach,
|
|
12
|
+
BrainstormingCoachRequest,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
async def test_brainstorming_basic():
|
|
17
|
+
"""Test basic brainstorming session."""
|
|
18
|
+
agent = BrainstormingCoach()
|
|
19
|
+
request = BrainstormingCoachRequest(
|
|
20
|
+
topic="New product ideas for a coffee shop", session_type="standard"
|
|
21
|
+
)
|
|
22
|
+
result = await agent.process(request)
|
|
23
|
+
assert result["success"] == True
|
|
24
|
+
assert result["agent"] == "Carson"
|
|
25
|
+
assert result["topic"] == "New product ideas for a coffee shop"
|
|
26
|
+
assert "session_plan" in result
|
|
27
|
+
assert "techniques" in result
|
|
28
|
+
assert len(result["techniques"]) > 0
|
|
29
|
+
print("✓ test_brainstorming_basic passed")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
async def test_brainstorming_party_mode():
|
|
33
|
+
"""Test brainstorming with party mode."""
|
|
34
|
+
agent = BrainstormingCoach()
|
|
35
|
+
request = BrainstormingCoachRequest(
|
|
36
|
+
topic="Team building activities", session_type="party-mode", participants=10
|
|
37
|
+
)
|
|
38
|
+
result = await agent.process(request)
|
|
39
|
+
assert result["success"] == True
|
|
40
|
+
assert result["session_type"] == "party-mode"
|
|
41
|
+
assert result["participants"] == 10
|
|
42
|
+
# Check that party mode warm-up is included
|
|
43
|
+
assert any("Party Mode" in t["name"] for t in result["techniques"])
|
|
44
|
+
print("✓ test_brainstorming_party_mode passed")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async def test_brainstorming_with_constraints():
|
|
48
|
+
"""Test brainstorming with constraints."""
|
|
49
|
+
agent = BrainstormingCoach()
|
|
50
|
+
request = BrainstormingCoachRequest(
|
|
51
|
+
topic="Marketing campaign ideas",
|
|
52
|
+
session_type="standard",
|
|
53
|
+
constraints="Budget under $5000, 2-week timeline",
|
|
54
|
+
goals="Increase brand awareness",
|
|
55
|
+
)
|
|
56
|
+
result = await agent.process(request)
|
|
57
|
+
assert result["success"] == True
|
|
58
|
+
assert result["constraints"] == "Budget under $5000, 2-week timeline"
|
|
59
|
+
assert result["goals"] == "Increase brand awareness"
|
|
60
|
+
print("✓ test_brainstorming_with_constraints passed")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
async def test_brainstorming_session_plan():
|
|
64
|
+
"""Test that session plan is generated correctly."""
|
|
65
|
+
agent = BrainstormingCoach()
|
|
66
|
+
request = BrainstormingCoachRequest(topic="App feature ideas")
|
|
67
|
+
result = await agent.process(request)
|
|
68
|
+
assert result["success"] == True
|
|
69
|
+
session_plan = result["session_plan"]
|
|
70
|
+
assert "warm_up" in session_plan
|
|
71
|
+
assert "ideation_phase" in session_plan
|
|
72
|
+
assert "expansion_phase" in session_plan
|
|
73
|
+
assert "convergence_phase" in session_plan
|
|
74
|
+
assert "action_planning" in session_plan
|
|
75
|
+
print("✓ test_brainstorming_session_plan passed")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
async def test_brainstorming_techniques():
|
|
79
|
+
"""Test that brainstorming techniques are provided."""
|
|
80
|
+
agent = BrainstormingCoach()
|
|
81
|
+
request = BrainstormingCoachRequest(topic="Innovation ideas")
|
|
82
|
+
result = await agent.process(request)
|
|
83
|
+
assert result["success"] == True
|
|
84
|
+
techniques = result["techniques"]
|
|
85
|
+
assert len(techniques) >= 5
|
|
86
|
+
# Check for known techniques
|
|
87
|
+
technique_names = [t["name"] for t in techniques]
|
|
88
|
+
assert "Classic Brainstorming" in technique_names
|
|
89
|
+
assert "Mind Mapping" in technique_names
|
|
90
|
+
print("✓ test_brainstorming_techniques passed")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
async def test_brainstorming_facilitation_guide():
|
|
94
|
+
"""Test that facilitation guide is provided."""
|
|
95
|
+
agent = BrainstormingCoach()
|
|
96
|
+
request = BrainstormingCoachRequest(topic="Team improvement ideas")
|
|
97
|
+
result = await agent.process(request)
|
|
98
|
+
assert result["success"] == True
|
|
99
|
+
guide = result["facilitation_guide"]
|
|
100
|
+
assert "opening" in guide
|
|
101
|
+
assert "ground_rules" in guide
|
|
102
|
+
assert "prompts" in guide
|
|
103
|
+
assert "closing" in guide
|
|
104
|
+
assert len(guide["ground_rules"]) > 0
|
|
105
|
+
assert len(guide["prompts"]) > 0
|
|
106
|
+
print("✓ test_brainstorming_facilitation_guide passed")
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
async def test_brainstorming_principles():
|
|
110
|
+
"""Test that brainstorming principles are included."""
|
|
111
|
+
agent = BrainstormingCoach()
|
|
112
|
+
request = BrainstormingCoachRequest(topic="Creative ideas")
|
|
113
|
+
result = await agent.process(request)
|
|
114
|
+
assert result["success"] == True
|
|
115
|
+
principles = result["principles"]
|
|
116
|
+
assert len(principles) > 0
|
|
117
|
+
assert "Psychological safety unlocks breakthroughs" in principles
|
|
118
|
+
print("✓ test_brainstorming_principles passed")
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
async def test_brainstorming_missing_topic():
|
|
122
|
+
"""Test brainstorming with missing topic."""
|
|
123
|
+
agent = BrainstormingCoach()
|
|
124
|
+
request = BrainstormingCoachRequest(topic="")
|
|
125
|
+
result = await agent.process(request)
|
|
126
|
+
assert result["success"] == False
|
|
127
|
+
assert "error" in result
|
|
128
|
+
print("✓ test_brainstorming_missing_topic passed")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
async def main():
|
|
132
|
+
"""Run all tests."""
|
|
133
|
+
print("Running Brainstorming Coach agent tests...\n")
|
|
134
|
+
|
|
135
|
+
await test_brainstorming_basic()
|
|
136
|
+
await test_brainstorming_party_mode()
|
|
137
|
+
await test_brainstorming_with_constraints()
|
|
138
|
+
await test_brainstorming_session_plan()
|
|
139
|
+
await test_brainstorming_techniques()
|
|
140
|
+
await test_brainstorming_facilitation_guide()
|
|
141
|
+
await test_brainstorming_principles()
|
|
142
|
+
await test_brainstorming_missing_topic()
|
|
143
|
+
|
|
144
|
+
print("\n✅ All Brainstorming Coach tests passed!")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
if __name__ == "__main__":
|
|
148
|
+
import asyncio
|
|
149
|
+
|
|
150
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Scenario tests for Creative Problem Solver agent
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../.."))
|
|
9
|
+
|
|
10
|
+
from app.cis.agents.creative_problem_solver import (
|
|
11
|
+
CreativeProblemSolver,
|
|
12
|
+
CreativeProblemSolverRequest,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
async def test_problem_solving_basic():
|
|
17
|
+
"""Test basic problem solving."""
|
|
18
|
+
agent = CreativeProblemSolver()
|
|
19
|
+
request = CreativeProblemSolverRequest(
|
|
20
|
+
problem="Customer retention is declining", methodology="systematic"
|
|
21
|
+
)
|
|
22
|
+
result = await agent.process(request)
|
|
23
|
+
assert result["success"] == True
|
|
24
|
+
assert result["agent"] == "Dr. Quinn"
|
|
25
|
+
assert result["problem"] == "Customer retention is declining"
|
|
26
|
+
assert "problem_analysis" in result
|
|
27
|
+
assert "methodology_results" in result
|
|
28
|
+
assert "solutions" in result
|
|
29
|
+
print("✓ test_problem_solving_basic passed")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
async def test_problem_solving_triz():
|
|
33
|
+
"""Test problem solving with TRIZ methodology."""
|
|
34
|
+
agent = CreativeProblemSolver()
|
|
35
|
+
request = CreativeProblemSolverRequest(
|
|
36
|
+
problem="Product is too expensive to manufacture", methodology="triz"
|
|
37
|
+
)
|
|
38
|
+
result = await agent.process(request)
|
|
39
|
+
assert result["success"] == True
|
|
40
|
+
assert result["methodology"] == "triz"
|
|
41
|
+
methodology = result["methodology_results"]
|
|
42
|
+
assert methodology["methodology"] == "TRIZ (Theory of Inventive Problem Solving)"
|
|
43
|
+
assert "principles" in methodology
|
|
44
|
+
print("✓ test_problem_solving_triz passed")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async def test_problem_solving_toc():
|
|
48
|
+
"""Test problem solving with Theory of Constraints."""
|
|
49
|
+
agent = CreativeProblemSolver()
|
|
50
|
+
request = CreativeProblemSolverRequest(
|
|
51
|
+
problem="Production bottleneck", methodology="toc"
|
|
52
|
+
)
|
|
53
|
+
result = await agent.process(request)
|
|
54
|
+
assert result["success"] == True
|
|
55
|
+
assert result["methodology"] == "toc"
|
|
56
|
+
methodology = result["methodology_results"]
|
|
57
|
+
assert methodology["methodology"] == "Theory of Constraints"
|
|
58
|
+
assert "five_focusing_steps" in methodology
|
|
59
|
+
print("✓ test_problem_solving_toc passed")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
async def test_problem_solving_systems_thinking():
|
|
63
|
+
"""Test problem solving with Systems Thinking."""
|
|
64
|
+
agent = CreativeProblemSolver()
|
|
65
|
+
request = CreativeProblemSolverRequest(
|
|
66
|
+
problem="Organizational communication issues", methodology="systems-thinking"
|
|
67
|
+
)
|
|
68
|
+
result = await agent.process(request)
|
|
69
|
+
assert result["success"] == True
|
|
70
|
+
assert result["methodology"] == "systems-thinking"
|
|
71
|
+
methodology = result["methodology_results"]
|
|
72
|
+
assert methodology["methodology"] == "Systems Thinking"
|
|
73
|
+
assert "key_concepts" in methodology
|
|
74
|
+
print("✓ test_problem_solving_systems_thinking passed")
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
async def test_problem_solving_with_context():
|
|
78
|
+
"""Test problem solving with context."""
|
|
79
|
+
agent = CreativeProblemSolver()
|
|
80
|
+
request = CreativeProblemSolverRequest(
|
|
81
|
+
problem="Low user engagement",
|
|
82
|
+
context="Mobile app for fitness tracking",
|
|
83
|
+
constraints="Limited development resources",
|
|
84
|
+
methodology="systematic",
|
|
85
|
+
)
|
|
86
|
+
result = await agent.process(request)
|
|
87
|
+
assert result["success"] == True
|
|
88
|
+
assert result["context"] == "Mobile app for fitness tracking"
|
|
89
|
+
assert result["constraints"] == "Limited development resources"
|
|
90
|
+
print("✓ test_problem_solving_with_context passed")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
async def test_problem_solving_solutions():
|
|
94
|
+
"""Test that solutions are generated."""
|
|
95
|
+
agent = CreativeProblemSolver()
|
|
96
|
+
request = CreativeProblemSolverRequest(problem="High customer churn rate")
|
|
97
|
+
result = await agent.process(request)
|
|
98
|
+
assert result["success"] == True
|
|
99
|
+
solutions = result["solutions"]
|
|
100
|
+
assert len(solutions) > 0
|
|
101
|
+
# Check solution structure
|
|
102
|
+
for solution in solutions:
|
|
103
|
+
assert "solution" in solution
|
|
104
|
+
assert "description" in solution
|
|
105
|
+
assert "feasibility" in solution
|
|
106
|
+
assert "impact" in solution
|
|
107
|
+
assert "effort" in solution
|
|
108
|
+
print("✓ test_problem_solving_solutions passed")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
async def test_problem_solving_action_plan():
|
|
112
|
+
"""Test that action plan is created."""
|
|
113
|
+
agent = CreativeProblemSolver()
|
|
114
|
+
request = CreativeProblemSolverRequest(problem="Inefficient workflow")
|
|
115
|
+
result = await agent.process(request)
|
|
116
|
+
assert result["success"] == True
|
|
117
|
+
action_plan = result["action_plan"]
|
|
118
|
+
assert "prioritization" in action_plan
|
|
119
|
+
assert "implementation_steps" in action_plan
|
|
120
|
+
assert "risk_mitigation" in action_plan
|
|
121
|
+
assert "success_metrics" in action_plan
|
|
122
|
+
print("✓ test_problem_solving_action_plan passed")
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
async def test_problem_solving_principles():
|
|
126
|
+
"""Test that problem-solving principles are included."""
|
|
127
|
+
agent = CreativeProblemSolver()
|
|
128
|
+
request = CreativeProblemSolverRequest(problem="Quality issues")
|
|
129
|
+
result = await agent.process(request)
|
|
130
|
+
assert result["success"] == True
|
|
131
|
+
principles = result["principles"]
|
|
132
|
+
assert len(principles) > 0
|
|
133
|
+
assert "Every problem is a system revealing weaknesses" in principles
|
|
134
|
+
print("✓ test_problem_solving_principles passed")
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
async def test_problem_solving_missing_problem():
|
|
138
|
+
"""Test problem solving with missing problem."""
|
|
139
|
+
agent = CreativeProblemSolver()
|
|
140
|
+
request = CreativeProblemSolverRequest(problem="")
|
|
141
|
+
result = await agent.process(request)
|
|
142
|
+
assert result["success"] == False
|
|
143
|
+
assert "error" in result
|
|
144
|
+
print("✓ test_problem_solving_missing_problem passed")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
async def main():
|
|
148
|
+
"""Run all tests."""
|
|
149
|
+
print("Running Creative Problem Solver agent tests...\n")
|
|
150
|
+
|
|
151
|
+
await test_problem_solving_basic()
|
|
152
|
+
await test_problem_solving_triz()
|
|
153
|
+
await test_problem_solving_toc()
|
|
154
|
+
await test_problem_solving_systems_thinking()
|
|
155
|
+
await test_problem_solving_with_context()
|
|
156
|
+
await test_problem_solving_solutions()
|
|
157
|
+
await test_problem_solving_action_plan()
|
|
158
|
+
await test_problem_solving_principles()
|
|
159
|
+
await test_problem_solving_missing_problem()
|
|
160
|
+
|
|
161
|
+
print("\n✅ All Creative Problem Solver tests passed!")
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
if __name__ == "__main__":
|
|
165
|
+
import asyncio
|
|
166
|
+
|
|
167
|
+
asyncio.run(main())
|