1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
5#[serde(rename_all = "camelCase")]
6pub enum DraftImageSendMode {
7 #[default]
8 Compressed,
9 Original,
10}
11
12#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
13#[serde(rename_all = "camelCase")]
14#[serde(default)]
15pub struct DraftImageAttachment {
16 pub id: String,
17 pub uri: String,
18 pub source_uri: Option<String>,
19 pub local_path: Option<String>,
20 pub display_name: String,
21 pub mime_type: Option<String>,
22 pub size_bytes: Option<i64>,
23}
24
25#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
26#[serde(rename_all = "camelCase")]
27pub enum QueueDispatchMode {
28 #[default]
29 AfterThreadIdle,
30 AfterNextResultBatch,
31 InterruptAndSend,
32}
33
34#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
35#[serde(rename_all = "camelCase")]
36pub enum QueueMessageStatus {
37 #[default]
38 Queued,
39 ReservedForEdit,
40 Sending,
41 Failed,
42}
43
44#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
45#[serde(rename_all = "camelCase")]
46#[serde(default)]
47pub struct QueuedThreadMessageRecord {
48 pub queue_id: String,
49 pub runtime_id: String,
50 pub thread_id: String,
51 pub position: i64,
52 pub dispatch_mode: QueueDispatchMode,
53 pub status: QueueMessageStatus,
54 pub draft_text: String,
55 pub draft_images: Vec<DraftImageAttachment>,
56 pub image_send_mode: DraftImageSendMode,
57 pub cwd: Option<String>,
58 pub armed_turn_id: Option<String>,
59 pub failure_message: Option<String>,
60 pub reserved_by_device_id: Option<String>,
61 pub created_at_ms: i64,
62 pub updated_at_ms: i64,
63}
64
65#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
66#[serde(rename_all = "camelCase")]
67#[serde(default)]
68pub struct ThreadStatusInfo {
69 pub kind: String,
70 pub reason: Option<String>,
71 pub raw: Value,
72}
73
74#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
75#[serde(rename_all = "camelCase")]
76#[serde(default)]
77pub struct ThreadTokenUsage {
78 pub input_tokens: Option<i64>,
79 pub cached_input_tokens: Option<i64>,
80 pub output_tokens: Option<i64>,
81 pub reasoning_tokens: Option<i64>,
82 pub total_tokens: Option<i64>,
83 pub raw: Value,
84 pub updated_at_ms: i64,
85}
86
87#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
88#[serde(rename_all = "camelCase")]
89#[serde(default)]
90pub struct ThreadSummary {
91 pub id: String,
92 pub runtime_id: String,
93 pub name: Option<String>,
94 pub preview: String,
95 pub cwd: String,
96 pub status: String,
97 pub status_info: ThreadStatusInfo,
98 pub token_usage: Option<ThreadTokenUsage>,
99 pub model_provider: String,
100 pub source: String,
101 pub created_at: i64,
102 pub updated_at: i64,
103 pub is_loaded: bool,
104 pub is_active: bool,
105 pub archived: bool,
106}
107
108#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
109#[serde(rename_all = "camelCase")]
110#[serde(default)]
111pub struct PendingServerRequestOption {
112 pub label: String,
113 pub description: Option<String>,
114 pub value: Option<Value>,
115 pub is_other: bool,
116 pub raw: Value,
117}
118
119#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
120#[serde(rename_all = "camelCase")]
121#[serde(default)]
122pub struct PendingServerRequestQuestion {
123 pub id: String,
124 pub header: Option<String>,
125 pub question: Option<String>,
126 pub required: bool,
127 pub options: Vec<PendingServerRequestOption>,
128 pub raw: Value,
129}
130
131#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
132#[serde(rename_all = "camelCase")]
133#[serde(default)]
134pub struct PendingServerRequestRecord {
135 pub request_id: String,
136 pub runtime_id: String,
137 pub rpc_request_id: Value,
138 pub request_type: String,
139 pub request_kind: String,
140 pub thread_id: Option<String>,
141 pub turn_id: Option<String>,
142 pub item_id: Option<String>,
143 pub call_id: Option<String>,
144 pub title: Option<String>,
145 pub reason: Option<String>,
146 pub command: Option<String>,
147 pub cwd: Option<String>,
148 pub grant_root: Option<String>,
149 pub tool_name: Option<String>,
150 pub arguments: Option<Value>,
151 #[serde(default)]
152 pub questions: Vec<PendingServerRequestQuestion>,
153 pub proposed_execpolicy_amendment: Option<Value>,
154 pub network_approval_context: Option<Value>,
155 pub permissions: Option<Value>,
156 pub schema: Option<Value>,
157 #[serde(default)]
158 pub available_decisions: Vec<String>,
159 pub raw_payload: Value,
160 pub created_at_ms: i64,
161}