Skip to main content

codex_app_server_sdk/protocol/
responses.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4macro_rules! opaque_struct {
5    ($name:ident) => {
6        #[derive(Debug, Clone, Serialize, Deserialize, Default)]
7        #[serde(rename_all = "camelCase")]
8        pub struct $name {
9            #[serde(flatten)]
10            pub extra: serde_json::Map<String, Value>,
11        }
12    };
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, Default)]
16#[serde(rename_all = "camelCase")]
17pub struct InitializeResult {
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub user_agent: Option<String>,
20    #[serde(flatten)]
21    pub extra: serde_json::Map<String, Value>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, Default)]
25#[serde(rename_all = "camelCase")]
26pub struct ThreadSummary {
27    pub id: String,
28    #[serde(default, skip_serializing_if = "Option::is_none")]
29    pub model: Option<String>,
30    #[serde(default, skip_serializing_if = "Option::is_none")]
31    pub title: Option<String>,
32    #[serde(default, skip_serializing_if = "Option::is_none")]
33    pub source_kind: Option<String>,
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub archived: Option<bool>,
36    #[serde(flatten)]
37    pub extra: serde_json::Map<String, Value>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, Default)]
41#[serde(rename_all = "camelCase")]
42pub struct TurnError {
43    pub message: String,
44    #[serde(default, skip_serializing_if = "Option::is_none")]
45    pub codex_error_info: Option<Value>,
46    #[serde(default, skip_serializing_if = "Option::is_none")]
47    pub additional_details: Option<Value>,
48    #[serde(flatten)]
49    pub extra: serde_json::Map<String, Value>,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize, Default)]
53#[serde(rename_all = "camelCase")]
54pub struct Turn {
55    pub id: String,
56    #[serde(default, skip_serializing_if = "Option::is_none")]
57    pub status: Option<String>,
58    #[serde(default)]
59    pub items: Vec<Value>,
60    #[serde(default, skip_serializing_if = "Option::is_none")]
61    pub error: Option<TurnError>,
62    #[serde(flatten)]
63    pub extra: serde_json::Map<String, Value>,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, Default)]
67#[serde(rename_all = "camelCase")]
68pub struct ThreadResult {
69    pub thread: ThreadSummary,
70    #[serde(flatten)]
71    pub extra: serde_json::Map<String, Value>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, Default)]
75#[serde(rename_all = "camelCase")]
76pub struct TurnResult {
77    pub turn: Turn,
78    #[serde(flatten)]
79    pub extra: serde_json::Map<String, Value>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize, Default)]
83#[serde(rename_all = "camelCase")]
84pub struct TurnSteerResult {
85    pub turn_id: String,
86    #[serde(flatten)]
87    pub extra: serde_json::Map<String, Value>,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize, Default)]
91#[serde(rename_all = "camelCase")]
92pub struct ThreadListResult {
93    #[serde(default)]
94    pub data: Vec<ThreadSummary>,
95    #[serde(default, skip_serializing_if = "Option::is_none")]
96    pub next_cursor: Option<String>,
97    #[serde(flatten)]
98    pub extra: serde_json::Map<String, Value>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, Default)]
102#[serde(rename_all = "camelCase")]
103pub struct ThreadLoadedListResult {
104    #[serde(default)]
105    pub data: Vec<String>,
106    #[serde(flatten)]
107    pub extra: serde_json::Map<String, Value>,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize, Default)]
111#[serde(rename_all = "camelCase")]
112pub struct ModelInfo {
113    pub id: String,
114    pub model: String,
115    #[serde(default, skip_serializing_if = "Option::is_none")]
116    pub display_name: Option<String>,
117    #[serde(default, skip_serializing_if = "Option::is_none")]
118    pub upgrade: Option<String>,
119    #[serde(default, skip_serializing_if = "Option::is_none")]
120    pub default_reasoning_effort: Option<String>,
121    #[serde(default)]
122    pub input_modalities: Vec<String>,
123    #[serde(default, skip_serializing_if = "Option::is_none")]
124    pub supports_personality: Option<bool>,
125    #[serde(default, skip_serializing_if = "Option::is_none")]
126    pub is_default: Option<bool>,
127    #[serde(flatten)]
128    pub extra: serde_json::Map<String, Value>,
129}
130
131#[derive(Debug, Clone, Serialize, Deserialize, Default)]
132#[serde(rename_all = "camelCase")]
133pub struct ModelListResult {
134    #[serde(default)]
135    pub data: Vec<ModelInfo>,
136    #[serde(default, skip_serializing_if = "Option::is_none")]
137    pub next_cursor: Option<String>,
138    #[serde(flatten)]
139    pub extra: serde_json::Map<String, Value>,
140}
141
142opaque_struct!(ExperimentalFeatureListResult);
143opaque_struct!(CollaborationModeListResult);
144opaque_struct!(MockExperimentalMethodResult);
145opaque_struct!(SkillsListResult);
146opaque_struct!(SkillsRemoteReadResult);
147opaque_struct!(SkillsRemoteWriteResult);
148opaque_struct!(SkillsConfigWriteResult);
149opaque_struct!(AppsListResult);
150opaque_struct!(ReviewStartResult);
151opaque_struct!(McpServerOauthLoginResult);
152opaque_struct!(McpServerStatusListResult);
153opaque_struct!(FeedbackUploadResult);
154opaque_struct!(CommandExecResult);
155opaque_struct!(ConfigReadResult);
156opaque_struct!(ConfigValueWriteResult);
157opaque_struct!(ConfigBatchWriteResult);
158opaque_struct!(ConfigRequirementsReadResult);
159opaque_struct!(WindowsSandboxSetupStartResult);
160opaque_struct!(LoginAccountResult);
161opaque_struct!(GetAccountResult);
162opaque_struct!(AccountRateLimitsReadResult);
163opaque_struct!(ThreadArchiveResult);
164opaque_struct!(ThreadUnarchiveResult);
165opaque_struct!(ThreadCompactStartResult);
166opaque_struct!(ThreadBackgroundTerminalsCleanResult);
167opaque_struct!(ThreadSetNameResult);
168opaque_struct!(ThreadRollbackResult);
169opaque_struct!(ThreadReadResult);
170opaque_struct!(FuzzyFileSearchSessionStartResult);
171opaque_struct!(FuzzyFileSearchSessionUpdateResult);
172opaque_struct!(FuzzyFileSearchSessionStopResult);