""" 技能管理API路由 """ from fastapi import APIRouter, HTTPException from pydantic import BaseModel from app.agent.skill_manager import skill_manager from app.utils.logger import logger router = APIRouter() class ToggleRequest(BaseModel): enabled: bool @router.get("/") async def list_skills(): """ 获取所有技能列表 Returns: 技能信息列表 """ try: skills_info = skill_manager.get_skills_info() return skills_info # 直接返回数组 except Exception as e: logger.error(f"获取技能列表失败: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.post("/{skill_name}/toggle") async def toggle_skill(skill_name: str, request: ToggleRequest): """ 切换技能状态 Args: skill_name: 技能名称 request: 包含enabled字段的请求体 Returns: 操作结果 """ try: if request.enabled: success = skill_manager.enable_skill(skill_name) message = f"技能 {skill_name} 已启用" else: success = skill_manager.disable_skill(skill_name) message = f"技能 {skill_name} 已禁用" if not success: raise HTTPException(status_code=404, detail="技能不存在") return {"message": message, "success": True} except Exception as e: logger.error(f"切换技能失败: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.post("/{skill_name}/enable") async def enable_skill(skill_name: str): """ 启用技能 Args: skill_name: 技能名称 Returns: 操作结果 """ try: success = skill_manager.enable_skill(skill_name) if not success: raise HTTPException(status_code=404, detail="技能不存在") return {"message": f"技能 {skill_name} 已启用"} except Exception as e: logger.error(f"启用技能失败: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.post("/{skill_name}/disable") async def disable_skill(skill_name: str): """ 禁用技能 Args: skill_name: 技能名称 Returns: 操作结果 """ try: success = skill_manager.disable_skill(skill_name) if not success: raise HTTPException(status_code=404, detail="技能不存在") return {"message": f"技能 {skill_name} 已禁用"} except Exception as e: logger.error(f"禁用技能失败: {e}") raise HTTPException(status_code=500, detail=str(e))