| | """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
|
| | model: str
|
| | error: str | None = None
|
| | error_type: str | None = None
|
| |
|