1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
5pub enum ApprovalMode {
6 #[serde(rename = "never")]
8 Never,
9 #[serde(rename = "on-request")]
11 OnRequest,
12 #[serde(rename = "on-failure")]
14 OnFailure,
15 #[serde(rename = "untrusted")]
17 Untrusted,
18}
19
20#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
22pub enum SandboxMode {
23 #[serde(rename = "read-only")]
25 ReadOnly,
26 #[serde(rename = "workspace-write")]
28 WorkspaceWrite,
29 #[serde(rename = "danger-full-access")]
31 DangerFullAccess,
32}
33
34#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
36pub enum ModelReasoningEffort {
37 #[serde(rename = "minimal")]
39 Minimal,
40 #[serde(rename = "low")]
42 Low,
43 #[serde(rename = "medium")]
45 Medium,
46 #[serde(rename = "high")]
48 High,
49 #[serde(rename = "xhigh")]
51 XHigh,
52}
53
54#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
56pub enum WebSearchMode {
57 #[serde(rename = "disabled")]
59 Disabled,
60 #[serde(rename = "cached")]
62 Cached,
63 #[serde(rename = "live")]
65 Live,
66}
67
68#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
70pub struct ThreadOptions {
71 pub model: Option<String>,
73 pub sandbox_mode: Option<SandboxMode>,
75 pub working_directory: Option<String>,
77 pub skip_git_repo_check: Option<bool>,
79 pub model_reasoning_effort: Option<ModelReasoningEffort>,
81 pub network_access_enabled: Option<bool>,
83 pub web_search_mode: Option<WebSearchMode>,
85 pub web_search_enabled: Option<bool>,
87 pub approval_policy: Option<ApprovalMode>,
89 pub additional_directories: Option<Vec<String>>,
91}