"""Typed read models for Agent Management.""" from datetime import datetime from typing import Literal from uuid import UUID from pydantic import BaseModel, Field CredentialState = Literal["legacy", "active", "revoked", "retired"] RoutingState = Literal["assigned", "unassigned", "disabled"] class AgentRegistrySite(BaseModel): id: UUID name: str class AgentRegistryZone(BaseModel): id: UUID site_id: UUID site_name: str name: str description: str | None = None is_enabled: bool assigned_agent_id: str | None = None networks: list[str] = Field(default_factory=list) class AgentRegistryAgent(BaseModel): agent_id: str display_name: str | None = None site_id: UUID | None = None site_name: str agent_zone_id: UUID | None = None agent_zone_name: str | None = None agent_zone_enabled: bool | None = None hostname: str | None = None version: str | None = None ip_address: str | None = None last_checkin_at: datetime credential_state: CredentialState credential_created_at: datetime | None = None credential_revoked_at: datetime | None = None routing_state: RoutingState class AgentRegistryData(BaseModel): agents: list[AgentRegistryAgent] = Field(default_factory=list) sites: list[AgentRegistrySite] = Field(default_factory=list) zones: list[AgentRegistryZone] = Field(default_factory=list) class AgentRegistryResponse(BaseModel): data: AgentRegistryData meta: dict[str, object] = Field(default_factory=dict) error: None = None