1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use super::secret::SecretStoreInfo;
7use super::session::SessionOptionsSnapshot;
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct ConfigurationSnapshot {
13 pub provider: String,
15 pub model: String,
17 pub authenticated: bool,
19 pub credential_setup_command: String,
21 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub sandbox: Option<String>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub context_window: Option<u64>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub shared_ui: Option<SharedUiPreferences>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub secret_store: Option<SecretStoreInfo>,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub session_options: Option<SessionOptionsSnapshot>,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41#[serde(rename_all = "snake_case")]
42pub enum ConfigTarget {
43 User,
45 Workspace,
47 Project,
49}
50
51#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53#[serde(rename_all = "camelCase")]
54pub struct ConfigSetting {
55 pub path: String,
57 pub value: Value,
59 pub origin: Option<String>,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub label: Option<String>,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub type_name: Option<String>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub default_value: Option<String>,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
72 pub description: Option<String>,
73 #[serde(default)]
75 pub options: Vec<String>,
76 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub group: Option<String>,
79 #[serde(default, skip_serializing_if = "Option::is_none")]
81 pub group_description: Option<String>,
82 #[serde(default = "config_setting_editable_default")]
84 pub editable: bool,
85}
86
87const fn config_setting_editable_default() -> bool {
88 true
89}
90
91#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
93#[serde(rename_all = "camelCase")]
94pub struct ConfigTargetVersion {
95 pub target: ConfigTarget,
97 pub version: Option<String>,
99}
100
101#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
103#[serde(rename_all = "camelCase")]
104pub struct ConfigSettingsSnapshot {
105 pub settings: Vec<ConfigSetting>,
107 pub target_versions: Vec<ConfigTargetVersion>,
109 pub omitted_sensitive: usize,
111 pub omitted_large: usize,
113 pub omitted_limit: usize,
115}
116
117#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
119#[serde(rename_all = "camelCase", deny_unknown_fields)]
120pub struct ConfigSettingsWriteParams {
121 pub target: ConfigTarget,
123 pub path: String,
125 pub value: Value,
127 pub expected_layer_version: Option<String>,
129}
130
131#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
133#[serde(rename_all = "camelCase")]
134pub struct ConfigSettingsWriteResult {
135 pub target: ConfigTarget,
137 pub path: String,
139 pub written_layer_version: String,
141 pub overridden: bool,
143}
144
145#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
147#[serde(rename_all = "camelCase", deny_unknown_fields)]
148pub struct ConfigOpenFileParams {
149 pub target: ConfigTarget,
151}
152
153#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
155#[serde(rename_all = "camelCase")]
156pub struct SharedUiPreferences {
157 pub theme: String,
159 #[serde(default)]
161 pub shortcuts: std::collections::BTreeMap<String, Vec<String>>,
162 #[serde(default)]
164 pub shortcut_warnings: Vec<String>,
165}
166
167#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
169#[serde(rename_all = "camelCase")]
170pub struct ModelInfo {
171 pub provider: String,
173 pub id: String,
175 pub display_name: String,
177 #[serde(default, skip_serializing_if = "Option::is_none")]
179 pub context_window: Option<u64>,
180 #[serde(default)]
182 pub current: bool,
183 #[serde(default, skip_serializing_if = "Option::is_none")]
185 pub recommended_rank: Option<u8>,
186 #[serde(default, skip_serializing_if = "Option::is_none")]
188 pub capabilities: Option<ModelCapabilities>,
189}
190
191#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
193#[serde(rename_all = "camelCase")]
194pub struct ModelCapabilities {
195 #[serde(default)]
197 pub reasoning: bool,
198 #[serde(default)]
200 pub vision: bool,
201 #[serde(default)]
203 pub tool_call: bool,
204 #[serde(default)]
206 pub structured_output: bool,
207 #[serde(default)]
209 pub is_pro: bool,
210 #[serde(default)]
212 pub input_modalities: Vec<String>,
213}
214
215#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
217#[serde(rename_all = "camelCase")]
218pub struct ModelSelectParams {
219 pub provider: String,
221 pub model: String,
223}