Skip to main content

codex_mobile_contracts/
thread.rs

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}