codex-mobile-contracts 0.3.7

Shared domain contracts for codex-mobile client and bridge.
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum DraftImageSendMode {
    #[default]
    Compressed,
    Original,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct DraftImageAttachment {
    pub id: String,
    pub uri: String,
    pub source_uri: Option<String>,
    pub local_path: Option<String>,
    pub display_name: String,
    pub mime_type: Option<String>,
    pub size_bytes: Option<i64>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum QueueDispatchMode {
    #[default]
    AfterThreadIdle,
    AfterNextResultBatch,
    InterruptAndSend,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum QueueMessageStatus {
    #[default]
    Queued,
    ReservedForEdit,
    Sending,
    Failed,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct QueuedThreadMessageRecord {
    pub queue_id: String,
    pub runtime_id: String,
    pub thread_id: String,
    pub position: i64,
    pub dispatch_mode: QueueDispatchMode,
    pub status: QueueMessageStatus,
    pub draft_text: String,
    pub draft_images: Vec<DraftImageAttachment>,
    pub image_send_mode: DraftImageSendMode,
    pub cwd: Option<String>,
    pub armed_turn_id: Option<String>,
    pub failure_message: Option<String>,
    pub reserved_by_device_id: Option<String>,
    pub created_at_ms: i64,
    pub updated_at_ms: i64,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
#[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, PartialEq)]
#[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, PartialEq)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct ThreadSummary {
    pub id: String,
    pub runtime_id: String,
    pub name: 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, Default, Serialize, Deserialize, PartialEq)]
#[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, PartialEq)]
#[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, PartialEq)]
#[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 request_kind: String,
    pub thread_id: Option<String>,
    pub turn_id: Option<String>,
    pub item_id: Option<String>,
    pub call_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 permissions: Option<Value>,
    pub schema: Option<Value>,
    #[serde(default)]
    pub available_decisions: Vec<String>,
    pub raw_payload: Value,
    pub created_at_ms: i64,
}