from dataclasses import dataclass, field
from typing import Any, Dict, List, Literal, Optional
@dataclass
class ToolInfo:
name: str
description: str
parameters: Dict[str, Any]
@dataclass
class UsageInfo:
total_steps: int
total_tokens: int
@dataclass
class RunResponse:
status: str
finish_reason: str
messages: List[Any]
usage: Any
def __post_init__(self):
if isinstance(self.usage, dict):
self.usage = UsageInfo(**self.usage)
@dataclass
class SessionInfo:
id: str
created_at: str
message_count: int
@dataclass
class SessionDetail:
id: str
created_at: str
messages: List[Any]
status: str = "idle"
pending_plan: Optional[str] = None
@dataclass
class MessageResponse:
role: str
content: str
@dataclass
class PlanProposedMessage:
plan: str = ""
session_id: str = ""
type: Literal["plan_proposed"] = "plan_proposed"
@dataclass
class GoalState:
condition: str
status: str turns: int
max_turns: int
last_reason: Optional[str] = None
@dataclass
class SessionDetailWithGoal(SessionDetail):
goal: Optional[GoalState] = None
def __post_init__(self):
if isinstance(self.goal, dict):
self.goal = GoalState(**self.goal)
@dataclass
class SlashCommandInfo:
name: str
description: str
source: str aliases: List[str] = field(default_factory=list)
argument_hint: str = ""