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