"""工具审批 REST API — 前端提交审批决定""" from __future__ import annotations import logging from fastapi import APIRouter, HTTPException from pydantic import BaseModel, Field from app.services.approval_manager import approval_manager logger = logging.getLogger(__name__) router = APIRouter(prefix="/api/v1/approval", tags=["approval"]) class ApprovalDecisionRequest(BaseModel): decision: str = Field(..., description="审批决定: approved | denied | skip") @router.post("/{approval_id}/resolve") async def resolve_approval(approval_id: str, req: ApprovalDecisionRequest): """提交工具审批决定。 - **approved**: 批准执行 - **denied**: 拒绝执行(Agent 会收到拒绝提示) - **skip**: 跳过该工具(Agent 会跳过继续) """ ok = approval_manager.resolve(approval_id, req.decision) if not ok: raise HTTPException(status_code=404, detail=f"审批请求不存在或已完成: {approval_id}") return {"success": True, "approval_id": approval_id, "decision": req.decision} @router.get("/{approval_id}") async def get_approval(approval_id: str): """查询待审批请求详情(用于前端展示工具名和参数)。""" req = approval_manager.get_pending(approval_id) if not req: raise HTTPException(status_code=404, detail=f"审批请求不存在或已完成: {approval_id}") return { "approval_id": req.approval_id, "tool_name": req.tool_name, "args": req.args, "decision": req.decision, }