"""Platform full-chain Agent OS audit API.""" from __future__ import annotations from typing import Optional from fastapi import APIRouter, Depends, Query from fastapi.responses import JSONResponse from sqlalchemy.ext.asyncio import AsyncSession from ..core.database import get_db from ..core.response import error_response, success_response from ..dependencies.permissions import require_platform_capability from ..models import User from ..services.agent_run_audit_service import AgentRunAuditService router = APIRouter(prefix="/agent-run-audits", tags=["agent_run_audits"]) require_platform_audit_view = require_platform_capability("platform.audit.view") @router.get("") async def list_agent_run_audits( page: int = Query(default=1, ge=1), page_size: int = Query(default=30, ge=1, le=100), tenant_id: Optional[int] = Query(default=None), user_id: Optional[int] = Query(default=None), status: Optional[str] = Query(default=None, max_length=80), source_channel: Optional[str] = Query(default=None, max_length=80), keyword: Optional[str] = Query(default=None, max_length=300), since_hours: Optional[int] = Query(default=168, ge=1, le=8760), current_user: User = Depends(require_platform_audit_view), db: AsyncSession = Depends(get_db), ): _ = current_user data = await AgentRunAuditService(db).list_runs( page=page, page_size=page_size, tenant_id=tenant_id, user_id=user_id, status=status, source_channel=source_channel, keyword=keyword, since_hours=since_hours, ) return success_response(data) @router.get("/{public_run_id}") async def get_agent_run_audit( public_run_id: str, current_user: User = Depends(require_platform_audit_view), db: AsyncSession = Depends(get_db), ): _ = current_user try: data = await AgentRunAuditService(db).get_run(public_run_id) except ValueError as exc: return JSONResponse(status_code=404, content=error_response(404, str(exc))) return success_response(data)