From 745307ad08e7f3fe89095a9da3115bdd5fc19f41 Mon Sep 17 00:00:00 2001 From: Ahmed Ibrahim Date: Sat, 30 May 2026 20:18:55 -0700 Subject: [PATCH] codex: fix multi-agent version CI failures --- codex-rs/core/src/session/turn_context.rs | 1 + codex-rs/protocol/src/protocol.rs | 4 +++- codex-rs/thread-store/src/local/mod.rs | 5 +++-- .../thread-store/src/local/set_multi_agent_version.rs | 8 +++++++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/codex-rs/core/src/session/turn_context.rs b/codex-rs/core/src/session/turn_context.rs index 28fb51150d..11145a93c7 100644 --- a/codex-rs/core/src/session/turn_context.rs +++ b/codex-rs/core/src/session/turn_context.rs @@ -248,6 +248,7 @@ impl TurnContext { compact_prompt: self.compact_prompt.clone(), user_instructions: self.user_instructions.clone(), collaboration_mode, + multi_agent_version: self.multi_agent_version, personality: self.personality, approval_policy: self.approval_policy.clone(), permission_profile: self.permission_profile.clone(), diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index d7a040de01..4d3f7b8bc5 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -2459,7 +2459,9 @@ impl InitialHistory { InitialHistory::Resumed(resumed) => { multi_agent_version_from_items(&resumed.history, Some(resumed.conversation_id)) } - InitialHistory::Forked(items) => multi_agent_version_from_items(items, None), + InitialHistory::Forked(items) => { + multi_agent_version_from_items(items, /*thread_id*/ None) + } } } diff --git a/codex-rs/thread-store/src/local/mod.rs b/codex-rs/thread-store/src/local/mod.rs index aa2a9819d6..445641931e 100644 --- a/codex-rs/thread-store/src/local/mod.rs +++ b/codex-rs/thread-store/src/local/mod.rs @@ -21,6 +21,7 @@ use std::collections::hash_map::Entry; use std::path::PathBuf; use std::sync::Arc; use tokio::sync::Mutex; +use tokio::sync::Semaphore; use crate::AppendThreadItemsParams; use crate::ArchiveThreadParams; @@ -59,7 +60,7 @@ use codex_protocol::protocol::MultiAgentVersion; pub struct LocalThreadStore { pub(super) config: LocalThreadStoreConfig, live_recorders: Arc>>, - multi_agent_version_seed_lock: Arc>, + multi_agent_version_seed_lock: Arc, state_db: Option, } @@ -99,7 +100,7 @@ impl LocalThreadStore { Self { config, live_recorders: Arc::new(Mutex::new(HashMap::new())), - multi_agent_version_seed_lock: Arc::new(Mutex::new(())), + multi_agent_version_seed_lock: Arc::new(Semaphore::new(/*permits*/ 1)), state_db, } } diff --git a/codex-rs/thread-store/src/local/set_multi_agent_version.rs b/codex-rs/thread-store/src/local/set_multi_agent_version.rs index ee2711c569..2c5cf42f0a 100644 --- a/codex-rs/thread-store/src/local/set_multi_agent_version.rs +++ b/codex-rs/thread-store/src/local/set_multi_agent_version.rs @@ -16,7 +16,13 @@ pub(super) async fn set_multi_agent_version_if_unset( store: &LocalThreadStore, params: SetMultiAgentVersionIfUnsetParams, ) -> ThreadStoreResult { - let _guard = store.multi_agent_version_seed_lock.lock().await; + let _permit = store + .multi_agent_version_seed_lock + .acquire() + .await + .map_err(|err| ThreadStoreError::Internal { + message: format!("failed to lock thread multi-agent version seed: {err}"), + })?; let has_live_writer = live_writer::rollout_path(store, params.thread_id) .await .is_ok();