| """ |
| Tool 目录 API 端点 |
| 提供 GET /api/tools 和 GET /api/tools/{tool_name}。 |
| """ |
|
|
| from fastapi import APIRouter, HTTPException, Query |
| from typing import Optional |
|
|
| from app.plugins.tool_catalog import tool_catalog_service |
|
|
| router = APIRouter() |
|
|
|
|
| @router.get("/") |
| async def get_tools( |
| plugin: Optional[str] = Query(None, description="按插件名过滤"), |
| source: Optional[str] = Query(None, description="按来源过滤"), |
| availability: Optional[str] = Query(None, description="按可用状态过滤"), |
| q: Optional[str] = Query(None, description="搜索关键词"), |
| ): |
| """获取 Tool 目录列表 |
| |
| Args: |
| plugin: 按插件名过滤 |
| source: 按来源过滤 |
| availability: 按可用状态过滤(available/unavailable/incomplete) |
| q: 搜索关键词(匹配名称、显示名、用途) |
| |
| Returns: |
| ToolCatalogItem 列表 |
| """ |
| return tool_catalog_service.get_all_tools( |
| plugin_name=plugin, |
| source=source, |
| availability=availability, |
| q=q, |
| ) |
|
|
|
|
| @router.get("/{tool_name}") |
| async def get_tool(tool_name: str): |
| """获取单个 Tool 详情 |
| |
| Args: |
| tool_name: 工具标识符 |
| |
| Returns: |
| ToolCatalogItem |
| |
| Raises: |
| HTTPException: 工具不存在时返回 404 |
| """ |
| tool = tool_catalog_service.get_tool(tool_name) |
| if tool is None: |
| raise HTTPException( |
| status_code=404, |
| detail=f"工具 {tool_name} 不存在", |
| ) |
| return tool |
|
|