"""Static rule definitions for role dispatcher.""" from __future__ import annotations from dataclasses import dataclass, field from enum import Enum from typing import Any, Optional class Role(str, Enum): """系统角色定义""" BOSS = "boss" AI_ENGINEER = "ai_engineer" BACKEND = "backend" FRONTEND = "frontend" @dataclass class RoutingRule: """路由规则定义""" role: Role name: str description: str triggers: list[str] = field(default_factory=list) keywords: list[str] = field(default_factory=list) patterns: list[str] = field(default_factory=list) threshold: Optional[dict[str, Any]] = None priority: int = 0 ROLE_RULES: list[RoutingRule] = [ RoutingRule( role=Role.BOSS, name="战略决策", description="需要老板决策的高影响任务", triggers=["cost_estimate", "architecture_change", "high_risk", "security"], keywords=["预算", "架构", "安全", "风险", "审批", "决策"], threshold={"dev_days": 5, "risk_level": ["CRITICAL", "HIGH"]}, priority=100, ), RoutingRule( role=Role.AI_ENGINEER, name="AI 工程", description="AI 模型和数据处理相关任务", triggers=["prompt", "model", "embedding", "rag", "llm"], keywords=[ "ollama", "openai", "claude", "prompt", "embedding", "rag", "llm", "向量", "模型", "训练", "数据清洗", "token", "context", ], patterns=[r"(prompt|embedding|rag|llm|vector|model)", r"(ai|machine.?learning|ml)"], priority=50, ), RoutingRule( role=Role.BACKEND, name="后端开发", description="API、数据库、爬虫等后端任务", triggers=["api", "database", "crawler", "performance", "docker"], keywords=[ "fastapi", "sqlalchemy", "postgres", "sql", "async", "docker", "kubernetes", "redis", "celery", "爬虫", "api", "接口", "数据库", "后端", "性能", "缓存", ], patterns=[ r"(api|endpoint|route)", r"(sql|database|db)", r"(docker|k8s|kubernetes)", r"(async|await|celery)", ], priority=30, ), RoutingRule( role=Role.FRONTEND, name="前端开发", description="UI、可视化、交互等前端任务", triggers=["ui", "visualization", "interaction", "responsive", "chart"], keywords=[ "vue", "react", "typescript", "component", "chart", "echarts", "d3", "可视化", "ui", "ux", "样式", "动画", "响应式", "组件", "交互", "页面", "布局", ], patterns=[ r"(vue|react|tsx?|jsx?)", r"(css|scss|tailwind)", r"(component|props|emit)", r"(chart|graph|visualization)", ], priority=30, ), ] TECH_KEYWORDS = { "frontend": [ "vue", "react", "typescript", "javascript", "css", "scss", "tailwind", "component", "props", "emit", "template", "style", ], "backend": [ "fastapi", "flask", "django", "sqlalchemy", "postgres", "mysql", "redis", "celery", "async", "await", "docker", "kubernetes", "k8s", "api", "endpoint", "route", ], "ai": [ "llm", "ollama", "openai", "claude", "prompt", "embedding", "rag", "vector", "model", "training", "inference", "token", "context", ], }