Files
aiagent/backend/app/api/approval.py

47 lines
1.5 KiB
Python
Raw Normal View History

"""工具审批 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,
}