diff --git a/codex-rs/core/src/agent/control_tests.rs b/codex-rs/core/src/agent/control_tests.rs index 54693228fa..4a5b675f5c 100644 --- a/codex-rs/core/src/agent/control_tests.rs +++ b/codex-rs/core/src/agent/control_tests.rs @@ -651,6 +651,14 @@ async fn spawn_agent_can_fork_parent_thread_history_with_sanitized_items() { .await .expect("child thread should be registered"); assert_ne!(child_thread_id, parent_thread_id); + assert_eq!( + child_thread.codex.session.prompt_cache_key(), + parent_thread.codex.session.prompt_cache_key(), + ); + assert!(Arc::ptr_eq( + &child_thread.codex.session.services.mcp_connection_manager, + &parent_thread.codex.session.services.mcp_connection_manager, + )); let history = child_thread.codex.session.clone_history().await; let expected_history = [ ResponseItem::Message { diff --git a/codex-rs/core/src/client_tests.rs b/codex-rs/core/src/client_tests.rs index 2fd5f04f95..f9c5607dd1 100644 --- a/codex-rs/core/src/client_tests.rs +++ b/codex-rs/core/src/client_tests.rs @@ -20,11 +20,13 @@ use pretty_assertions::assert_eq; use serde_json::json; fn test_model_client(session_source: SessionSource) -> ModelClient { + let conversation_id = ThreadId::new(); let provider = create_oss_provider_with_base_url("https://example.com/v1", WireApi::Responses); ModelClient::new( /*auth_manager*/ None, - ThreadId::new(), + conversation_id, /*installation_id*/ "11111111-1111-4111-8111-111111111111".to_string(), + conversation_id, provider, session_source, /*model_verbosity*/ None, diff --git a/codex-rs/core/src/codex_tests.rs b/codex-rs/core/src/codex_tests.rs index 6a8c81628c..f46a1f4a72 100644 --- a/codex-rs/core/src/codex_tests.rs +++ b/codex-rs/core/src/codex_tests.rs @@ -251,11 +251,13 @@ async fn interrupting_regular_turn_waiting_on_startup_prewarm_emits_turn_aborted } fn test_model_client_session() -> crate::client::ModelClientSession { + let thread_id = ThreadId::try_from("00000000-0000-4000-8000-000000000001") + .expect("test thread id should be valid"); crate::client::ModelClient::new( /*auth_manager*/ None, - ThreadId::try_from("00000000-0000-4000-8000-000000000001") - .expect("test thread id should be valid"), + thread_id, /*installation_id*/ "11111111-1111-4111-8111-111111111111".to_string(), + thread_id, ModelProviderInfo::create_openai_provider(/* base_url */ /*base_url*/ None), codex_protocol::protocol::SessionSource::Exec, /*model_verbosity*/ None, @@ -1872,6 +1874,7 @@ async fn set_rate_limits_retains_previous_credits() { app_server_client_name: None, app_server_client_version: None, session_source: SessionSource::Exec, + prompt_cache_key: None, dynamic_tools: Vec::new(), persist_extended_history: false, inherited_shell_snapshot: None, @@ -1975,6 +1978,7 @@ async fn set_rate_limits_updates_plan_type_when_present() { app_server_client_name: None, app_server_client_version: None, session_source: SessionSource::Exec, + prompt_cache_key: None, dynamic_tools: Vec::new(), persist_extended_history: false, inherited_shell_snapshot: None, @@ -2325,6 +2329,7 @@ pub(crate) async fn make_session_configuration_for_tests() -> SessionConfigurati app_server_client_name: None, app_server_client_version: None, session_source: SessionSource::Exec, + prompt_cache_key: None, dynamic_tools: Vec::new(), persist_extended_history: false, inherited_shell_snapshot: None, @@ -2589,6 +2594,7 @@ async fn session_new_fails_when_zsh_fork_enabled_without_zsh_path() { app_server_client_name: None, app_server_client_version: None, session_source: SessionSource::Exec, + prompt_cache_key: None, dynamic_tools: Vec::new(), persist_extended_history: false, inherited_shell_snapshot: None, @@ -2693,6 +2699,7 @@ pub(crate) async fn make_session_and_context() -> (Session, TurnContext) { app_server_client_name: None, app_server_client_version: None, session_source: SessionSource::Exec, + prompt_cache_key: None, dynamic_tools: Vec::new(), persist_extended_history: false, inherited_shell_snapshot: None, @@ -2766,6 +2773,7 @@ pub(crate) async fn make_session_and_context() -> (Session, TurnContext) { Some(auth_manager.clone()), conversation_id, /*installation_id*/ "11111111-1111-4111-8111-111111111111".to_string(), + conversation_id, session_configuration.provider.clone(), session_configuration.session_source.clone(), config.model_verbosity, @@ -3535,6 +3543,7 @@ pub(crate) async fn make_session_and_context_with_dynamic_tools_and_rx( app_server_client_name: None, app_server_client_version: None, session_source: SessionSource::Exec, + prompt_cache_key: None, dynamic_tools, persist_extended_history: false, inherited_shell_snapshot: None, @@ -3608,6 +3617,7 @@ pub(crate) async fn make_session_and_context_with_dynamic_tools_and_rx( Some(Arc::clone(&auth_manager)), conversation_id, /*installation_id*/ "11111111-1111-4111-8111-111111111111".to_string(), + conversation_id, session_configuration.provider.clone(), session_configuration.session_source.clone(), config.model_verbosity, diff --git a/codex-rs/core/tests/responses_headers.rs b/codex-rs/core/tests/responses_headers.rs index 03870beab2..88099262ad 100644 --- a/codex-rs/core/tests/responses_headers.rs +++ b/codex-rs/core/tests/responses_headers.rs @@ -101,6 +101,7 @@ async fn responses_stream_includes_subagent_header_on_review() { /*auth_manager*/ None, conversation_id, /*installation_id*/ TEST_INSTALLATION_ID.to_string(), + conversation_id, provider.clone(), session_source, config.model_verbosity, @@ -226,6 +227,7 @@ async fn responses_stream_includes_subagent_header_on_other() { /*auth_manager*/ None, conversation_id, /*installation_id*/ TEST_INSTALLATION_ID.to_string(), + conversation_id, provider.clone(), session_source, config.model_verbosity, @@ -340,6 +342,7 @@ async fn responses_respects_model_info_overrides_from_config() { /*auth_manager*/ None, conversation_id, /*installation_id*/ TEST_INSTALLATION_ID.to_string(), + conversation_id, provider.clone(), session_source, config.model_verbosity, diff --git a/codex-rs/core/tests/suite/client.rs b/codex-rs/core/tests/suite/client.rs index 5200d252c4..02a7203fae 100644 --- a/codex-rs/core/tests/suite/client.rs +++ b/codex-rs/core/tests/suite/client.rs @@ -879,6 +879,7 @@ async fn send_provider_auth_request(server: &MockServer, auth: ModelProviderAuth ))), conversation_id, /*installation_id*/ "11111111-1111-4111-8111-111111111111".to_string(), + conversation_id, provider, SessionSource::Exec, config.model_verbosity, @@ -2157,6 +2158,7 @@ async fn azure_responses_request_includes_store_and_reasoning_ids() { /*auth_manager*/ None, conversation_id, /*installation_id*/ "11111111-1111-4111-8111-111111111111".to_string(), + conversation_id, provider.clone(), SessionSource::Exec, config.model_verbosity, diff --git a/codex-rs/core/tests/suite/client_websockets.rs b/codex-rs/core/tests/suite/client_websockets.rs index 9a76638f67..1a0c665fc6 100755 --- a/codex-rs/core/tests/suite/client_websockets.rs +++ b/codex-rs/core/tests/suite/client_websockets.rs @@ -1762,6 +1762,7 @@ async fn websocket_harness_with_provider_options( /*auth_manager*/ None, conversation_id, /*installation_id*/ TEST_INSTALLATION_ID.to_string(), + conversation_id, provider.clone(), SessionSource::Exec, config.model_verbosity,