@@ -38,6 +38,7 @@ use core_test_support::responses::sse_failed;
3838use core_test_support:: responses:: start_mock_server;
3939use pretty_assertions:: assert_eq;
4040use serde_json:: json;
41+ use wiremock:: MockServer ;
4142// --- Test helpers -----------------------------------------------------------
4243
4344pub ( super ) const FIRST_REPLY : & str = "FIRST_REPLY" ;
@@ -100,6 +101,13 @@ fn json_fragment(text: &str) -> String {
100101 . to_string ( )
101102}
102103
104+ fn non_openai_model_provider ( server : & MockServer ) -> ModelProviderInfo {
105+ let mut provider = built_in_model_providers ( ) [ "openai" ] . clone ( ) ;
106+ provider. name = "OpenAI (test)" . into ( ) ;
107+ provider. base_url = Some ( format ! ( "{}/v1" , server. uri( ) ) ) ;
108+ provider
109+ }
110+
103111#[ tokio:: test( flavor = "multi_thread" , worker_threads = 2 ) ]
104112async fn summarize_context_three_requests_and_instructions ( ) {
105113 skip_if_no_network ! ( ) ;
@@ -127,10 +135,7 @@ async fn summarize_context_three_requests_and_instructions() {
127135 let request_log = mount_sse_sequence ( & server, vec ! [ sse1, sse2, sse3] ) . await ;
128136
129137 // Build config pointing to the mock server and spawn Codex.
130- let model_provider = ModelProviderInfo {
131- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
132- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
133- } ;
138+ let model_provider = non_openai_model_provider ( & server) ;
134139 let home = TempDir :: new ( ) . unwrap ( ) ;
135140 let mut config = load_default_config_for_test ( & home) ;
136141 config. model_provider = model_provider;
@@ -324,10 +329,7 @@ async fn manual_compact_uses_custom_prompt() {
324329
325330 let custom_prompt = "Use this compact prompt instead" ;
326331
327- let model_provider = ModelProviderInfo {
328- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
329- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
330- } ;
332+ let model_provider = non_openai_model_provider ( & server) ;
331333 let home = TempDir :: new ( ) . unwrap ( ) ;
332334 let mut config = load_default_config_for_test ( & home) ;
333335 config. model_provider = model_provider;
@@ -407,10 +409,7 @@ async fn manual_compact_emits_api_and_local_token_usage_events() {
407409 ] ) ;
408410 mount_sse_once ( & server, sse_compact) . await ;
409411
410- let model_provider = ModelProviderInfo {
411- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
412- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
413- } ;
412+ let model_provider = non_openai_model_provider ( & server) ;
414413 let home = TempDir :: new ( ) . unwrap ( ) ;
415414 let mut config = load_default_config_for_test ( & home) ;
416415 config. model_provider = model_provider;
@@ -467,7 +466,11 @@ async fn multiple_auto_compact_per_task_runs_after_token_limit_hit() {
467466
468467 let server = start_mock_server ( ) . await ;
469468
469+ let non_openai_provider_name = non_openai_model_provider ( & server) . name ;
470470 let codex = test_codex ( )
471+ . with_config ( move |config| {
472+ config. model_provider . name = non_openai_provider_name;
473+ } )
471474 . build ( & server)
472475 . await
473476 . expect ( "build codex" )
@@ -1050,10 +1053,7 @@ async fn auto_compact_runs_after_token_limit_hit() {
10501053 } ;
10511054 mount_sse_once_match ( & server, fourth_matcher, sse4) . await ;
10521055
1053- let model_provider = ModelProviderInfo {
1054- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
1055- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
1056- } ;
1056+ let model_provider = non_openai_model_provider ( & server) ;
10571057
10581058 let home = TempDir :: new ( ) . unwrap ( ) ;
10591059 let mut config = load_default_config_for_test ( & home) ;
@@ -1299,10 +1299,7 @@ async fn auto_compact_persists_rollout_entries() {
12991299 } ;
13001300 mount_sse_once_match ( & server, third_matcher, sse3) . await ;
13011301
1302- let model_provider = ModelProviderInfo {
1303- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
1304- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
1305- } ;
1302+ let model_provider = non_openai_model_provider ( & server) ;
13061303
13071304 let home = TempDir :: new ( ) . unwrap ( ) ;
13081305 let mut config = load_default_config_for_test ( & home) ;
@@ -1403,10 +1400,7 @@ async fn manual_compact_retries_after_context_window_error() {
14031400 )
14041401 . await ;
14051402
1406- let model_provider = ModelProviderInfo {
1407- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
1408- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
1409- } ;
1403+ let model_provider = non_openai_model_provider ( & server) ;
14101404
14111405 let home = TempDir :: new ( ) . unwrap ( ) ;
14121406 let mut config = load_default_config_for_test ( & home) ;
@@ -1539,10 +1533,7 @@ async fn manual_compact_twice_preserves_latest_user_messages() {
15391533 )
15401534 . await ;
15411535
1542- let model_provider = ModelProviderInfo {
1543- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
1544- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
1545- } ;
1536+ let model_provider = non_openai_model_provider ( & server) ;
15461537
15471538 let home = TempDir :: new ( ) . unwrap ( ) ;
15481539 let mut config = load_default_config_for_test ( & home) ;
@@ -1743,10 +1734,7 @@ async fn auto_compact_allows_multiple_attempts_when_interleaved_with_other_turn_
17431734
17441735 mount_sse_sequence ( & server, vec ! [ sse1, sse2, sse3, sse4, sse5, sse6] ) . await ;
17451736
1746- let model_provider = ModelProviderInfo {
1747- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
1748- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
1749- } ;
1737+ let model_provider = non_openai_model_provider ( & server) ;
17501738
17511739 let home = TempDir :: new ( ) . unwrap ( ) ;
17521740 let mut config = load_default_config_for_test ( & home) ;
@@ -1856,10 +1844,7 @@ async fn auto_compact_triggers_after_function_call_over_95_percent_usage() {
18561844 // We don't assert on the post-compact request, so no need to keep its mock.
18571845 mount_sse_once ( & server, post_auto_compact_turn) . await ;
18581846
1859- let model_provider = ModelProviderInfo {
1860- base_url : Some ( format ! ( "{}/v1" , server. uri( ) ) ) ,
1861- ..built_in_model_providers ( ) [ "openai" ] . clone ( )
1862- } ;
1847+ let model_provider = non_openai_model_provider ( & server) ;
18631848
18641849 let home = TempDir :: new ( ) . unwrap ( ) ;
18651850 let mut config = load_default_config_for_test ( & home) ;
@@ -1961,13 +1946,18 @@ async fn auto_compact_counts_encrypted_reasoning_before_last_user() {
19611946 )
19621947 . await ;
19631948
1964- let compacted_history = vec ! [ codex_protocol:: models:: ResponseItem :: Message {
1965- id: None ,
1966- role: "assistant" . to_string( ) ,
1967- content: vec![ codex_protocol:: models:: ContentItem :: OutputText {
1968- text: "REMOTE_COMPACT_SUMMARY" . to_string( ) ,
1969- } ] ,
1970- } ] ;
1949+ let compacted_history = vec ! [
1950+ codex_protocol:: models:: ResponseItem :: Message {
1951+ id: None ,
1952+ role: "assistant" . to_string( ) ,
1953+ content: vec![ codex_protocol:: models:: ContentItem :: OutputText {
1954+ text: "REMOTE_COMPACT_SUMMARY" . to_string( ) ,
1955+ } ] ,
1956+ } ,
1957+ codex_protocol:: models:: ResponseItem :: Compaction {
1958+ encrypted_content: "ENCRYPTED_COMPACTION_SUMMARY" . to_string( ) ,
1959+ } ,
1960+ ] ;
19711961 let compact_mock =
19721962 mount_compact_json_once ( & server, serde_json:: json!( { "output" : compacted_history } ) ) . await ;
19731963
@@ -2028,4 +2018,8 @@ async fn auto_compact_counts_encrypted_reasoning_before_last_user() {
20282018 resume_body. contains( "REMOTE_COMPACT_SUMMARY" ) || resume_body. contains( FINAL_REPLY ) ,
20292019 "resume request should follow remote compact and use compacted history"
20302020 ) ;
2021+ assert ! (
2022+ resume_body. contains( "ENCRYPTED_COMPACTION_SUMMARY" ) ,
2023+ "resume request should include compaction summary item"
2024+ ) ;
20312025}
0 commit comments