"""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 modified_arguments: dict[str, Any] | None = None # For edited scripts 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 model_name: str | None = None class MessageData(BaseModel): """A single message in a session.""" role: str content: str class ResumeSessionResponse(BaseModel): """Response when resuming a persisted session.""" session_id: str ready: bool = True messages: list[MessageData] = [] class SessionInfo(BaseModel): """Session metadata.""" session_id: str created_at: str is_active: bool message_count: int user_id: str | None = None # Owner of the session model_name: str | None = None class HealthResponse(BaseModel): """Health check response.""" status: str = "ok" active_sessions: int = 0