from datetime import datetime from typing import Any from pydantic import BaseModel, Field class AgentCreate(BaseModel): name: str role: str description: str | None = None system_prompt: str spawn_permission: bool = False class AgentOut(BaseModel): id: str name: str role: str description: str | None is_active: bool is_default: bool model_config = {"from_attributes": True} class AgentMessageOut(BaseModel): id: str agent_id: str conversation_id: str role: str content: str model_config = {"from_attributes": True} class AgentStats(BaseModel): agent_id: str call_count: int current_task: str | None status: str # active | idle | disabled class AgentConfigUpdate(BaseModel): name: str | None = None description: str | None = None system_prompt: str | None = None enabled: bool | None = None selected_skill_ids: list[str] | None = None class AgentConfigOut(BaseModel): id: str name: str role: str description: str | None system_prompt: str enabled: bool is_active: bool selected_skill_ids: list[str] model_config = {"from_attributes": True} class AgentVisibilityEventOut(BaseModel): event_id: str event_type: str timestamp: datetime conversation_id: str | None = None agent_id: str | None = None sub_commander_id: str | None = None task_id: str | None = None parent_task_id: str | None = None child_task_id: str | None = None thread_id: str | None = None message_id: str | None = None interrupt_id: str | None = None recovery_id: str | None = None payload: dict[str, Any] = Field(default_factory=dict) severity: str = "info" class AgentVisibilityEventsResponse(BaseModel): conversation_id: str total: int limit: int offset: int items: list[AgentVisibilityEventOut] class AgentVisibilityTaskSummaryOut(BaseModel): task_id: str role: str | None = None owner_agent_id: str | None = None status: str | None = None summary: str | None = None evidence_count: int = 0 class AgentVisibilityTopologyNodeOut(BaseModel): agent_id: str role: str | None = None parent_agent_id: str | None = None source: str task_count: int = 0 completed_task_count: int = 0 class AgentVisibilityTopologyOut(BaseModel): conversation_id: str root_agent_id: str | None = None current_agent: str | None = None nodes: list[AgentVisibilityTopologyNodeOut] edges: list[dict[str, str]] tasks: list[AgentVisibilityTaskSummaryOut] task_hierarchy: dict[str, list[str]] = Field(default_factory=dict) class AgentVisibilityEvidenceOut(BaseModel): conversation_id: str task_id: str task: dict[str, Any] | None = None result: dict[str, Any] | None = None tool_outcomes: list[dict[str, Any]] = Field(default_factory=list) verifier: dict[str, Any] class AgentVisibilityThreadMessageOut(BaseModel): message_id: str thread_id: str from_agent_id: str to_agent_id: str task_id: str | None = None reply_to_message_id: str | None = None message_type: str content_summary: str created_at: datetime payload: dict[str, Any] = Field(default_factory=dict) class AgentVisibilityThreadOut(BaseModel): conversation_id: str thread_id: str total: int items: list[AgentVisibilityThreadMessageOut] class AgentVisibilityVerifierOut(BaseModel): conversation_id: str status: str | None = None summary: str | None = None evidence: list[dict[str, Any]] = Field(default_factory=list)