diff --git a/crates/agent_servers/src/codex.rs b/crates/agent_servers/src/codex.rs index 0a19cfd03214972e9c7cd62aee713f3689d525df..3b2b4171de8c0fa17e076761ab36ab03b0f2ac5f 100644 --- a/crates/agent_servers/src/codex.rs +++ b/crates/agent_servers/src/codex.rs @@ -1,11 +1,16 @@ use std::rc::Rc; +use std::sync::Arc; use std::{any::Any, path::Path}; -use crate::{AgentServer, AgentServerDelegate, load_proxy_env}; use acp_thread::AgentConnection; +use agent_client_protocol as acp; use anyhow::{Context as _, Result}; -use gpui::{App, SharedString, Task}; -use project::agent_server_store::CODEX_NAME; +use fs::Fs; +use gpui::{App, AppContext as _, SharedString, Task}; +use project::agent_server_store::{AllAgentServersSettings, CODEX_NAME}; +use settings::{SettingsStore, update_settings_file}; + +use crate::{AgentServer, AgentServerDelegate, load_proxy_env}; #[derive(Clone)] pub struct Codex; @@ -30,6 +35,27 @@ impl AgentServer for Codex { ui::IconName::AiOpenAi } + fn default_mode(&self, cx: &mut App) -> Option { + let settings = cx.read_global(|settings: &SettingsStore, _| { + settings.get::(None).codex.clone() + }); + + settings + .as_ref() + .and_then(|s| s.default_mode.clone().map(|m| acp::SessionModeId(m.into()))) + } + + fn set_default_mode(&self, mode_id: Option, fs: Arc, cx: &mut App) { + update_settings_file(fs, cx, |settings, _| { + settings + .agent_servers + .get_or_insert_default() + .codex + .get_or_insert_default() + .default_mode = mode_id.map(|m| m.to_string()) + }); + } + fn connect( &self, root_dir: Option<&Path>,