"""工具 API(§15 兼容面):清单走百工能力目录,调用走 /capabilities/{id}/invoke。 旧 ToolRuntime/策略治理端点已随 M5 百工重写退役;本路由只保留 `/tools`(能力目录投影)与 `/tools/calls/{id}`(一炁事件详情)。 """ from fastapi import APIRouter, Depends from app.api.v1.deps import get_current_user from app.domains.baigong import service as baigong from app.schemas.auth import CurrentUser from app.schemas.safety import ToolCallDetail from app.services.governance import get_tool_call router = APIRouter(prefix="/tools", tags=["tools"]) @router.get("") async def list_tools(user: CurrentUser = Depends(get_current_user)) -> list[dict]: """能力目录投影(新链路以 /capabilities 为准;此处给旧消费方过渡读取)。""" caps = await baigong.list_capabilities(user.owner_scope) return [ { "name": c["name"], "description": c["description"], "risk_level": max(c["risk_dims"].values(), default="L1"), "permission_policy": "ask" if c["consent_mode"] == "ask" else "allow", "enabled": c["enabled"], "source": c["source"], } for c in caps ] @router.get("/calls/{tool_call_id}", response_model=ToolCallDetail) async def get_tool_call_detail(tool_call_id: str) -> ToolCallDetail: return await get_tool_call(tool_call_id)