"""Pre-mortem + Red Team 路由。""" from fastapi import APIRouter, Depends, Query from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.dependencies import get_current_user from app.models.pre_mortem import PreMortemRecord, RedTeamRecord from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.pre_mortem_agent import run_pre_mortem from app.services.red_team_agent import run_red_team router_pre_mortem = APIRouter(prefix="/pre-mortems", tags=["pre-mortems"]) router_red_team = APIRouter(prefix="/red-teams", tags=["red-teams"]) @router_pre_mortem.get("", response_model=ApiResponse[list]) async def list_pre_mortems(company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取 Pre-mortem 列表。""" query = select(PreMortemRecord) if company_id: query = query.where(PreMortemRecord.company_id == company_id) result = await db.execute(query.order_by(PreMortemRecord.created_at.desc())) items = result.scalars().all() return success(data=[ {"id": str(i.id), "company_id": str(i.company_id), "decision_context": i.decision_context, "failure_paths": i.failure_paths, "risk_checklist": i.risk_checklist, "mitigations": i.mitigations} for i in items ]) @router_pre_mortem.post("/run", response_model=ApiResponse[dict]) async def run_pre_mortem_analysis(req: dict, user: User = Depends(get_current_user)): """AI Pre-mortem 失败推演。""" result = await run_pre_mortem(req.get("decision_context", "")) return success(data=result) @router_red_team.get("", response_model=ApiResponse[list]) async def list_red_teams(company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取 Red Team 列表。""" query = select(RedTeamRecord) if company_id: query = query.where(RedTeamRecord.company_id == company_id) result = await db.execute(query.order_by(RedTeamRecord.created_at.desc())) items = result.scalars().all() return success(data=[ {"id": str(i.id), "company_id": str(i.company_id), "perspective": i.perspective, "analysis": i.analysis, "vulnerabilities": i.vulnerabilities, "counterarguments": i.counterarguments} for i in items ]) @router_red_team.post("/run", response_model=ApiResponse[dict]) async def run_red_team_analysis(req: dict, user: User = Depends(get_current_user)): """AI Red Team 对抗分析。""" result = await run_red_team(req.get("company_context", ""), req.get("perspective", "competitor")) return success(data=result)