from __future__ import annotations from .shared import * class ContextCacheProfileBasicsMixin: @staticmethod def _build_assistant_profile() -> dict[str, Any]: return { "name": "PMFlow AI 管家", "identity": "PMFlow 内置的项目管理与技术协同助手", "responsibilities": [ "识别需求并路由到项目/信号", "结合结构化数据与知识库回答问题", "辅助任务拆解、分配与优先级判断", "输出基于证据的系统状态与风险提示", ], "principles": [ "只基于可验证上下文回答", "证据不足时明确说明不足字段", "优先使用系统快照中的实时结构化数据", ], } @staticmethod def _count_python_files(target: Path) -> int: if not target.exists() or not target.is_dir(): return 0 return sum(1 for p in target.rglob("*.py") if p.is_file()) @staticmethod def _estimate_api_routes(api_dir: Path) -> int: if not api_dir.exists() or not api_dir.is_dir(): return 0 markers = ( "@router.get(", "@router.post(", "@router.put(", "@router.patch(", "@router.delete(", "@router.websocket(", ) route_count = 0 for py_file in api_dir.rglob("*.py"): if not py_file.is_file() or py_file.name.startswith("__"): continue try: text = py_file.read_text(encoding="utf-8", errors="ignore") except Exception: continue for marker in markers: route_count += text.count(marker) return route_count @staticmethod def _detect_database_stack() -> str: url = str(os.getenv("DATABASE_URL") or "").lower() if "postgresql" in url: return "PostgreSQL (pgvector-ready)" if "mysql" in url: return "MySQL" return "Unknown" @staticmethod def _default_feature_catalog_items() -> list[dict[str, Any]]: return [ { "route": "/workloads", "name": "团队负载", "summary": "查看团队成员负载、瓶颈与调配建议。", "page_component": "WorkloadsPage", "page_file": "frontend/src/pages/WorkloadsPage.tsx", "apis": ["/workloads/", "/workloads/ai-optimize", "/workloads/ai-optimize/apply"], "aliases": ["workloads", "负载", "工作量", "capacity", "团队负载"], }, { "route": "/projects", "name": "项目列表", "summary": "管理项目清单、状态、入口跳转与总览信息。", "page_component": "ProjectsPage", "page_file": "frontend/src/pages/ProjectsPage.tsx", "apis": ["/projects/", "/projects/?summary=1"], "aliases": ["projects", "项目", "项目列表", "project list"], }, { "route": "/ai-steward", "name": "AI 管家", "summary": "AI 任务协同与治理中心,包含简报、冲突检测、问答历史。", "page_component": "AIStewardPage", "page_file": "frontend/src/pages/AIStewardPage.tsx", "apis": ["/ai-steward/", "/rag/ask", "/rag/qa-sessions", "/rag/qa-records"], "aliases": ["ai steward", "ai管家", "问答", "rag", "智能问答"], }, { "route": "/ai-config", "name": "智能配置", "summary": "配置飞书/企微/GitHub/知识库与模型参数,决定 AI 数据源与行为。", "page_component": "AIConfigPage", "page_file": "frontend/src/pages/AIConfigPage.tsx", "apis": [ "/ai-steward/config/suggest", "/feishu/config", "/wecom/config", "/rag/knowledge-base/docs", "/rag/knowledge-base/upload", "/rag/knowledge-base/urls", ], "aliases": [ "智能配置", "ai配置", "配置中心", "integration", "集成配置", "knowledge base", ], }, { "route": "/skills", "name": "能力管理", "summary": "管理能力标签、人员能力画像、任务匹配与推荐。", "page_component": "SkillsPage", "page_file": "frontend/src/pages/SkillsPage.tsx", "apis": ["/skills/tags", "/skills/recommend", "/skills/users/{id}/bindings"], "aliases": ["skills", "能力", "技能", "ability", "能力管理"], }, { "route": "/users", "name": "用户管理", "summary": "管理用户档案、角色、状态与权限入口。", "page_component": "UsersPage", "page_file": "frontend/src/pages/UsersPage.tsx", "apis": ["/users/", "/users/{id}", "/users/bulk-delete", "/users/bulk-assign"], "aliases": ["users", "成员管理", "用户", "人员管理"], }, ]