"""Agent 执行记录模型。 L1-L4 分级自治执行。 """ import uuid from datetime import datetime, timezone from sqlalchemy import DateTime, ForeignKey, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base from app.core.types import JSONBType class AgentExecution(Base): """Agent 执行记录。""" __tablename__ = "agent_executions" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) tenant_id: Mapped[str] = mapped_column(String(36), ForeignKey("tenants.id"), nullable=False, index=True) agent_name: Mapped[str] = mapped_column(String(100), nullable=False, comment="Agent 名称") autonomy_level: Mapped[str] = mapped_column(String(10), nullable=False, comment="L1/L2/L3/L4") input_summary: Mapped[str | None] = mapped_column(Text, nullable=True, comment="输入摘要") output_summary: Mapped[str | None] = mapped_column(Text, nullable=True, comment="输出摘要") output_detail: Mapped[dict | None] = mapped_column(JSONBType, nullable=True, comment="输出详情") review_status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending", comment="pending/approved/rejected/auto_approved") reviewer_id: Mapped[str | None] = mapped_column(String(36), ForeignKey("users.id"), nullable=True) reviewed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) model_version: Mapped[str | None] = mapped_column(String(50), nullable=True) duration_ms: Mapped[int | None] = mapped_column(nullable=True, comment="执行耗时") created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) )