codex: trim multi-agent version plumbing

This commit is contained in:
Ahmed Ibrahim
2026-06-01 13:13:17 -07:00
parent 3f82d5bd99
commit 6b8fdbdf70
18 changed files with 91 additions and 229 deletions
-99
View File
@@ -48,105 +48,6 @@ mod tests {
use crate::ListTurnsParams;
use crate::SortDirection;
use crate::StoredTurnItemsView;
use crate::ThreadEventPersistenceMode;
use crate::ThreadPersistenceMetadata;
use codex_protocol::models::BaseInstructions;
use codex_protocol::protocol::SessionSource;
use pretty_assertions::assert_eq;
#[tokio::test]
async fn create_thread_records_multi_agent_version() {
let store = InMemoryThreadStore::default();
let thread_id = ThreadId::new();
store
.create_thread(CreateThreadParams {
thread_id,
forked_from_id: None,
source: SessionSource::Exec,
thread_source: None,
base_instructions: BaseInstructions::default(),
dynamic_tools: Vec::new(),
multi_agent_version: Some(MultiAgentVersion::V2),
metadata: ThreadPersistenceMetadata {
cwd: None,
model_provider: "test-provider".to_string(),
memory_mode: ThreadMemoryMode::Enabled,
},
event_persistence_mode: ThreadEventPersistenceMode::Limited,
})
.await
.expect("create thread should succeed");
let history = store
.load_history(LoadThreadHistoryParams {
thread_id,
include_archived: true,
})
.await
.expect("created history should load");
let versions = history
.items
.into_iter()
.filter_map(|item| match item {
RolloutItem::SessionMeta(meta_line) => meta_line.meta.multi_agent_version,
_ => None,
})
.collect::<Vec<_>>();
assert_eq!(versions, vec![MultiAgentVersion::V2]);
}
#[tokio::test]
async fn concurrent_multi_agent_version_seeds_return_the_first_winner() {
let store = InMemoryThreadStore::default();
let thread_id = ThreadId::new();
store.state.lock().await.histories.insert(
thread_id,
vec![RolloutItem::SessionMeta(SessionMetaLine {
meta: SessionMeta {
id: thread_id,
..SessionMeta::default()
},
git: None,
})],
);
let (left, right) = tokio::join!(
store.set_multi_agent_version_if_unset(SetMultiAgentVersionIfUnsetParams {
thread_id,
multi_agent_version: MultiAgentVersion::V1,
include_archived: true,
}),
store.set_multi_agent_version_if_unset(SetMultiAgentVersionIfUnsetParams {
thread_id,
multi_agent_version: MultiAgentVersion::V2,
include_archived: true,
}),
);
let left = left.expect("first seed should succeed");
let right = right.expect("second seed should return the stored winner");
assert_eq!(left, right);
assert!(matches!(
left,
MultiAgentVersion::V1 | MultiAgentVersion::V2
));
let history = store
.load_history(LoadThreadHistoryParams {
thread_id,
include_archived: true,
})
.await
.expect("seeded history should load");
let versions = history
.items
.into_iter()
.filter_map(|item| match item {
RolloutItem::SessionMeta(meta_line) => meta_line.meta.multi_agent_version,
_ => None,
})
.collect::<Vec<_>>();
assert_eq!(versions, vec![left]);
}
#[tokio::test]
async fn default_turn_pagination_methods_return_unsupported() {
+2 -3
View File
@@ -21,7 +21,6 @@ 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;
@@ -60,7 +59,7 @@ use codex_protocol::protocol::MultiAgentVersion;
pub struct LocalThreadStore {
pub(super) config: LocalThreadStoreConfig,
live_recorders: Arc<Mutex<HashMap<ThreadId, RolloutRecorder>>>,
multi_agent_version_seed_lock: Arc<Semaphore>,
multi_agent_version_seed_lock: Arc<Mutex<()>>,
state_db: Option<StateDbHandle>,
}
@@ -100,7 +99,7 @@ impl LocalThreadStore {
Self {
config,
live_recorders: Arc::new(Mutex::new(HashMap::new())),
multi_agent_version_seed_lock: Arc::new(Semaphore::new(/*permits*/ 1)),
multi_agent_version_seed_lock: Arc::new(Mutex::new(())),
state_db,
}
}
@@ -16,13 +16,7 @@ pub(super) async fn set_multi_agent_version_if_unset(
store: &LocalThreadStore,
params: SetMultiAgentVersionIfUnsetParams,
) -> ThreadStoreResult<MultiAgentVersion> {
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 _guard = store.multi_agent_version_seed_lock.lock().await;
let has_live_writer = live_writer::rollout_path(store, params.thread_id)
.await
.is_ok();
@@ -63,14 +57,6 @@ pub(super) async fn set_multi_agent_version_if_unset(
.map_err(|err| ThreadStoreError::Internal {
message: format!("failed to set thread multi-agent version: {err}"),
})?;
if session_meta.meta.id != params.thread_id {
return Err(ThreadStoreError::Internal {
message: format!(
"failed to set thread multi-agent version: rollout session metadata id mismatch: expected {}, found {}",
params.thread_id, session_meta.meta.id
),
});
}
session_meta.git = None;
session_meta.meta.multi_agent_version = Some(params.multi_agent_version);
let item = RolloutItem::SessionMeta(session_meta);