Validate MCP arguments and recursive operation scopes, persist approval batches, and recheck permissions for queued work. Handle remote metadata requests independently of proxy settings and update Ant Design component APIs.
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from typing import Annotated
|
||
|
||
from fastapi import APIRouter, Depends, Request
|
||
from fastapi.responses import StreamingResponse
|
||
|
||
from api.response import success
|
||
from domain.audit import AuditAction, audit
|
||
from domain.auth import User, get_current_active_user
|
||
from .service import AgentService, validate_request
|
||
from .types import AgentChatRequest
|
||
|
||
|
||
router = APIRouter(prefix="/api/agent", tags=["agent"])
|
||
|
||
|
||
@router.post("/chat")
|
||
@audit(action=AuditAction.CREATE, description="Agent 对话", body_fields=["auto_execute", "approval_batch_id", "approved_mcp_call_ids", "rejected_mcp_call_ids"])
|
||
async def chat(
|
||
request: Request,
|
||
payload: AgentChatRequest,
|
||
current_user: Annotated[User, Depends(get_current_active_user)],
|
||
):
|
||
data = await AgentService.chat(payload, current_user)
|
||
return success(data)
|
||
|
||
|
||
@router.post("/chat/stream")
|
||
@audit(action=AuditAction.CREATE, description="Agent 对话(SSE)", body_fields=["auto_execute", "approval_batch_id", "approved_mcp_call_ids", "rejected_mcp_call_ids"])
|
||
async def chat_stream(
|
||
request: Request,
|
||
payload: AgentChatRequest,
|
||
current_user: Annotated[User, Depends(get_current_active_user)],
|
||
):
|
||
await validate_request(payload, current_user)
|
||
return StreamingResponse(
|
||
AgentService.chat_stream(payload, current_user),
|
||
media_type="text/event-stream",
|
||
headers={"Cache-Control": "no-cache"},
|
||
)
|