use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::secret::SecretStoreInfo;
use super::session::SessionOptionsSnapshot;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConfigurationSnapshot {
pub provider: String,
pub model: String,
pub authenticated: bool,
pub credential_setup_command: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sandbox: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub context_window: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shared_ui: Option<SharedUiPreferences>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub secret_store: Option<SecretStoreInfo>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub session_options: Option<SessionOptionsSnapshot>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ConfigTarget {
User,
Workspace,
Project,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConfigSetting {
pub path: String,
pub value: Value,
pub origin: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub default_value: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default)]
pub options: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub group: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub group_description: Option<String>,
#[serde(default = "config_setting_editable_default")]
pub editable: bool,
}
const fn config_setting_editable_default() -> bool {
true
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConfigTargetVersion {
pub target: ConfigTarget,
pub version: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConfigSettingsSnapshot {
pub settings: Vec<ConfigSetting>,
pub target_versions: Vec<ConfigTargetVersion>,
pub omitted_sensitive: usize,
pub omitted_large: usize,
pub omitted_limit: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ConfigSettingsWriteParams {
pub target: ConfigTarget,
pub path: String,
pub value: Value,
pub expected_layer_version: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConfigSettingsWriteResult {
pub target: ConfigTarget,
pub path: String,
pub written_layer_version: String,
pub overridden: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ConfigOpenFileParams {
pub target: ConfigTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SharedUiPreferences {
pub theme: String,
#[serde(default)]
pub shortcuts: std::collections::BTreeMap<String, Vec<String>>,
#[serde(default)]
pub shortcut_warnings: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelInfo {
pub provider: String,
pub id: String,
pub display_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub context_window: Option<u64>,
#[serde(default)]
pub current: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub recommended_rank: Option<u8>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub capabilities: Option<ModelCapabilities>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelCapabilities {
#[serde(default)]
pub reasoning: bool,
#[serde(default)]
pub vision: bool,
#[serde(default)]
pub tool_call: bool,
#[serde(default)]
pub structured_output: bool,
#[serde(default)]
pub is_pro: bool,
#[serde(default)]
pub input_modalities: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelSelectParams {
pub provider: String,
pub model: String,
}