"""Pydantic models for API requests and responses.""" from enum import Enum from typing import Any from pydantic import BaseModel class OpType(str, Enum): """Operation types matching agent/core/agent_loop.py.""" USER_INPUT = "user_input" EXEC_APPROVAL = "exec_approval" INTERRUPT = "interrupt" UNDO = "undo" COMPACT = "compact" SHUTDOWN = "shutdown" class Operation(BaseModel): """Operation to be submitted to the agent.""" op_type: OpType data: dict[str, Any] | None = None class Submission(BaseModel): """Submission wrapper with ID and operation.""" id: str operation: Operation class ToolApproval(BaseModel): """Approval decision for a single tool call.""" tool_call_id: str approved: bool feedback: str | None = None class ApprovalRequest(BaseModel): """Request to approve/reject tool calls.""" session_id: str approvals: list[ToolApproval] class SubmitRequest(BaseModel): """Request to submit user input.""" session_id: str text: str class SessionResponse(BaseModel): """Response when creating a new session.""" session_id: str ready: bool = True class SessionInfo(BaseModel): """Session metadata.""" session_id: str created_at: str is_active: bool message_count: int user_id: str = "dev" class HealthResponse(BaseModel): """Health check response.""" status: str = "ok" active_sessions: int = 0 max_sessions: int = 0 class LLMHealthResponse(BaseModel): """LLM provider health check response.""" status: str # "ok" | "error" model: str error: str | None = None error_type: str | None = None # "auth" | "credits" | "rate_limit" | "network" | "unknown"