from sqlalchemy import Column, String, Text, DateTime, Integer, ForeignKey, JSON from sqlalchemy.orm import relationship from datetime import datetime, timezone from database import Base class Agent(Base): __tablename__ = "agents" id = Column(String, primary_key=True) name = Column(String, nullable=False) description = Column(Text, default="") schedule = Column(String, default="manual") status = Column(String, default="active") created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc)) runs = relationship("Run", back_populates="agent", order_by="Run.started_at.desc()") class Run(Base): __tablename__ = "runs" id = Column(Integer, primary_key=True, autoincrement=True) agent_id = Column(String, ForeignKey("agents.id"), nullable=False) started_at = Column(DateTime, default=lambda: datetime.now(timezone.utc)) finished_at = Column(DateTime, nullable=True) status = Column(String, default="running") output = Column(Text, default="") error = Column(Text, default="") metadata_ = Column("metadata", JSON, default=dict) agent = relationship("Agent", back_populates="runs")