"""工具路由""" from typing import Optional, List, Dict, Any from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from alcor.database import get_db from alcor.models import User from alcor.routes.auth import get_current_user from alcor.tools.core import registry from alcor.utils.helpers import success_response router = APIRouter(prefix="/tools", tags=["工具"]) @router.get("/", response_model=dict) def list_tools( category: Optional[str] = None, current_user: User = Depends(get_current_user) ): """获取可用工具列表""" if category: tools = registry.list_by_category(category) else: tools = registry.list_all() # 按分类分组 categorized = {} for tool in tools: cat = tool.get("function", {}).get("category", "general") if cat not in categorized: categorized[cat] = [] categorized[cat].append(tool) return success_response(data={ "tools": tools, "categorized": categorized, "total": registry.tool_count }) @router.get("/{name}", response_model=dict) def get_tool( name: str, current_user: User = Depends(get_current_user) ): """获取工具详情""" tool = registry.get(name) if not tool: return {"success": False, "message": "工具不存在", "code": 404} return success_response(data={ "name": tool.name, "description": tool.description, "parameters": tool.parameters, "category": tool.category }) @router.post("/{name}/execute", response_model=dict) def execute_tool( name: str, arguments: Dict[str, Any], current_user: User = Depends(get_current_user) ): """手动执行工具""" result = registry.execute(name, arguments) if not result.get("success"): return {"success": False, "message": result.get("error"), "code": 400} return success_response(data=result)