from __future__ import annotations from datetime import datetime, timezone from typing import Optional from sqlmodel import Field, SQLModel def _now() -> datetime: return datetime.now(timezone.utc) class AuditLog(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) user: str action: str # e.g. "stack.start" target: str # stack id / resource id detail: Optional[str] = None ip: Optional[str] = None timestamp: datetime = Field(default_factory=_now, index=True)