use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct ThreadStatusInfo {
pub kind: String,
pub reason: Option<String>,
pub raw: Value,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct ThreadTokenUsage {
pub input_tokens: Option<i64>,
pub cached_input_tokens: Option<i64>,
pub output_tokens: Option<i64>,
pub reasoning_tokens: Option<i64>,
pub total_tokens: Option<i64>,
pub raw: Value,
pub updated_at_ms: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct ThreadSummary {
pub id: String,
pub runtime_id: String,
pub name: Option<String>,
pub note: Option<String>,
pub preview: String,
pub cwd: String,
pub status: String,
pub status_info: ThreadStatusInfo,
pub token_usage: Option<ThreadTokenUsage>,
pub model_provider: String,
pub source: String,
pub created_at: i64,
pub updated_at: i64,
pub is_loaded: bool,
pub is_active: bool,
pub archived: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TimelineEntry {
pub id: String,
pub runtime_id: String,
pub thread_id: String,
pub turn_id: Option<String>,
pub item_id: Option<String>,
pub entry_type: String,
pub title: Option<String>,
pub text: String,
pub status: Option<String>,
#[serde(default)]
pub metadata: Value,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct PendingServerRequestOption {
pub label: String,
pub description: Option<String>,
pub value: Option<Value>,
pub is_other: bool,
pub raw: Value,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct PendingServerRequestQuestion {
pub id: String,
pub header: Option<String>,
pub question: Option<String>,
pub required: bool,
pub options: Vec<PendingServerRequestOption>,
pub raw: Value,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct PendingServerRequestRecord {
pub request_id: String,
pub runtime_id: String,
pub rpc_request_id: Value,
pub request_type: String,
pub thread_id: Option<String>,
pub turn_id: Option<String>,
pub item_id: Option<String>,
pub title: Option<String>,
pub reason: Option<String>,
pub command: Option<String>,
pub cwd: Option<String>,
pub grant_root: Option<String>,
pub tool_name: Option<String>,
pub arguments: Option<Value>,
#[serde(default)]
pub questions: Vec<PendingServerRequestQuestion>,
pub proposed_execpolicy_amendment: Option<Value>,
pub network_approval_context: Option<Value>,
pub schema: Option<Value>,
#[serde(default)]
pub available_decisions: Vec<String>,
pub raw_payload: Value,
pub created_at_ms: i64,
}