1use alloc::collections::BTreeMap;
5
6use serde::{Deserialize, Serialize, de::DeserializeOwned};
7use serde_json::Value;
8
9pub const CODEX_VERSION: &str = "0.167.0";
11
12pub trait Request: Serialize {
14 const METHOD: &'static str;
15 type Response: DeserializeOwned;
16}
17
18pub trait Notification: DeserializeOwned {
20 const METHOD: &'static str;
21}
22
23pub trait ServerRequest: DeserializeOwned {
25 const METHOD: &'static str;
26 type Response: Serialize;
27}
28
29impl Request for InitializeParams {
30 const METHOD: &'static str = "initialize";
31 type Response = InitializeResponse;
32}
33impl Request for ThreadStartParams {
34 const METHOD: &'static str = "thread/start";
35 type Response = ThreadStartResponse;
36}
37impl Request for ThreadResumeParams {
38 const METHOD: &'static str = "thread/resume";
39 type Response = ThreadResumeResponse;
40}
41impl Request for TurnStartParams {
42 const METHOD: &'static str = "turn/start";
43 type Response = TurnStartResponse;
44}
45impl Request for TurnInterruptParams {
46 const METHOD: &'static str = "turn/interrupt";
47 type Response = TurnInterruptResponse;
48}
49impl Notification for ErrorNotification {
50 const METHOD: &'static str = "error";
51}
52impl Notification for ThreadStartedNotification {
53 const METHOD: &'static str = "thread/started";
54}
55impl Notification for TurnStartedNotification {
56 const METHOD: &'static str = "turn/started";
57}
58impl Notification for TurnCompletedNotification {
59 const METHOD: &'static str = "turn/completed";
60}
61impl Notification for ItemStartedNotification {
62 const METHOD: &'static str = "item/started";
63}
64impl Notification for ItemCompletedNotification {
65 const METHOD: &'static str = "item/completed";
66}
67impl Notification for AgentMessageDeltaNotification {
68 const METHOD: &'static str = "item/agentMessage/delta";
69}
70impl Notification for ThreadTokenUsageUpdatedNotification {
71 const METHOD: &'static str = "thread/tokenUsage/updated";
72}
73impl Notification for AccountRateLimitsUpdatedNotification {
74 const METHOD: &'static str = "account/rateLimits/updated";
75}
76impl ServerRequest for CommandExecutionRequestApprovalParams {
77 const METHOD: &'static str = "item/commandExecution/requestApproval";
78 type Response = CommandExecutionRequestApprovalResponse;
79}
80impl ServerRequest for FileChangeRequestApprovalParams {
81 const METHOD: &'static str = "item/fileChange/requestApproval";
82 type Response = FileChangeRequestApprovalResponse;
83}
84impl ServerRequest for McpServerElicitationRequestParams {
85 const METHOD: &'static str = "mcpServer/elicitation/request";
86 type Response = McpServerElicitationRequestResponse;
87}
88
89pub type AbsolutePathBuf = String;
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
98pub struct AccountRateLimitsUpdatedNotification {
99 #[serde(rename = "rateLimits")]
100 pub rate_limits: RateLimitSnapshot,
101}
102
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
104pub struct AddPatchChangeKind {}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
107pub enum AgentMessageDelivery {
108 #[serde(rename = "async")]
109 Async,
110 #[serde(untagged)]
112 Unknown(Value),
113}
114
115#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
116pub struct AgentMessageDeltaNotification {
117 pub delta: String,
118 #[serde(rename = "itemId")]
119 pub item_id: String,
120 #[serde(rename = "threadId")]
121 pub thread_id: String,
122 #[serde(rename = "turnId")]
123 pub turn_id: String,
124}
125
126#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
127pub struct AgentMessageThreadItem {
128 #[serde(rename = "completedAtMs")]
130 #[serde(default, skip_serializing_if = "Option::is_none")]
131 pub completed_at_ms: Option<i64>,
132 #[serde(default, skip_serializing_if = "Option::is_none")]
133 pub delivery: Option<AgentMessageDelivery>,
134 pub id: String,
135 #[serde(rename = "memoryCitation")]
136 #[serde(default, skip_serializing_if = "Option::is_none")]
137 pub memory_citation: Option<MemoryCitation>,
138 #[serde(default, skip_serializing_if = "Option::is_none")]
139 pub phase: Option<MessagePhase>,
140 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub questions: Option<Vec<AsyncUserInputQuestion>>,
142 #[serde(rename = "startedAtMs")]
144 #[serde(default, skip_serializing_if = "Option::is_none")]
145 pub started_at_ms: Option<i64>,
146 pub text: String,
147}
148
149pub type AgentPath = String;
150
151#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
153pub enum ApprovalsReviewer {
154 #[serde(rename = "user")]
155 User,
156 #[serde(rename = "auto_review")]
157 AutoReview,
158 #[serde(rename = "guardian_subagent")]
159 GuardianSubagent,
160 #[serde(untagged)]
162 Unknown(Value),
163}
164
165#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
166pub enum AskForApproval {
167 #[serde(rename = "untrusted")]
168 Untrusted,
169 #[serde(rename = "on-request")]
170 OnRequest,
171 #[serde(rename = "never")]
172 Never,
173 #[serde(rename = "granular")]
174 Granular(AskForApprovalGranular),
175 #[serde(untagged)]
177 Unknown(Value),
178}
179
180#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
181pub struct AskForApprovalGranular {
182 pub mcp_elicitations: bool,
183 #[serde(default, skip_serializing_if = "Option::is_none")]
184 pub request_permissions: Option<bool>,
185 pub rules: bool,
186 pub sandbox_approval: bool,
187 #[serde(default, skip_serializing_if = "Option::is_none")]
188 pub skill_approval: Option<bool>,
189}
190
191pub type AsyncUserInputQuestion = Value;
192
193#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
194pub struct AudioUserInput {
195 #[serde(rename = "fileId")]
196 #[serde(default, skip_serializing_if = "Option::is_none")]
197 pub file_id: Option<String>,
198 #[serde(default, skip_serializing_if = "Option::is_none")]
199 pub url: Option<String>,
200}
201
202#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
203pub struct ClientInfo {
204 pub name: String,
205 #[serde(default, skip_serializing_if = "Option::is_none")]
206 pub title: Option<String>,
207 pub version: String,
208}
209
210#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
214pub enum CodexErrorInfo {
215 #[serde(rename = "contextWindowExceeded")]
216 ContextWindowExceeded,
217 #[serde(rename = "sessionBudgetExceeded")]
218 SessionBudgetExceeded,
219 #[serde(rename = "usageLimitExceeded")]
220 UsageLimitExceeded,
221 #[serde(rename = "rateLimitExceeded")]
222 RateLimitExceeded,
223 #[serde(rename = "flexUnavailable")]
224 FlexUnavailable,
225 #[serde(rename = "serverOverloaded")]
226 ServerOverloaded,
227 #[serde(rename = "modelNotFound")]
228 ModelNotFound,
229 #[serde(rename = "policyCapacityUnavailable")]
230 PolicyCapacityUnavailable,
231 #[serde(rename = "cyberPolicy")]
232 CyberPolicy,
233 #[serde(rename = "misalignmentPolicyViolation")]
234 MisalignmentPolicyViolation,
235 #[serde(rename = "tooManyDenials")]
236 TooManyDenials,
237 #[serde(rename = "internalServerError")]
238 InternalServerError,
239 #[serde(rename = "unauthorized")]
240 Unauthorized,
241 #[serde(rename = "badRequest")]
242 BadRequest,
243 #[serde(rename = "threadRollbackFailed")]
244 ThreadRollbackFailed,
245 #[serde(rename = "sandboxError")]
246 SandboxError,
247 #[serde(rename = "other")]
248 Other,
249 #[serde(rename = "httpConnectionFailed")]
250 HttpConnectionFailed(CodexErrorInfoHttpConnectionFailed),
251 #[serde(rename = "responseStreamConnectionFailed")]
253 ResponseStreamConnectionFailed(CodexErrorInfoResponseStreamConnectionFailed),
254 #[serde(rename = "responseStreamDisconnected")]
256 ResponseStreamDisconnected(CodexErrorInfoResponseStreamDisconnected),
257 #[serde(rename = "responseTooManyFailedAttempts")]
259 ResponseTooManyFailedAttempts(CodexErrorInfoResponseTooManyFailedAttempts),
260 #[serde(rename = "activeTurnNotSteerable")]
262 ActiveTurnNotSteerable(CodexErrorInfoActiveTurnNotSteerable),
263 #[serde(untagged)]
265 Unknown(Value),
266}
267
268#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
269pub struct CodexErrorInfoActiveTurnNotSteerable {
270 #[serde(rename = "turnKind")]
271 pub turn_kind: NonSteerableTurnKind,
272}
273
274#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
275pub struct CodexErrorInfoHttpConnectionFailed {
276 #[serde(rename = "httpStatusCode")]
277 #[serde(default, skip_serializing_if = "Option::is_none")]
278 pub http_status_code: Option<u64>,
279}
280
281#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
282pub struct CodexErrorInfoResponseStreamConnectionFailed {
283 #[serde(rename = "httpStatusCode")]
284 #[serde(default, skip_serializing_if = "Option::is_none")]
285 pub http_status_code: Option<u64>,
286}
287
288#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
289pub struct CodexErrorInfoResponseStreamDisconnected {
290 #[serde(rename = "httpStatusCode")]
291 #[serde(default, skip_serializing_if = "Option::is_none")]
292 pub http_status_code: Option<u64>,
293}
294
295#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
296pub struct CodexErrorInfoResponseTooManyFailedAttempts {
297 #[serde(rename = "httpStatusCode")]
298 #[serde(default, skip_serializing_if = "Option::is_none")]
299 pub http_status_code: Option<u64>,
300}
301
302pub type CollabAgentState = Value;
303
304#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
305pub enum CollabAgentTool {
306 #[serde(rename = "spawnAgent")]
307 SpawnAgent,
308 #[serde(rename = "sendInput")]
309 SendInput,
310 #[serde(rename = "resumeAgent")]
311 ResumeAgent,
312 #[serde(rename = "wait")]
313 Wait,
314 #[serde(rename = "closeAgent")]
315 CloseAgent,
316 #[serde(rename = "sendMessage")]
317 SendMessage,
318 #[serde(rename = "followupTask")]
319 FollowupTask,
320 #[serde(rename = "interruptAgent")]
321 InterruptAgent,
322 #[serde(rename = "listAgents")]
323 ListAgents,
324 #[serde(untagged)]
326 Unknown(Value),
327}
328
329#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
330pub enum CollabAgentToolCallStatus {
331 #[serde(rename = "inProgress")]
332 InProgress,
333 #[serde(rename = "completed")]
334 Completed,
335 #[serde(rename = "failed")]
336 Failed,
337 #[serde(rename = "interrupted")]
338 Interrupted,
339 #[serde(untagged)]
341 Unknown(Value),
342}
343
344#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
345pub struct CollabAgentToolCallThreadItem {
346 #[serde(rename = "agentsStates")]
348 pub agents_states: BTreeMap<String, CollabAgentState>,
349 #[serde(rename = "completedAtMs")]
351 #[serde(default, skip_serializing_if = "Option::is_none")]
352 pub completed_at_ms: Option<i64>,
353 pub id: String,
355 #[serde(default, skip_serializing_if = "Option::is_none")]
357 pub model: Option<String>,
358 #[serde(default, skip_serializing_if = "Option::is_none")]
360 pub prompt: Option<String>,
361 #[serde(rename = "reasoningEffort")]
363 #[serde(default, skip_serializing_if = "Option::is_none")]
364 pub reasoning_effort: Option<ReasoningEffort>,
365 #[serde(rename = "receiverThreadIds")]
367 pub receiver_thread_ids: Vec<String>,
368 #[serde(rename = "senderThreadId")]
370 pub sender_thread_id: String,
371 #[serde(rename = "startedAtMs")]
373 #[serde(default, skip_serializing_if = "Option::is_none")]
374 pub started_at_ms: Option<i64>,
375 pub status: CollabAgentToolCallStatus,
377 pub tool: CollabAgentTool,
379}
380
381#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
383pub struct CollaborationMode {
384 pub mode: ModeKind,
385 pub settings: Settings,
386}
387
388pub type CommandAction = Value;
389
390#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
391pub enum CommandExecutionApprovalDecision {
392 #[serde(rename = "accept")]
394 Accept,
395 #[serde(rename = "acceptForSession")]
397 AcceptForSession,
398 #[serde(rename = "acceptWithExecpolicyAmendment")]
400 AcceptWithExecpolicyAmendment(CommandExecutionApprovalDecisionAcceptWithExecpolicyAmendment),
401 #[serde(rename = "applyNetworkPolicyAmendment")]
403 ApplyNetworkPolicyAmendment(CommandExecutionApprovalDecisionApplyNetworkPolicyAmendment),
404 #[serde(rename = "decline")]
406 Decline,
407 #[serde(rename = "cancel")]
409 Cancel,
410 #[serde(untagged)]
412 Unknown(Value),
413}
414
415#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
416pub struct CommandExecutionApprovalDecisionAcceptWithExecpolicyAmendment {
417 pub execpolicy_amendment: Vec<String>,
418}
419
420#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
421pub struct CommandExecutionApprovalDecisionApplyNetworkPolicyAmendment {
422 pub network_policy_amendment: NetworkPolicyAmendment,
423}
424
425#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
427pub enum CommandExecutionApprovalKind {
428 #[serde(rename = "command")]
429 Command,
430 #[serde(rename = "writeStdin")]
431 WriteStdin,
432 #[serde(rename = "humanCommand")]
434 HumanCommand,
435 #[serde(untagged)]
437 Unknown(Value),
438}
439
440#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
441pub struct CommandExecutionRequestApprovalParams {
442 #[serde(rename = "approvalId")]
448 #[serde(default, skip_serializing_if = "Option::is_none")]
449 pub approval_id: Option<String>,
450 #[serde(default, skip_serializing_if = "Option::is_none")]
452 pub command: Option<String>,
453 #[serde(rename = "commandActions")]
455 #[serde(default, skip_serializing_if = "Option::is_none")]
456 pub command_actions: Option<Vec<CommandAction>>,
457 #[serde(default, skip_serializing_if = "Option::is_none")]
459 pub cwd: Option<LegacyAppPathString>,
460 #[serde(rename = "environmentId")]
462 #[serde(default, skip_serializing_if = "Option::is_none")]
463 pub environment_id: Option<String>,
464 #[serde(rename = "itemId")]
465 pub item_id: String,
466 #[serde(default, skip_serializing_if = "Option::is_none")]
468 pub kind: Option<CommandExecutionApprovalKind>,
469 #[serde(rename = "networkApprovalContext")]
471 #[serde(default, skip_serializing_if = "Option::is_none")]
472 pub network_approval_context: Option<NetworkApprovalContext>,
473 #[serde(rename = "proposedExecpolicyAmendment")]
475 #[serde(default, skip_serializing_if = "Option::is_none")]
476 pub proposed_execpolicy_amendment: Option<Vec<String>>,
477 #[serde(rename = "proposedNetworkPolicyAmendments")]
479 #[serde(default, skip_serializing_if = "Option::is_none")]
480 pub proposed_network_policy_amendments: Option<Vec<NetworkPolicyAmendment>>,
481 #[serde(default, skip_serializing_if = "Option::is_none")]
483 pub reason: Option<String>,
484 #[serde(rename = "startedAtMs")]
486 pub started_at_ms: i64,
487 #[serde(rename = "threadId")]
488 pub thread_id: String,
489 #[serde(rename = "turnId")]
490 pub turn_id: String,
491}
492
493#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
494pub struct CommandExecutionRequestApprovalResponse {
495 pub decision: CommandExecutionApprovalDecision,
496}
497
498#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
499pub enum CommandExecutionSource {
500 #[serde(rename = "agent")]
501 Agent,
502 #[serde(rename = "userShell")]
503 UserShell,
504 #[serde(rename = "unifiedExecStartup")]
505 UnifiedExecStartup,
506 #[serde(rename = "unifiedExecInteraction")]
507 UnifiedExecInteraction,
508 #[serde(untagged)]
510 Unknown(Value),
511}
512
513#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
514pub enum CommandExecutionStatus {
515 #[serde(rename = "inProgress")]
516 InProgress,
517 #[serde(rename = "completed")]
518 Completed,
519 #[serde(rename = "failed")]
520 Failed,
521 #[serde(rename = "declined")]
522 Declined,
523 #[serde(untagged)]
525 Unknown(Value),
526}
527
528#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
529pub struct CommandExecutionThreadItem {
530 #[serde(rename = "aggregatedOutput")]
532 #[serde(default, skip_serializing_if = "Option::is_none")]
533 pub aggregated_output: Option<String>,
534 pub command: String,
536 #[serde(rename = "commandActions")]
538 pub command_actions: Vec<CommandAction>,
539 #[serde(rename = "completedAtMs")]
541 #[serde(default, skip_serializing_if = "Option::is_none")]
542 pub completed_at_ms: Option<i64>,
543 pub cwd: LegacyAppPathString,
545 #[serde(rename = "durationMs")]
547 #[serde(default, skip_serializing_if = "Option::is_none")]
548 pub duration_ms: Option<i64>,
549 #[serde(rename = "exitCode")]
551 #[serde(default, skip_serializing_if = "Option::is_none")]
552 pub exit_code: Option<i64>,
553 pub id: String,
554 #[serde(rename = "pluginId")]
556 #[serde(default, skip_serializing_if = "Option::is_none")]
557 pub plugin_id: Option<String>,
558 #[serde(rename = "processId")]
560 #[serde(default, skip_serializing_if = "Option::is_none")]
561 pub process_id: Option<String>,
562 #[serde(rename = "scriptPath")]
564 #[serde(default, skip_serializing_if = "Option::is_none")]
565 pub script_path: Option<String>,
566 #[serde(default, skip_serializing_if = "Option::is_none")]
567 pub source: Option<CommandExecutionSource>,
568 #[serde(rename = "startedAtMs")]
570 #[serde(default, skip_serializing_if = "Option::is_none")]
571 pub started_at_ms: Option<i64>,
572 pub status: CommandExecutionStatus,
573}
574
575#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
576pub struct ContextCompactionThreadItem {
577 #[serde(rename = "completedAtMs")]
579 #[serde(default, skip_serializing_if = "Option::is_none")]
580 pub completed_at_ms: Option<i64>,
581 pub id: String,
582 #[serde(rename = "startedAtMs")]
584 #[serde(default, skip_serializing_if = "Option::is_none")]
585 pub started_at_ms: Option<i64>,
586}
587
588#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
589pub struct CreditsSnapshot {
590 #[serde(default, skip_serializing_if = "Option::is_none")]
591 pub balance: Option<String>,
592 #[serde(rename = "hasCredits")]
593 pub has_credits: bool,
594 pub unlimited: bool,
595}
596
597#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
598pub struct DeletePatchChangeKind {}
599
600pub type DynamicToolCallOutputContentItem = Value;
601
602#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
603pub enum DynamicToolCallStatus {
604 #[serde(rename = "inProgress")]
605 InProgress,
606 #[serde(rename = "completed")]
607 Completed,
608 #[serde(rename = "failed")]
609 Failed,
610 #[serde(untagged)]
612 Unknown(Value),
613}
614
615#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
616pub struct DynamicToolCallThreadItem {
617 pub arguments: Value,
618 #[serde(rename = "completedAtMs")]
620 #[serde(default, skip_serializing_if = "Option::is_none")]
621 pub completed_at_ms: Option<i64>,
622 #[serde(rename = "contentItems")]
623 #[serde(default, skip_serializing_if = "Option::is_none")]
624 pub content_items: Option<Vec<DynamicToolCallOutputContentItem>>,
625 #[serde(rename = "durationMs")]
627 #[serde(default, skip_serializing_if = "Option::is_none")]
628 pub duration_ms: Option<i64>,
629 pub id: String,
630 #[serde(default, skip_serializing_if = "Option::is_none")]
631 pub namespace: Option<String>,
632 #[serde(rename = "startedAtMs")]
634 #[serde(default, skip_serializing_if = "Option::is_none")]
635 pub started_at_ms: Option<i64>,
636 pub status: DynamicToolCallStatus,
637 #[serde(default, skip_serializing_if = "Option::is_none")]
638 pub success: Option<bool>,
639 pub tool: String,
640}
641
642#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
643pub struct EnteredReviewModeThreadItem {
644 #[serde(rename = "completedAtMs")]
646 #[serde(default, skip_serializing_if = "Option::is_none")]
647 pub completed_at_ms: Option<i64>,
648 pub id: String,
649 pub review: String,
650 #[serde(rename = "startedAtMs")]
652 #[serde(default, skip_serializing_if = "Option::is_none")]
653 pub started_at_ms: Option<i64>,
654}
655
656#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
657pub struct ErrorNotification {
658 pub error: TurnError,
659 #[serde(rename = "threadId")]
660 pub thread_id: String,
661 #[serde(rename = "turnId")]
662 pub turn_id: String,
663 #[serde(rename = "willRetry")]
664 pub will_retry: bool,
665}
666
667#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
668pub struct ExitedReviewModeThreadItem {
669 #[serde(rename = "completedAtMs")]
671 #[serde(default, skip_serializing_if = "Option::is_none")]
672 pub completed_at_ms: Option<i64>,
673 pub id: String,
674 pub review: String,
675 #[serde(rename = "startedAtMs")]
677 #[serde(default, skip_serializing_if = "Option::is_none")]
678 pub started_at_ms: Option<i64>,
679}
680
681#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
682pub enum FileChangeApprovalDecision {
683 #[serde(rename = "accept")]
685 Accept,
686 #[serde(rename = "acceptForSession")]
688 AcceptForSession,
689 #[serde(rename = "decline")]
691 Decline,
692 #[serde(rename = "cancel")]
694 Cancel,
695 #[serde(untagged)]
697 Unknown(Value),
698}
699
700#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
701pub struct FileChangeRequestApprovalParams {
702 #[serde(rename = "grantRoot")]
704 #[serde(default, skip_serializing_if = "Option::is_none")]
705 pub grant_root: Option<String>,
706 #[serde(rename = "itemId")]
707 pub item_id: String,
708 #[serde(default, skip_serializing_if = "Option::is_none")]
710 pub reason: Option<String>,
711 #[serde(rename = "startedAtMs")]
713 pub started_at_ms: i64,
714 #[serde(rename = "threadId")]
715 pub thread_id: String,
716 #[serde(rename = "turnId")]
717 pub turn_id: String,
718}
719
720#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
721pub struct FileChangeRequestApprovalResponse {
722 pub decision: FileChangeApprovalDecision,
723}
724
725#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
726pub struct FileChangeThreadItem {
727 pub changes: Vec<FileUpdateChange>,
728 #[serde(rename = "completedAtMs")]
730 #[serde(default, skip_serializing_if = "Option::is_none")]
731 pub completed_at_ms: Option<i64>,
732 pub id: String,
733 #[serde(rename = "startedAtMs")]
735 #[serde(default, skip_serializing_if = "Option::is_none")]
736 pub started_at_ms: Option<i64>,
737 pub status: PatchApplyStatus,
738}
739
740#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
741pub struct FileUpdateChange {
742 pub diff: String,
743 pub kind: PatchChangeKind,
744 pub path: String,
745}
746
747pub type FunctionCallOutputBody = Value;
748
749#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
750pub struct FunctionCallOutputThreadItem {
751 #[serde(rename = "completedAtMs")]
753 #[serde(default, skip_serializing_if = "Option::is_none")]
754 pub completed_at_ms: Option<i64>,
755 pub id: String,
756 pub name: String,
757 #[serde(default, skip_serializing_if = "Option::is_none")]
758 pub namespace: Option<String>,
759 pub output: FunctionCallOutputBody,
760 #[serde(rename = "startedAtMs")]
762 #[serde(default, skip_serializing_if = "Option::is_none")]
763 pub started_at_ms: Option<i64>,
764}
765
766pub type GitInfo = Value;
767
768pub type HookPromptFragment = Value;
769
770#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
771pub struct HookPromptThreadItem {
772 #[serde(rename = "completedAtMs")]
774 #[serde(default, skip_serializing_if = "Option::is_none")]
775 pub completed_at_ms: Option<i64>,
776 pub fragments: Vec<HookPromptFragment>,
777 pub id: String,
778 #[serde(rename = "startedAtMs")]
780 #[serde(default, skip_serializing_if = "Option::is_none")]
781 pub started_at_ms: Option<i64>,
782}
783
784#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
785pub enum ImageDetail {
786 #[serde(rename = "auto")]
787 Auto,
788 #[serde(rename = "low")]
789 Low,
790 #[serde(rename = "high")]
791 High,
792 #[serde(rename = "original")]
793 Original,
794 #[serde(untagged)]
796 Unknown(Value),
797}
798
799#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
800#[serde(tag = "type")]
801pub enum ImageGenerationFailure {
802 #[serde(rename = "usageLimitExceeded")]
803 UsageLimitExceeded(UsageLimitExceededImageGenerationFailure),
804 #[serde(untagged)]
806 Unknown(Value),
807}
808
809#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
811pub struct ImageGenerationInputImage {
812 pub path: AbsolutePathBuf,
813 pub sha256: String,
815}
816
817#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
818pub struct ImageGenerationThreadItem {
819 #[serde(rename = "completedAtMs")]
821 #[serde(default, skip_serializing_if = "Option::is_none")]
822 pub completed_at_ms: Option<i64>,
823 #[serde(default, skip_serializing_if = "Option::is_none")]
824 pub failure: Option<ImageGenerationFailure>,
825 #[serde(rename = "fileId")]
826 #[serde(default, skip_serializing_if = "Option::is_none")]
827 pub file_id: Option<String>,
828 #[serde(rename = "generationId")]
830 #[serde(default, skip_serializing_if = "Option::is_none")]
831 pub generation_id: Option<String>,
832 pub id: String,
833 #[serde(rename = "inputImages")]
835 #[serde(default, skip_serializing_if = "Option::is_none")]
836 pub input_images: Option<Vec<ImageGenerationInputImage>>,
837 #[serde(default, skip_serializing_if = "Option::is_none")]
838 pub result: Option<String>,
839 #[serde(rename = "revisedPrompt")]
840 #[serde(default, skip_serializing_if = "Option::is_none")]
841 pub revised_prompt: Option<String>,
842 #[serde(rename = "savedPath")]
843 #[serde(default, skip_serializing_if = "Option::is_none")]
844 pub saved_path: Option<AbsolutePathBuf>,
845 #[serde(rename = "startedAtMs")]
847 #[serde(default, skip_serializing_if = "Option::is_none")]
848 pub started_at_ms: Option<i64>,
849 pub status: String,
850 #[serde(rename = "transparentBackground")]
851 #[serde(default, skip_serializing_if = "Option::is_none")]
852 pub transparent_background: Option<bool>,
853}
854
855#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
856pub struct ImageUserInput {
857 #[serde(default, skip_serializing_if = "Option::is_none")]
858 pub detail: Option<ImageDetail>,
859 #[serde(rename = "fileId")]
860 #[serde(default, skip_serializing_if = "Option::is_none")]
861 pub file_id: Option<String>,
862 #[serde(default, skip_serializing_if = "Option::is_none")]
863 pub url: Option<String>,
864}
865
866#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
867pub struct ImageViewThreadItem {
868 #[serde(rename = "completedAtMs")]
870 #[serde(default, skip_serializing_if = "Option::is_none")]
871 pub completed_at_ms: Option<i64>,
872 pub id: String,
873 pub path: LegacyAppPathString,
874 #[serde(rename = "startedAtMs")]
876 #[serde(default, skip_serializing_if = "Option::is_none")]
877 pub started_at_ms: Option<i64>,
878}
879
880#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
882pub struct InitializeCapabilities {
883 #[serde(rename = "experimentalApi")]
885 #[serde(default, skip_serializing_if = "Option::is_none")]
886 pub experimental_api: Option<bool>,
887 #[serde(rename = "explicitGatewayOauth")]
889 #[serde(default, skip_serializing_if = "Option::is_none")]
890 pub explicit_gateway_oauth: Option<bool>,
891 #[serde(default, skip_serializing_if = "Option::is_none")]
893 pub extensions: Option<BTreeMap<String, Value>>,
894 #[serde(rename = "mcpServerOpenaiFormElicitation")]
898 #[serde(default, skip_serializing_if = "Option::is_none")]
899 pub mcp_server_openai_form_elicitation: Option<bool>,
900 #[serde(rename = "optOutNotificationMethods")]
902 #[serde(default, skip_serializing_if = "Option::is_none")]
903 pub opt_out_notification_methods: Option<Vec<String>>,
904 #[serde(rename = "requestAttestation")]
906 #[serde(default, skip_serializing_if = "Option::is_none")]
907 pub request_attestation: Option<bool>,
908 #[serde(rename = "requiredHumanApproval")]
910 #[serde(default, skip_serializing_if = "Option::is_none")]
911 pub required_human_approval: Option<bool>,
912}
913
914#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
915pub struct InitializeParams {
916 #[serde(default, skip_serializing_if = "Option::is_none")]
917 pub capabilities: Option<InitializeCapabilities>,
918 #[serde(rename = "clientInfo")]
919 pub client_info: ClientInfo,
920}
921
922#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
923pub struct InitializeResponse {
924 #[serde(rename = "codexHome")]
926 pub codex_home: AbsolutePathBuf,
927 #[serde(rename = "platformFamily")]
929 pub platform_family: String,
930 #[serde(rename = "platformOs")]
932 pub platform_os: String,
933 #[serde(rename = "userAgent")]
934 pub user_agent: String,
935}
936
937#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
938pub struct ItemCompletedNotification {
939 #[serde(rename = "completedAtMs")]
941 pub completed_at_ms: i64,
942 pub item: ThreadItem,
943 #[serde(rename = "threadId")]
944 pub thread_id: String,
945 #[serde(rename = "turnId")]
946 pub turn_id: String,
947}
948
949#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
950pub struct ItemStartedNotification {
951 pub item: ThreadItem,
952 #[serde(rename = "startedAtMs")]
954 pub started_at_ms: i64,
955 #[serde(rename = "threadId")]
956 pub thread_id: String,
957 #[serde(rename = "turnId")]
958 pub turn_id: String,
959}
960
961pub type LegacyAppPathString = String;
962
963#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
964pub struct LocalAudioUserInput {
965 pub path: String,
966}
967
968#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
969pub struct LocalImageUserInput {
970 #[serde(default, skip_serializing_if = "Option::is_none")]
971 pub detail: Option<ImageDetail>,
972 pub path: String,
973}
974
975#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
976pub enum McpAppDisplayMode {
977 #[serde(rename = "inline")]
978 Inline,
979 #[serde(rename = "fullscreen")]
980 Fullscreen,
981 #[serde(untagged)]
983 Unknown(Value),
984}
985
986#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
988pub struct McpAppUi {
989 #[serde(rename = "preferredModelDisplayMode")]
990 pub preferred_model_display_mode: McpAppDisplayMode,
991 #[serde(rename = "resourceUri")]
992 pub resource_uri: String,
993}
994
995#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
996pub enum McpServerElicitationAction {
997 #[serde(rename = "accept")]
998 Accept,
999 #[serde(rename = "decline")]
1000 Decline,
1001 #[serde(rename = "cancel")]
1002 Cancel,
1003 #[serde(untagged)]
1005 Unknown(Value),
1006}
1007
1008pub type McpServerElicitationRequestParams = Value;
1009
1010#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1011pub struct McpServerElicitationRequestResponse {
1012 #[serde(rename = "_meta")]
1014 #[serde(default, skip_serializing_if = "Option::is_none")]
1015 pub meta: Option<Value>,
1016 pub action: McpServerElicitationAction,
1017 #[serde(default, skip_serializing_if = "Option::is_none")]
1021 pub content: Option<Value>,
1022}
1023
1024#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1025pub struct McpToolCallAppContext {
1026 #[serde(rename = "actionName")]
1027 #[serde(default, skip_serializing_if = "Option::is_none")]
1028 pub action_name: Option<String>,
1029 #[serde(rename = "appName")]
1030 #[serde(default, skip_serializing_if = "Option::is_none")]
1031 pub app_name: Option<String>,
1032 #[serde(rename = "connectorId")]
1033 pub connector_id: String,
1034 #[serde(rename = "linkId")]
1035 #[serde(default, skip_serializing_if = "Option::is_none")]
1036 pub link_id: Option<String>,
1037 #[serde(rename = "resourceUri")]
1038 #[serde(default, skip_serializing_if = "Option::is_none")]
1039 pub resource_uri: Option<String>,
1040}
1041
1042#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1043pub struct McpToolCallError {
1044 pub message: String,
1045}
1046
1047pub type McpToolCallResult = Value;
1048
1049#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1050pub enum McpToolCallStatus {
1051 #[serde(rename = "inProgress")]
1052 InProgress,
1053 #[serde(rename = "completed")]
1054 Completed,
1055 #[serde(rename = "failed")]
1056 Failed,
1057 #[serde(untagged)]
1059 Unknown(Value),
1060}
1061
1062#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1063pub struct McpToolCallThreadItem {
1064 #[serde(rename = "appContext")]
1065 #[serde(default, skip_serializing_if = "Option::is_none")]
1066 pub app_context: Option<McpToolCallAppContext>,
1067 pub arguments: Value,
1068 #[serde(rename = "completedAtMs")]
1070 #[serde(default, skip_serializing_if = "Option::is_none")]
1071 pub completed_at_ms: Option<i64>,
1072 #[serde(rename = "durationMs")]
1074 #[serde(default, skip_serializing_if = "Option::is_none")]
1075 pub duration_ms: Option<i64>,
1076 #[serde(default, skip_serializing_if = "Option::is_none")]
1077 pub error: Option<McpToolCallError>,
1078 pub id: String,
1079 #[serde(rename = "mcpAppResourceUri")]
1081 #[serde(default, skip_serializing_if = "Option::is_none")]
1082 pub mcp_app_resource_uri: Option<String>,
1083 #[serde(rename = "mcpAppUi")]
1085 #[serde(default, skip_serializing_if = "Option::is_none")]
1086 pub mcp_app_ui: Option<McpAppUi>,
1087 #[serde(rename = "pluginId")]
1088 #[serde(default, skip_serializing_if = "Option::is_none")]
1089 pub plugin_id: Option<String>,
1090 #[serde(rename = "readOnlyHint")]
1091 #[serde(default, skip_serializing_if = "Option::is_none")]
1092 pub read_only_hint: Option<bool>,
1093 #[serde(default, skip_serializing_if = "Option::is_none")]
1094 pub result: Option<McpToolCallResult>,
1095 pub server: String,
1096 #[serde(rename = "startedAtMs")]
1098 #[serde(default, skip_serializing_if = "Option::is_none")]
1099 pub started_at_ms: Option<i64>,
1100 pub status: McpToolCallStatus,
1101 pub tool: String,
1102}
1103
1104pub type MemoryCitation = Value;
1105
1106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1107pub struct MentionUserInput {
1108 pub name: String,
1109 pub path: String,
1110}
1111
1112#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1116pub enum MessagePhase {
1117 #[serde(rename = "commentary")]
1121 Commentary,
1122 #[serde(rename = "partial_answer")]
1124 PartialAnswer,
1125 #[serde(rename = "final_answer")]
1127 FinalAnswer,
1128 #[serde(untagged)]
1130 Unknown(Value),
1131}
1132
1133#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1134pub struct MisalignmentErrorDetails {
1135 #[serde(rename = "detailedExplanation")]
1137 #[serde(default, skip_serializing_if = "Option::is_none")]
1138 pub detailed_explanation: Option<String>,
1139 #[serde(rename = "errorType")]
1141 #[serde(default, skip_serializing_if = "Option::is_none")]
1142 pub error_type: Option<String>,
1143 #[serde(rename = "reviewTarget")]
1145 #[serde(default, skip_serializing_if = "Option::is_none")]
1146 pub review_target: Option<String>,
1147 #[serde(default, skip_serializing_if = "Option::is_none")]
1149 pub steer: Option<MisalignmentSteer>,
1150}
1151
1152#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1153pub struct MisalignmentSteer {
1154 pub message: String,
1155}
1156
1157#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1159pub enum ModeKind {
1160 #[serde(rename = "plan")]
1161 Plan,
1162 #[serde(rename = "default")]
1163 Default,
1164 #[serde(untagged)]
1166 Unknown(Value),
1167}
1168
1169#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1170pub struct NetworkApprovalContext {
1171 pub host: String,
1172 pub protocol: NetworkApprovalProtocol,
1173}
1174
1175#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1176pub enum NetworkApprovalProtocol {
1177 #[serde(rename = "http")]
1178 Http,
1179 #[serde(rename = "https")]
1180 Https,
1181 #[serde(rename = "socks5Tcp")]
1182 Socks5Tcp,
1183 #[serde(rename = "socks5Udp")]
1184 Socks5Udp,
1185 #[serde(untagged)]
1187 Unknown(Value),
1188}
1189
1190pub type NetworkPolicyAmendment = Value;
1191
1192#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1193pub enum NonSteerableTurnKind {
1194 #[serde(rename = "review")]
1195 Review,
1196 #[serde(rename = "compact")]
1197 Compact,
1198 #[serde(untagged)]
1200 Unknown(Value),
1201}
1202
1203#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1204pub enum PatchApplyStatus {
1205 #[serde(rename = "inProgress")]
1206 InProgress,
1207 #[serde(rename = "completed")]
1208 Completed,
1209 #[serde(rename = "failed")]
1210 Failed,
1211 #[serde(rename = "declined")]
1212 Declined,
1213 #[serde(untagged)]
1215 Unknown(Value),
1216}
1217
1218#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1219#[serde(tag = "type")]
1220pub enum PatchChangeKind {
1221 #[serde(rename = "add")]
1222 Add(AddPatchChangeKind),
1223 #[serde(rename = "delete")]
1224 Delete(DeletePatchChangeKind),
1225 #[serde(rename = "update")]
1226 Update(UpdatePatchChangeKind),
1227 #[serde(untagged)]
1229 Unknown(Value),
1230}
1231
1232#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1234pub enum Personality {
1235 #[serde(rename = "none")]
1236 None,
1237 #[serde(rename = "friendly")]
1238 Friendly,
1239 #[serde(rename = "pragmatic")]
1240 Pragmatic,
1241 #[serde(untagged)]
1243 Unknown(Value),
1244}
1245
1246#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1247pub struct PlanThreadItem {
1248 #[serde(rename = "completedAtMs")]
1250 #[serde(default, skip_serializing_if = "Option::is_none")]
1251 pub completed_at_ms: Option<i64>,
1252 pub id: String,
1253 #[serde(rename = "startedAtMs")]
1255 #[serde(default, skip_serializing_if = "Option::is_none")]
1256 pub started_at_ms: Option<i64>,
1257 pub text: String,
1258}
1259
1260#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1261pub enum PlanType {
1262 #[serde(rename = "free")]
1263 Free,
1264 #[serde(rename = "go")]
1265 Go,
1266 #[serde(rename = "plus")]
1267 Plus,
1268 #[serde(rename = "pro")]
1269 Pro,
1270 #[serde(rename = "prolite")]
1271 Prolite,
1272 #[serde(rename = "promax")]
1273 Promax,
1274 #[serde(rename = "team")]
1275 Team,
1276 #[serde(rename = "self_serve_business_prolite")]
1277 SelfServeBusinessProlite,
1278 #[serde(rename = "self_serve_business_usage_based")]
1279 SelfServeBusinessUsageBased,
1280 #[serde(rename = "business")]
1281 Business,
1282 #[serde(rename = "ent26")]
1283 Ent26,
1284 #[serde(rename = "enterprise_cbp_automation")]
1285 EnterpriseCbpAutomation,
1286 #[serde(rename = "enterprise_cbp_usage_based")]
1287 EnterpriseCbpUsageBased,
1288 #[serde(rename = "enterprise")]
1289 Enterprise,
1290 #[serde(rename = "edu")]
1291 Edu,
1292 #[serde(rename = "edu_plus")]
1293 EduPlus,
1294 #[serde(rename = "edu_pro")]
1295 EduPro,
1296 #[serde(rename = "sci")]
1297 Sci,
1298 #[serde(rename = "sci_plus")]
1299 SciPlus,
1300 #[serde(rename = "unknown")]
1301 Unknown,
1302 #[serde(untagged)]
1304 UnknownValue(Value),
1305}
1306
1307#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1308pub enum RateLimitReachedType {
1309 #[serde(rename = "rate_limit_reached")]
1310 RateLimitReached,
1311 #[serde(rename = "workspace_owner_credits_depleted")]
1312 WorkspaceOwnerCreditsDepleted,
1313 #[serde(rename = "workspace_member_credits_depleted")]
1314 WorkspaceMemberCreditsDepleted,
1315 #[serde(rename = "workspace_owner_usage_limit_reached")]
1316 WorkspaceOwnerUsageLimitReached,
1317 #[serde(rename = "workspace_member_usage_limit_reached")]
1318 WorkspaceMemberUsageLimitReached,
1319 #[serde(untagged)]
1321 Unknown(Value),
1322}
1323
1324#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1325pub struct RateLimitSnapshot {
1326 #[serde(default, skip_serializing_if = "Option::is_none")]
1327 pub credits: Option<CreditsSnapshot>,
1328 #[serde(rename = "individualLimit")]
1329 #[serde(default, skip_serializing_if = "Option::is_none")]
1330 pub individual_limit: Option<SpendControlLimitSnapshot>,
1331 #[serde(rename = "limitId")]
1332 #[serde(default, skip_serializing_if = "Option::is_none")]
1333 pub limit_id: Option<String>,
1334 #[serde(rename = "limitName")]
1335 #[serde(default, skip_serializing_if = "Option::is_none")]
1336 pub limit_name: Option<String>,
1337 #[serde(rename = "normalModelSlug")]
1339 #[serde(default, skip_serializing_if = "Option::is_none")]
1340 pub normal_model_slug: Option<String>,
1341 #[serde(rename = "planType")]
1342 #[serde(default, skip_serializing_if = "Option::is_none")]
1343 pub plan_type: Option<PlanType>,
1344 #[serde(default, skip_serializing_if = "Option::is_none")]
1345 pub primary: Option<RateLimitWindow>,
1346 #[serde(rename = "rateLimitReachedType")]
1347 #[serde(default, skip_serializing_if = "Option::is_none")]
1348 pub rate_limit_reached_type: Option<RateLimitReachedType>,
1349 #[serde(default, skip_serializing_if = "Option::is_none")]
1350 pub secondary: Option<RateLimitWindow>,
1351 #[serde(rename = "spendControlReached")]
1353 #[serde(default, skip_serializing_if = "Option::is_none")]
1354 pub spend_control_reached: Option<bool>,
1355}
1356
1357#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1358pub struct RateLimitWindow {
1359 #[serde(rename = "resetsAt")]
1360 #[serde(default, skip_serializing_if = "Option::is_none")]
1361 pub resets_at: Option<i64>,
1362 #[serde(rename = "usedPercent")]
1363 pub used_percent: i64,
1364 #[serde(rename = "windowDurationMins")]
1365 #[serde(default, skip_serializing_if = "Option::is_none")]
1366 pub window_duration_mins: Option<i64>,
1367}
1368
1369pub type ReasoningEffort = String;
1371
1372#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1374pub enum ReasoningSummary {
1375 #[serde(rename = "auto")]
1376 Auto,
1377 #[serde(rename = "concise")]
1378 Concise,
1379 #[serde(rename = "detailed")]
1380 Detailed,
1381 #[serde(rename = "none")]
1383 None,
1384 #[serde(untagged)]
1386 Unknown(Value),
1387}
1388
1389#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1390pub struct ReasoningThreadItem {
1391 #[serde(rename = "completedAtMs")]
1393 #[serde(default, skip_serializing_if = "Option::is_none")]
1394 pub completed_at_ms: Option<i64>,
1395 #[serde(default, skip_serializing_if = "Option::is_none")]
1396 pub content: Option<Vec<String>>,
1397 pub id: String,
1398 #[serde(rename = "startedAtMs")]
1400 #[serde(default, skip_serializing_if = "Option::is_none")]
1401 pub started_at_ms: Option<i64>,
1402 #[serde(default, skip_serializing_if = "Option::is_none")]
1403 pub summary: Option<Vec<String>>,
1404}
1405
1406#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1407pub enum SandboxMode {
1408 #[serde(rename = "read-only")]
1409 ReadOnly,
1410 #[serde(rename = "workspace-write")]
1411 WorkspaceWrite,
1412 #[serde(rename = "danger-full-access")]
1413 DangerFullAccess,
1414 #[serde(untagged)]
1416 Unknown(Value),
1417}
1418
1419pub type SandboxPolicy = Value;
1420
1421#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1422pub enum SessionSource {
1423 #[serde(rename = "cli")]
1424 Cli,
1425 #[serde(rename = "vscode")]
1426 Vscode,
1427 #[serde(rename = "exec")]
1428 Exec,
1429 #[serde(rename = "appServer")]
1430 AppServer,
1431 #[serde(rename = "unknown")]
1432 Unknown,
1433 #[serde(rename = "custom")]
1434 Custom(String),
1435 #[serde(rename = "subAgent")]
1436 SubAgent(SubAgentSource),
1437 #[serde(untagged)]
1439 UnknownValue(Value),
1440}
1441
1442#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1444pub struct Settings {
1445 #[serde(default, skip_serializing_if = "Option::is_none")]
1446 pub developer_instructions: Option<String>,
1447 pub model: String,
1448 #[serde(default, skip_serializing_if = "Option::is_none")]
1449 pub reasoning_effort: Option<ReasoningEffort>,
1450}
1451
1452#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1453pub struct SkillUserInput {
1454 pub name: String,
1455 pub path: String,
1456}
1457
1458#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1459pub struct SleepThreadItem {
1460 #[serde(rename = "completedAtMs")]
1462 #[serde(default, skip_serializing_if = "Option::is_none")]
1463 pub completed_at_ms: Option<i64>,
1464 #[serde(rename = "durationMs")]
1465 pub duration_ms: u64,
1466 pub id: String,
1467 #[serde(rename = "startedAtMs")]
1469 #[serde(default, skip_serializing_if = "Option::is_none")]
1470 pub started_at_ms: Option<i64>,
1471}
1472
1473#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1474pub struct SpendControlLimitSnapshot {
1475 pub limit: String,
1476 #[serde(rename = "remainingPercent")]
1477 pub remaining_percent: i64,
1478 #[serde(rename = "resetsAt")]
1479 pub resets_at: i64,
1480 pub used: String,
1481}
1482
1483#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1484pub enum SubAgentActivityKind {
1485 #[serde(rename = "started")]
1486 Started,
1487 #[serde(rename = "interacted")]
1488 Interacted,
1489 #[serde(rename = "interrupted")]
1490 Interrupted,
1491 #[serde(rename = "completed")]
1492 Completed,
1493 #[serde(untagged)]
1495 Unknown(Value),
1496}
1497
1498#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1499pub struct SubAgentActivityThreadItem {
1500 #[serde(rename = "agentPath")]
1501 pub agent_path: String,
1502 #[serde(rename = "agentThreadId")]
1503 pub agent_thread_id: String,
1504 #[serde(rename = "completedAtMs")]
1506 #[serde(default, skip_serializing_if = "Option::is_none")]
1507 pub completed_at_ms: Option<i64>,
1508 pub id: String,
1509 pub kind: SubAgentActivityKind,
1510 #[serde(default, skip_serializing_if = "Option::is_none")]
1512 pub model: Option<String>,
1513 #[serde(rename = "reasoningEffort")]
1515 #[serde(default, skip_serializing_if = "Option::is_none")]
1516 pub reasoning_effort: Option<ReasoningEffort>,
1517 #[serde(rename = "startedAtMs")]
1519 #[serde(default, skip_serializing_if = "Option::is_none")]
1520 pub started_at_ms: Option<i64>,
1521}
1522
1523#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1524pub enum SubAgentSource {
1525 #[serde(rename = "review")]
1526 Review,
1527 #[serde(rename = "compact")]
1528 Compact,
1529 #[serde(rename = "memory_consolidation")]
1530 MemoryConsolidation,
1531 #[serde(rename = "thread_spawn")]
1532 ThreadSpawn(SubAgentSourceThreadSpawn),
1533 #[serde(rename = "other")]
1534 Other(String),
1535 #[serde(untagged)]
1537 Unknown(Value),
1538}
1539
1540#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1541pub struct SubAgentSourceThreadSpawn {
1542 #[serde(default, skip_serializing_if = "Option::is_none")]
1543 pub agent_nickname: Option<String>,
1544 #[serde(default, skip_serializing_if = "Option::is_none")]
1545 pub agent_path: Option<AgentPath>,
1546 #[serde(default, skip_serializing_if = "Option::is_none")]
1547 pub agent_role: Option<String>,
1548 pub depth: i64,
1549 pub parent_thread_id: ThreadId,
1550}
1551
1552pub type TextElement = Value;
1553
1554#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1555pub struct TextUserInput {
1556 pub text: String,
1557 #[serde(default, skip_serializing_if = "Option::is_none")]
1559 pub text_elements: Option<Vec<TextElement>>,
1560}
1561
1562#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1563pub struct Thread {
1564 #[serde(rename = "agentNickname")]
1566 #[serde(default, skip_serializing_if = "Option::is_none")]
1567 pub agent_nickname: Option<String>,
1568 #[serde(rename = "agentRole")]
1570 #[serde(default, skip_serializing_if = "Option::is_none")]
1571 pub agent_role: Option<String>,
1572 #[serde(rename = "cliVersion")]
1574 pub cli_version: String,
1575 #[serde(rename = "createdAt")]
1577 pub created_at: i64,
1578 pub cwd: AbsolutePathBuf,
1580 pub ephemeral: bool,
1582 #[serde(rename = "forkedFromId")]
1584 #[serde(default, skip_serializing_if = "Option::is_none")]
1585 pub forked_from_id: Option<String>,
1586 #[serde(rename = "gitInfo")]
1588 #[serde(default, skip_serializing_if = "Option::is_none")]
1589 pub git_info: Option<GitInfo>,
1590 #[serde(rename = "historyMode")]
1592 #[serde(default, skip_serializing_if = "Option::is_none")]
1593 pub history_mode: Option<ThreadHistoryMode>,
1594 pub id: String,
1596 #[serde(default, skip_serializing_if = "Option::is_none")]
1598 pub model: Option<String>,
1599 #[serde(rename = "modelProvider")]
1601 pub model_provider: String,
1602 #[serde(default, skip_serializing_if = "Option::is_none")]
1604 pub name: Option<String>,
1605 #[serde(default, skip_serializing_if = "Option::is_none")]
1607 pub originator: Option<String>,
1608 #[serde(rename = "parentThreadId")]
1610 #[serde(default, skip_serializing_if = "Option::is_none")]
1611 pub parent_thread_id: Option<String>,
1612 #[serde(default, skip_serializing_if = "Option::is_none")]
1614 pub path: Option<String>,
1615 pub preview: String,
1617 #[serde(rename = "projectId")]
1619 #[serde(default, skip_serializing_if = "Option::is_none")]
1620 pub project_id: Option<String>,
1621 #[serde(rename = "reasoningEffort")]
1623 #[serde(default, skip_serializing_if = "Option::is_none")]
1624 pub reasoning_effort: Option<ReasoningEffort>,
1625 #[serde(rename = "recencyAt")]
1627 #[serde(default, skip_serializing_if = "Option::is_none")]
1628 pub recency_at: Option<i64>,
1629 #[serde(default, skip_serializing_if = "Option::is_none")]
1631 pub section: Option<ThreadSection>,
1632 #[serde(rename = "sectionEnteredAt")]
1634 #[serde(default, skip_serializing_if = "Option::is_none")]
1635 pub section_entered_at: Option<i64>,
1636 #[serde(rename = "sessionId")]
1638 pub session_id: String,
1639 pub source: SessionSource,
1641 pub status: ThreadStatus,
1643 #[serde(rename = "threadSource")]
1645 #[serde(default, skip_serializing_if = "Option::is_none")]
1646 pub thread_source: Option<ThreadSource>,
1647 pub turns: Vec<Turn>,
1649 #[serde(rename = "updatedAt")]
1651 pub updated_at: i64,
1652}
1653
1654#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1655pub enum ThreadHistoryMode {
1656 #[serde(rename = "legacy")]
1657 Legacy,
1658 #[serde(rename = "paginated")]
1659 Paginated,
1660 #[serde(untagged)]
1662 Unknown(Value),
1663}
1664
1665pub type ThreadId = String;
1666
1667#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1669#[serde(tag = "type")]
1670pub enum ThreadItem {
1671 #[serde(rename = "userMessage")]
1672 UserMessage(UserMessageThreadItem),
1673 #[serde(rename = "hookPrompt")]
1674 HookPrompt(HookPromptThreadItem),
1675 #[serde(rename = "agentMessage")]
1676 AgentMessage(AgentMessageThreadItem),
1677 #[serde(rename = "functionCallOutput")]
1678 FunctionCallOutput(FunctionCallOutputThreadItem),
1679 #[serde(rename = "plan")]
1681 Plan(PlanThreadItem),
1682 #[serde(rename = "reasoning")]
1683 Reasoning(ReasoningThreadItem),
1684 #[serde(rename = "commandExecution")]
1685 CommandExecution(CommandExecutionThreadItem),
1686 #[serde(rename = "fileChange")]
1687 FileChange(FileChangeThreadItem),
1688 #[serde(rename = "mcpToolCall")]
1689 McpToolCall(McpToolCallThreadItem),
1690 #[serde(rename = "dynamicToolCall")]
1691 DynamicToolCall(DynamicToolCallThreadItem),
1692 #[serde(rename = "collabAgentToolCall")]
1693 CollabAgentToolCall(CollabAgentToolCallThreadItem),
1694 #[serde(rename = "subAgentActivity")]
1695 SubAgentActivity(SubAgentActivityThreadItem),
1696 #[serde(rename = "webSearch")]
1697 WebSearch(WebSearchThreadItem),
1698 #[serde(rename = "imageView")]
1699 ImageView(ImageViewThreadItem),
1700 #[serde(rename = "sleep")]
1702 Sleep(SleepThreadItem),
1703 #[serde(rename = "imageGeneration")]
1707 ImageGeneration(ImageGenerationThreadItem),
1708 #[serde(rename = "enteredReviewMode")]
1709 EnteredReviewMode(EnteredReviewModeThreadItem),
1710 #[serde(rename = "exitedReviewMode")]
1711 ExitedReviewMode(ExitedReviewModeThreadItem),
1712 #[serde(rename = "contextCompaction")]
1713 ContextCompaction(ContextCompactionThreadItem),
1714 #[serde(untagged)]
1716 Unknown(Value),
1717}
1718
1719#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1727pub struct ThreadResumeParams {
1728 #[serde(rename = "approvalPolicy")]
1729 #[serde(default, skip_serializing_if = "Option::is_none")]
1730 pub approval_policy: Option<AskForApproval>,
1731 #[serde(rename = "approvalsReviewer")]
1733 #[serde(default, skip_serializing_if = "Option::is_none")]
1734 pub approvals_reviewer: Option<ApprovalsReviewer>,
1735 #[serde(rename = "baseInstructions")]
1736 #[serde(default, skip_serializing_if = "Option::is_none")]
1737 pub base_instructions: Option<String>,
1738 #[serde(default, skip_serializing_if = "Option::is_none")]
1739 pub config: Option<BTreeMap<String, Value>>,
1740 #[serde(default, skip_serializing_if = "Option::is_none")]
1741 pub cwd: Option<String>,
1742 #[serde(rename = "developerInstructions")]
1743 #[serde(default, skip_serializing_if = "Option::is_none")]
1744 pub developer_instructions: Option<String>,
1745 #[serde(rename = "excludeTurns")]
1747 #[serde(default, skip_serializing_if = "Option::is_none")]
1748 pub exclude_turns: Option<bool>,
1749 #[serde(default, skip_serializing_if = "Option::is_none")]
1751 pub model: Option<String>,
1752 #[serde(rename = "modelProvider")]
1753 #[serde(default, skip_serializing_if = "Option::is_none")]
1754 pub model_provider: Option<String>,
1755 #[serde(default, skip_serializing_if = "Option::is_none")]
1757 pub personality: Option<Personality>,
1758 #[serde(default, skip_serializing_if = "Option::is_none")]
1759 pub sandbox: Option<SandboxMode>,
1760 #[serde(rename = "serviceTier")]
1761 #[serde(default, skip_serializing_if = "Option::is_none")]
1762 pub service_tier: Option<String>,
1763 #[serde(rename = "threadId")]
1764 pub thread_id: String,
1765}
1766
1767#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1768pub struct ThreadResumeResponse {
1769 #[serde(rename = "approvalPolicy")]
1770 pub approval_policy: AskForApproval,
1771 #[serde(rename = "approvalsReviewer")]
1773 pub approvals_reviewer: ApprovalsReviewer,
1774 #[serde(rename = "collaborationMode")]
1776 #[serde(default, skip_serializing_if = "Option::is_none")]
1777 pub collaboration_mode: Option<CollaborationMode>,
1778 pub cwd: AbsolutePathBuf,
1779 #[serde(rename = "disabledPluginIds")]
1781 #[serde(default, skip_serializing_if = "Option::is_none")]
1782 pub disabled_plugin_ids: Option<Vec<String>>,
1783 #[serde(rename = "instructionSources")]
1785 #[serde(default, skip_serializing_if = "Option::is_none")]
1786 pub instruction_sources: Option<Vec<LegacyAppPathString>>,
1787 #[serde(rename = "itemsBackwardsCursor")]
1791 #[serde(default, skip_serializing_if = "Option::is_none")]
1792 pub items_backwards_cursor: Option<String>,
1793 pub model: String,
1794 #[serde(rename = "modelProvider")]
1795 pub model_provider: String,
1796 #[serde(rename = "reasoningEffort")]
1797 #[serde(default, skip_serializing_if = "Option::is_none")]
1798 pub reasoning_effort: Option<ReasoningEffort>,
1799 pub sandbox: SandboxPolicy,
1801 #[serde(rename = "serviceTier")]
1802 #[serde(default, skip_serializing_if = "Option::is_none")]
1803 pub service_tier: Option<String>,
1804 pub thread: Thread,
1805 #[serde(rename = "turnsBackwardsCursor")]
1809 #[serde(default, skip_serializing_if = "Option::is_none")]
1810 pub turns_backwards_cursor: Option<String>,
1811}
1812
1813#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1815pub struct ThreadSection {
1816 #[serde(default, skip_serializing_if = "Option::is_none")]
1818 pub appearance: Option<ThreadSectionAppearance>,
1819 pub id: String,
1821 pub name: String,
1823}
1824
1825#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1827pub struct ThreadSectionAppearance {
1828 #[serde(default, skip_serializing_if = "Option::is_none")]
1829 pub color: Option<String>,
1830 #[serde(default, skip_serializing_if = "Option::is_none")]
1831 pub icon: Option<String>,
1832}
1833
1834pub type ThreadSource = String;
1835
1836#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1837pub struct ThreadStartParams {
1838 #[serde(rename = "approvalPolicy")]
1839 #[serde(default, skip_serializing_if = "Option::is_none")]
1840 pub approval_policy: Option<AskForApproval>,
1841 #[serde(rename = "approvalsReviewer")]
1843 #[serde(default, skip_serializing_if = "Option::is_none")]
1844 pub approvals_reviewer: Option<ApprovalsReviewer>,
1845 #[serde(rename = "baseInstructions")]
1846 #[serde(default, skip_serializing_if = "Option::is_none")]
1847 pub base_instructions: Option<String>,
1848 #[serde(default, skip_serializing_if = "Option::is_none")]
1849 pub config: Option<BTreeMap<String, Value>>,
1850 #[serde(default, skip_serializing_if = "Option::is_none")]
1851 pub cwd: Option<String>,
1852 #[serde(rename = "developerInstructions")]
1853 #[serde(default, skip_serializing_if = "Option::is_none")]
1854 pub developer_instructions: Option<String>,
1855 #[serde(default, skip_serializing_if = "Option::is_none")]
1856 pub ephemeral: Option<bool>,
1857 #[serde(default, skip_serializing_if = "Option::is_none")]
1858 pub model: Option<String>,
1859 #[serde(rename = "modelProvider")]
1860 #[serde(default, skip_serializing_if = "Option::is_none")]
1861 pub model_provider: Option<String>,
1862 #[serde(default, skip_serializing_if = "Option::is_none")]
1864 pub personality: Option<Personality>,
1865 #[serde(default, skip_serializing_if = "Option::is_none")]
1866 pub sandbox: Option<SandboxMode>,
1867 #[serde(rename = "serviceName")]
1868 #[serde(default, skip_serializing_if = "Option::is_none")]
1869 pub service_name: Option<String>,
1870 #[serde(rename = "serviceTier")]
1871 #[serde(default, skip_serializing_if = "Option::is_none")]
1872 pub service_tier: Option<String>,
1873 #[serde(rename = "sessionStartSource")]
1874 #[serde(default, skip_serializing_if = "Option::is_none")]
1875 pub session_start_source: Option<ThreadStartSource>,
1876 #[serde(rename = "threadSource")]
1878 #[serde(default, skip_serializing_if = "Option::is_none")]
1879 pub thread_source: Option<ThreadSource>,
1880}
1881
1882#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1883pub struct ThreadStartResponse {
1884 #[serde(rename = "approvalPolicy")]
1885 pub approval_policy: AskForApproval,
1886 #[serde(rename = "approvalsReviewer")]
1888 pub approvals_reviewer: ApprovalsReviewer,
1889 pub cwd: AbsolutePathBuf,
1890 #[serde(rename = "disabledPluginIds")]
1892 #[serde(default, skip_serializing_if = "Option::is_none")]
1893 pub disabled_plugin_ids: Option<Vec<String>>,
1894 #[serde(rename = "instructionSources")]
1896 #[serde(default, skip_serializing_if = "Option::is_none")]
1897 pub instruction_sources: Option<Vec<LegacyAppPathString>>,
1898 pub model: String,
1899 #[serde(rename = "modelProvider")]
1900 pub model_provider: String,
1901 #[serde(rename = "reasoningEffort")]
1902 #[serde(default, skip_serializing_if = "Option::is_none")]
1903 pub reasoning_effort: Option<ReasoningEffort>,
1904 pub sandbox: SandboxPolicy,
1906 #[serde(rename = "serviceTier")]
1907 #[serde(default, skip_serializing_if = "Option::is_none")]
1908 pub service_tier: Option<String>,
1909 pub thread: Thread,
1910}
1911
1912#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1913pub enum ThreadStartSource {
1914 #[serde(rename = "startup")]
1915 Startup,
1916 #[serde(rename = "clear")]
1917 Clear,
1918 #[serde(untagged)]
1920 Unknown(Value),
1921}
1922
1923#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1924pub struct ThreadStartedNotification {
1925 pub thread: Thread,
1926}
1927
1928pub type ThreadStatus = Value;
1929
1930#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1931pub struct ThreadTokenUsage {
1932 pub last: TokenUsageBreakdown,
1933 #[serde(rename = "modelContextWindow")]
1934 #[serde(default, skip_serializing_if = "Option::is_none")]
1935 pub model_context_window: Option<i64>,
1936 pub total: TokenUsageBreakdown,
1937}
1938
1939#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1940pub struct ThreadTokenUsageUpdatedNotification {
1941 #[serde(rename = "threadId")]
1942 pub thread_id: String,
1943 #[serde(rename = "tokenUsage")]
1944 pub token_usage: ThreadTokenUsage,
1945 #[serde(rename = "turnId")]
1946 pub turn_id: String,
1947}
1948
1949#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
1950pub struct TokenUsageBreakdown {
1951 #[serde(rename = "cacheWriteInputTokens")]
1952 #[serde(default, skip_serializing_if = "Option::is_none")]
1953 pub cache_write_input_tokens: Option<i64>,
1954 #[serde(rename = "cachedInputTokens")]
1955 pub cached_input_tokens: i64,
1956 #[serde(rename = "inputTokens")]
1957 pub input_tokens: i64,
1958 #[serde(rename = "outputTokens")]
1959 pub output_tokens: i64,
1960 #[serde(rename = "reasoningOutputTokens")]
1961 pub reasoning_output_tokens: i64,
1962 #[serde(rename = "totalTokens")]
1963 pub total_tokens: i64,
1964}
1965
1966#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1967pub struct Turn {
1968 #[serde(rename = "completedAt")]
1970 #[serde(default, skip_serializing_if = "Option::is_none")]
1971 pub completed_at: Option<i64>,
1972 #[serde(rename = "durationMs")]
1974 #[serde(default, skip_serializing_if = "Option::is_none")]
1975 pub duration_ms: Option<i64>,
1976 #[serde(default, skip_serializing_if = "Option::is_none")]
1978 pub error: Option<TurnError>,
1979 pub id: String,
1981 pub items: Vec<ThreadItem>,
1983 #[serde(rename = "itemsView")]
1985 #[serde(default, skip_serializing_if = "Option::is_none")]
1986 pub items_view: Option<TurnItemsView>,
1987 #[serde(rename = "rootTurnId")]
1989 #[serde(default, skip_serializing_if = "Option::is_none")]
1990 pub root_turn_id: Option<String>,
1991 #[serde(rename = "startedAt")]
1993 #[serde(default, skip_serializing_if = "Option::is_none")]
1994 pub started_at: Option<i64>,
1995 pub status: TurnStatus,
1996}
1997
1998#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1999pub struct TurnCompletedNotification {
2000 #[serde(rename = "threadId")]
2001 pub thread_id: String,
2002 pub turn: Turn,
2003}
2004
2005#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
2006pub struct TurnError {
2007 #[serde(rename = "additionalDetails")]
2008 #[serde(default, skip_serializing_if = "Option::is_none")]
2009 pub additional_details: Option<String>,
2010 #[serde(rename = "codexErrorInfo")]
2011 #[serde(default, skip_serializing_if = "Option::is_none")]
2012 pub codex_error_info: Option<CodexErrorInfo>,
2013 pub message: String,
2014 #[serde(default, skip_serializing_if = "Option::is_none")]
2016 pub misalignment: Option<MisalignmentErrorDetails>,
2017}
2018
2019#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
2020pub struct TurnInterruptParams {
2021 #[serde(rename = "threadId")]
2022 pub thread_id: String,
2023 #[serde(rename = "turnId")]
2024 pub turn_id: String,
2025}
2026
2027pub type TurnInterruptResponse = BTreeMap<String, Value>;
2028
2029#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2030pub enum TurnItemsView {
2031 #[serde(rename = "notLoaded")]
2033 NotLoaded,
2034 #[serde(rename = "summary")]
2036 Summary,
2037 #[serde(rename = "full")]
2039 Full,
2040 #[serde(untagged)]
2042 Unknown(Value),
2043}
2044
2045#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
2046pub struct TurnStartParams {
2047 #[serde(rename = "approvalPolicy")]
2049 #[serde(default, skip_serializing_if = "Option::is_none")]
2050 pub approval_policy: Option<AskForApproval>,
2051 #[serde(rename = "approvalsReviewer")]
2053 #[serde(default, skip_serializing_if = "Option::is_none")]
2054 pub approvals_reviewer: Option<ApprovalsReviewer>,
2055 #[serde(rename = "clientUserMessageId")]
2056 #[serde(default, skip_serializing_if = "Option::is_none")]
2057 pub client_user_message_id: Option<String>,
2058 #[serde(default, skip_serializing_if = "Option::is_none")]
2060 pub cwd: Option<String>,
2061 #[serde(rename = "disabledPluginIds")]
2063 #[serde(default, skip_serializing_if = "Option::is_none")]
2064 pub disabled_plugin_ids: Option<Vec<String>>,
2065 #[serde(default, skip_serializing_if = "Option::is_none")]
2067 pub effort: Option<ReasoningEffort>,
2068 pub input: Vec<UserInput>,
2069 #[serde(default, skip_serializing_if = "Option::is_none")]
2071 pub model: Option<String>,
2072 #[serde(rename = "outputSchema")]
2074 #[serde(default, skip_serializing_if = "Option::is_none")]
2075 pub output_schema: Option<Value>,
2076 #[serde(rename = "parentTurnId")]
2080 #[serde(default, skip_serializing_if = "Option::is_none")]
2081 pub parent_turn_id: Option<String>,
2082 #[serde(default, skip_serializing_if = "Option::is_none")]
2084 pub personality: Option<Personality>,
2085 #[serde(rename = "rootTurnId")]
2089 #[serde(default, skip_serializing_if = "Option::is_none")]
2090 pub root_turn_id: Option<String>,
2091 #[serde(rename = "sandboxPolicy")]
2093 #[serde(default, skip_serializing_if = "Option::is_none")]
2094 pub sandbox_policy: Option<SandboxPolicy>,
2095 #[serde(rename = "serviceTier")]
2097 #[serde(default, skip_serializing_if = "Option::is_none")]
2098 pub service_tier: Option<String>,
2099 #[serde(rename = "serviceTierForTurn")]
2101 #[serde(default, skip_serializing_if = "Option::is_none")]
2102 pub service_tier_for_turn: Option<String>,
2103 #[serde(default, skip_serializing_if = "Option::is_none")]
2105 pub summary: Option<ReasoningSummary>,
2106 #[serde(rename = "threadId")]
2107 pub thread_id: String,
2108 #[serde(rename = "toolOutput")]
2109 #[serde(default, skip_serializing_if = "Option::is_none")]
2110 pub tool_output: Option<TurnToolOutput>,
2111 #[serde(rename = "turnTrigger")]
2113 #[serde(default, skip_serializing_if = "Option::is_none")]
2114 pub turn_trigger: Option<String>,
2115}
2116
2117#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2118pub struct TurnStartResponse {
2119 pub turn: Turn,
2120}
2121
2122#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2123pub struct TurnStartedNotification {
2124 #[serde(rename = "threadId")]
2125 pub thread_id: String,
2126 pub turn: Turn,
2127}
2128
2129#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2130pub enum TurnStatus {
2131 #[serde(rename = "completed")]
2132 Completed,
2133 #[serde(rename = "interrupted")]
2134 Interrupted,
2135 #[serde(rename = "failed")]
2136 Failed,
2137 #[serde(rename = "inProgress")]
2138 InProgress,
2139 #[serde(untagged)]
2141 Unknown(Value),
2142}
2143
2144#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2145pub struct TurnToolOutput {
2146 pub name: String,
2147 #[serde(default, skip_serializing_if = "Option::is_none")]
2148 pub namespace: Option<String>,
2149 pub output: FunctionCallOutputBody,
2150 #[serde(default, skip_serializing_if = "Option::is_none")]
2152 pub retain: Option<bool>,
2153}
2154
2155#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
2156pub struct UpdatePatchChangeKind {
2157 #[serde(default, skip_serializing_if = "Option::is_none")]
2158 pub move_path: Option<String>,
2159}
2160
2161#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
2162pub struct UsageLimitExceededImageGenerationFailure {
2163 #[serde(rename = "limitId")]
2164 pub limit_id: String,
2165 #[serde(rename = "resetsAt")]
2166 #[serde(default, skip_serializing_if = "Option::is_none")]
2167 pub resets_at: Option<i64>,
2168}
2169
2170#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2171#[serde(tag = "type")]
2172pub enum UserInput {
2173 #[serde(rename = "text")]
2174 Text(TextUserInput),
2175 #[serde(rename = "image")]
2176 Image(ImageUserInput),
2177 #[serde(rename = "localImage")]
2178 LocalImage(LocalImageUserInput),
2179 #[serde(rename = "audio")]
2180 Audio(AudioUserInput),
2181 #[serde(rename = "localAudio")]
2182 LocalAudio(LocalAudioUserInput),
2183 #[serde(rename = "skill")]
2184 Skill(SkillUserInput),
2185 #[serde(rename = "mention")]
2186 Mention(MentionUserInput),
2187 #[serde(untagged)]
2189 Unknown(Value),
2190}
2191
2192#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
2193pub struct UserMessageThreadItem {
2194 #[serde(rename = "clientId")]
2195 #[serde(default, skip_serializing_if = "Option::is_none")]
2196 pub client_id: Option<String>,
2197 #[serde(rename = "completedAtMs")]
2199 #[serde(default, skip_serializing_if = "Option::is_none")]
2200 pub completed_at_ms: Option<i64>,
2201 pub content: Vec<UserInput>,
2202 pub id: String,
2203 #[serde(rename = "startedAtMs")]
2205 #[serde(default, skip_serializing_if = "Option::is_none")]
2206 pub started_at_ms: Option<i64>,
2207}
2208
2209pub type WebSearchAction = Value;
2210
2211#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
2212pub struct WebSearchThreadItem {
2213 #[serde(default, skip_serializing_if = "Option::is_none")]
2214 pub action: Option<WebSearchAction>,
2215 #[serde(rename = "completedAtMs")]
2217 #[serde(default, skip_serializing_if = "Option::is_none")]
2218 pub completed_at_ms: Option<i64>,
2219 pub id: String,
2220 pub query: String,
2221 #[serde(default, skip_serializing_if = "Option::is_none")]
2225 pub results: Option<Vec<Value>>,
2226 #[serde(rename = "startedAtMs")]
2228 #[serde(default, skip_serializing_if = "Option::is_none")]
2229 pub started_at_ms: Option<i64>,
2230}