File size: 1,517 Bytes
10b8d56 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | """
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
|