from pydantic import BaseModel, Field from typing import Optional, List, Literal class CommandRequest(BaseModel): agent: str action: str params: Optional[dict] = None class ApprovalRequest(BaseModel): agent: str task_id: str approved: bool feedback: Optional[str] = None class AgentConfigUpdate(BaseModel): enabled: Optional[bool] = None schedule_config: Optional[dict] = None custom_config: Optional[dict] = None class PriceAlertConfig(BaseModel): symbol: str name: str target_price: float direction: str # "above" or "below" class ComposeCommand(BaseModel): prompt: str style: Optional[str] = None model: Optional[str] = "V4" instrumental: Optional[bool] = False class TarotCardDraw(BaseModel): position: str card_id: str reversed: bool = False class TarotInterpretRequest(BaseModel): spread_type: Literal["one_card", "three_card"] category: Optional[str] = None question: Optional[str] = None cards: List[TarotCardDraw] cards_reference: str = Field(..., min_length=1) context_meta: dict = Field(default_factory=dict) class TarotInterpretResponse(BaseModel): interpretation_json: dict model: str tokens_in: int tokens_out: int cost_usd: float latency_ms: int reroll_count: int = 0 class TarotSaveRequest(BaseModel): spread_type: Literal["one_card", "three_card"] category: Optional[str] = None question: Optional[str] = None cards: List[TarotCardDraw] interpretation_json: dict model: str tokens_in: int tokens_out: int cost_usd: float confidence: Optional[str] = None class TarotPatchRequest(BaseModel): favorite: Optional[bool] = None note: Optional[str] = None