"""Tool routes""" from typing import Optional, List, Dict, Any from fastapi import APIRouter, Depends, Body from pydantic import BaseModel from luxx.database import get_db from luxx.models import User from luxx.routes.auth import get_current_user from luxx.tools.core import registry from luxx.utils.helpers import success_response router = APIRouter(prefix="/tools", tags=["Tools"]) @router.get("/", response_model=dict) def list_tools( category: Optional[str] = None, current_user: User = Depends(get_current_user) ): """Get available tools list""" if category: tools = registry.list_by_category(category) else: tools = registry.list_all() categorized = {} for tool in tools: cat = tool.get("category", "other") if cat not in categorized: categorized[cat] = [] categorized[cat].append(tool) return success_response(data={ "tools": tools, "categorized": categorized, "total": len(tools) }) @router.get("/{name}", response_model=dict) def get_tool( name: str, current_user: User = Depends(get_current_user) ): """Get tool details""" tool = registry.get(name) if not tool: return {"success": False, "message": "Tool not found", "code": 404} return success_response(data=tool.to_openai_format()) @router.post("/{name}/execute", response_model=dict) def execute_tool( name: str, arguments: Dict[str, Any] = Body(...), current_user: User = Depends(get_current_user) ): """Execute tool manually""" result = registry.execute(name, arguments) return result