Files
FusionAGI/fusionagi/schemas/audit.py

39 lines
1.1 KiB
Python
Raw Normal View History

"""Audit log schemas for AGI governance."""
from datetime import datetime, timezone
from enum import Enum
from typing import Any
from pydantic import BaseModel, Field
def _utc_now() -> datetime:
return datetime.now(timezone.utc)
class AuditEventType(str, Enum):
"""Type of auditable event."""
DECISION = "decision"
TOOL_CALL = "tool_call"
DATA_SOURCE = "data_source"
STATE_CHANGE = "state_change"
TASK_SUBMIT = "task_submit"
TASK_COMPLETE = "task_complete"
OVERRIDE = "override"
POLICY_CHECK = "policy_check"
OTHER = "other"
class AuditEntry(BaseModel):
"""Single audit log entry: every material decision, tool call, source, outcome."""
entry_id: str = Field(..., min_length=1)
event_type: AuditEventType = Field(default=AuditEventType.OTHER)
actor: str = Field(default="", description="Agent or system component")
task_id: str | None = Field(default=None)
action: str = Field(default="")
payload: dict[str, Any] = Field(default_factory=dict)
outcome: str = Field(default="")
timestamp: datetime = Field(default_factory=_utc_now)