From 06e1db54a75342790f9ef8f737ad4df4e192f413 Mon Sep 17 00:00:00 2001 From: Bennet Fenner Date: Sat, 25 Oct 2025 21:19:57 +0200 Subject: [PATCH] codex: Delete older versions after installing new one (#41191) Release Notes: - codex: Fixed an issue where downloading a new version would not delete older versions --- crates/agent_servers/src/codex.rs | 2 -- crates/project/src/agent_server_store.rs | 9 ++++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/agent_servers/src/codex.rs b/crates/agent_servers/src/codex.rs index 3b2b4171de8c0fa17e076761ab36ab03b0f2ac5f..1b287063e5dc4363b6a1818434fc43285749b737 100644 --- a/crates/agent_servers/src/codex.rs +++ b/crates/agent_servers/src/codex.rs @@ -79,8 +79,6 @@ impl AgentServer for Codex { root_dir.as_deref(), extra_env, delegate.status_tx, - // For now, report that there are no updates. - // (A future PR will use the GitHub Releases API to fetch them.) delegate.new_version_available, &mut cx.to_async(), )) diff --git a/crates/project/src/agent_server_store.rs b/crates/project/src/agent_server_store.rs index 8a950d2820c123b302cac23fd309df40528a3837..29060fa9448bae4f0be4b2929196da3c3d2951db 100644 --- a/crates/project/src/agent_server_store.rs +++ b/crates/project/src/agent_server_store.rs @@ -1212,7 +1212,7 @@ impl ExternalAgentServer for LocalCodex { &mut self, root_dir: Option<&str>, extra_env: HashMap, - _status_tx: Option>, + status_tx: Option>, _new_version_available_tx: Option>>, cx: &mut AsyncApp, ) -> Task)>> { @@ -1261,6 +1261,10 @@ impl ExternalAgentServer for LocalCodex { let version_dir = dir.join(&release.tag_name); if !fs.is_dir(&version_dir).await { + if let Some(mut status_tx) = status_tx { + status_tx.send("Installing…".into()).ok(); + } + let tag = release.tag_name.clone(); let version_number = tag.trim_start_matches('v'); let asset_name = asset_name(version_number) @@ -1287,6 +1291,9 @@ impl ExternalAgentServer for LocalCodex { }, ) .await?; + + // remove older versions + util::fs::remove_matching(&dir, |entry| entry != version_dir).await; } let bin_name = if cfg!(windows) {