thread-store/src/local/create_thread.rs
45 lines
use super::LocalThreadStore;use crate::CreateThreadParams;use crate::ThreadStoreError;use crate::ThreadStoreResult;use codex_protocol::protocol::ThreadMemoryMode;use codex_rollout::RolloutConfig;use codex_rollout::RolloutRecorder;use codex_rollout::RolloutRecorderParams;pub(super) async fn create_thread( store: &LocalThreadStore, params: CreateThreadParams,) -> ThreadStoreResult<RolloutRecorder> { let cwd = params .metadata .cwd .clone() .ok_or_else(|| ThreadStoreError::InvalidRequest { message: "local thread store requires a cwd".to_string(), })?; let config = RolloutConfig { codex_home: store.config.codex_home.clone(), sqlite_home: store.config.sqlite_home.clone(), cwd, model_provider_id: params.metadata.model_provider.clone(), generate_memories: matches!(params.metadata.memory_mode, ThreadMemoryMode::Enabled), }; RolloutRecorder::new( &config, RolloutRecorderParams::new( params.thread_id, params.forked_from_id, params.parent_thread_id, params.source, params.thread_source, params.base_instructions, params.dynamic_tools, ) .with_multi_agent_version(params.multi_agent_version), ) .await .map_err(|err| ThreadStoreError::Internal { message: format!("failed to initialize local thread recorder: {err}"), })}