diff --git a/codex-rs/core/src/codex_tests.rs b/codex-rs/core/src/codex_tests.rs index b5f2ea2ef4..a52292799f 100644 --- a/codex-rs/core/src/codex_tests.rs +++ b/codex-rs/core/src/codex_tests.rs @@ -1899,6 +1899,7 @@ async fn session_new_fails_when_zsh_fork_enabled_without_zsh_path() { auth_manager.clone(), None, CollaborationModesConfig::default(), + None, )); let model = ModelsManager::get_model_offline_for_tests(config.model.as_deref()); let model_info = ModelsManager::construct_model_info_offline_for_tests(model.as_str(), &config); @@ -1987,6 +1988,7 @@ pub(crate) async fn make_session_and_context() -> (Session, TurnContext) { auth_manager.clone(), None, CollaborationModesConfig::default(), + None, )); let agent_control = AgentControl::default(); let exec_policy = ExecPolicyManager::default(); @@ -2394,6 +2396,7 @@ pub(crate) async fn make_session_and_context_with_dynamic_tools_and_rx( auth_manager.clone(), None, CollaborationModesConfig::default(), + None, )); let agent_control = AgentControl::default(); let exec_policy = ExecPolicyManager::default(); diff --git a/codex-rs/core/src/config/config_tests.rs b/codex-rs/core/src/config/config_tests.rs index ebf4862bcc..b7cd36ab86 100644 --- a/codex-rs/core/src/config/config_tests.rs +++ b/codex-rs/core/src/config/config_tests.rs @@ -3066,6 +3066,7 @@ fn test_precedence_fixture_with_o3_profile() -> std::io::Result<()> { experimental_realtime_ws_startup_context: None, base_instructions: None, developer_instructions: None, + plan_mode_developer_instructions: None, compact_prompt: None, commit_attribution: None, forced_chatgpt_workspace_id: None, @@ -3201,6 +3202,7 @@ fn test_precedence_fixture_with_gpt3_profile() -> std::io::Result<()> { experimental_realtime_ws_startup_context: None, base_instructions: None, developer_instructions: None, + plan_mode_developer_instructions: None, compact_prompt: None, commit_attribution: None, forced_chatgpt_workspace_id: None, @@ -3334,6 +3336,7 @@ fn test_precedence_fixture_with_zdr_profile() -> std::io::Result<()> { experimental_realtime_ws_startup_context: None, base_instructions: None, developer_instructions: None, + plan_mode_developer_instructions: None, compact_prompt: None, commit_attribution: None, forced_chatgpt_workspace_id: None, @@ -3453,6 +3456,7 @@ fn test_precedence_fixture_with_gpt5_profile() -> std::io::Result<()> { experimental_realtime_ws_startup_context: None, base_instructions: None, developer_instructions: None, + plan_mode_developer_instructions: None, compact_prompt: None, commit_attribution: None, forced_chatgpt_workspace_id: None, diff --git a/codex-rs/core/tests/suite/prompt_caching.rs b/codex-rs/core/tests/suite/prompt_caching.rs index d8fd96ddfa..63f213ff17 100644 --- a/codex-rs/core/tests/suite/prompt_caching.rs +++ b/codex-rs/core/tests/suite/prompt_caching.rs @@ -847,6 +847,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a let expected_permissions_msg = body1["input"][0].clone(); let expected_ui_msg = body1["input"][1].clone(); + let expected_collaboration_mode_msg = body1["input"][2].clone(); let shell = default_user_shell(); let default_cwd_lossy = default_cwd.to_string_lossy(); @@ -868,6 +869,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a let expected_input_1 = serde_json::Value::Array(vec![ expected_permissions_msg.clone(), expected_contextual_user_msg_1.clone(), + expected_collaboration_mode_msg.clone(), expected_user_message_1.clone(), ]); assert_eq!(body1["input"], expected_input_1); @@ -876,6 +878,7 @@ async fn send_user_turn_with_no_changes_does_not_send_environment_context() -> a let expected_input_2 = serde_json::Value::Array(vec![ expected_permissions_msg, expected_contextual_user_msg_1, + expected_collaboration_mode_msg, expected_user_message_1, expected_user_message_2, ]); @@ -971,6 +974,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu let expected_permissions_msg = body1["input"][0].clone(); let expected_ui_msg = body1["input"][1].clone(); + let expected_collaboration_mode_msg = body1["input"][2].clone(); let shell = default_user_shell(); let expected_env_text_1 = expected_ui_msg["content"][1]["text"] @@ -989,6 +993,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu let expected_input_1 = serde_json::Value::Array(vec![ expected_permissions_msg.clone(), expected_contextual_user_msg_1.clone(), + expected_collaboration_mode_msg.clone(), expected_user_message_1.clone(), ]); assert_eq!(body1["input"], expected_input_1); @@ -1013,6 +1018,7 @@ async fn send_user_turn_with_changes_sends_environment_context() -> anyhow::Resu let expected_input_2 = serde_json::Value::Array(vec![ expected_permissions_msg, expected_contextual_user_msg_1, + expected_collaboration_mode_msg, expected_user_message_1, expected_settings_update_msg, expected_user_message_2, diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_sampling_model_switch_compaction_shapes.snap b/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_sampling_model_switch_compaction_shapes.snap index 7f61d7ed5e..2c6f6bec56 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_sampling_model_switch_compaction_shapes.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_sampling_model_switch_compaction_shapes.snap @@ -1,6 +1,5 @@ --- source: core/tests/suite/compact.rs -assertion_line: 1791 expression: "format_labeled_requests_snapshot(\"Pre-sampling compaction on model switch to a smaller context window: current behavior compacts using prior-turn history only (incoming user message excluded), and the follow-up request carries compacted history plus the new user message.\",\n&[(\"Initial Request (Previous Model)\", &requests[0]),\n(\"Pre-sampling Compaction Request\", &requests[1]),\n(\"Post-Compaction Follow-up Request (Next Model)\", &requests[2]),])" --- Scenario: Pre-sampling compaction on model switch to a smaller context window: current behavior compacts using prior-turn history only (incoming user message excluded), and the follow-up request carries compacted history plus the new user message. @@ -10,7 +9,9 @@ Scenario: Pre-sampling compaction on model switch to a smaller context window: c 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now... 03:message/user:before switch ## Pre-sampling Compaction Request @@ -18,7 +19,9 @@ Scenario: Pre-sampling compaction on model switch to a smaller context window: c 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now... 03:message/user:before switch 04:message/assistant:before switch 05:message/user: @@ -26,9 +29,10 @@ Scenario: Pre-sampling compaction on model switch to a smaller context window: c ## Post-Compaction Follow-up Request (Next Model) 00:message/user:before switch 01:message/user:\nPRE_SAMPLING_SUMMARY -02:message/developer[2]: +02:message/developer[3]: [01] \nThe user was previously using a different model.... [02] + [03] # Collaboration Mode: Default\n\nYou are now... 03:message/user[2]: [01] [02] > diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_including_incoming_shapes.snap b/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_including_incoming_shapes.snap index 8712df5833..c35eda9d8c 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_including_incoming_shapes.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_including_incoming_shapes.snap @@ -19,7 +19,9 @@ Scenario: Pre-turn auto-compaction with a context override emits the context dif 00:message/user:USER_ONE 01:message/user:USER_TWO 02:message/user:\nPRE_TURN_SUMMARY -03:message/developer: +03:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now... 04:message/user[2]: [01] [02] diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_strips_incoming_model_switch_shapes.snap b/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_strips_incoming_model_switch_shapes.snap index 46d76bb100..495583a29f 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_strips_incoming_model_switch_shapes.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__compact__pre_turn_compaction_strips_incoming_model_switch_shapes.snap @@ -1,6 +1,5 @@ --- source: core/tests/suite/compact.rs -assertion_line: 3188 expression: "format_labeled_requests_snapshot(\"Pre-turn compaction during model switch (without pre-sampling model-switch compaction): current behavior strips incoming from the compact request and restores it in the post-compaction follow-up request.\",\n&[(\"Initial Request (Previous Model)\", &requests[0]),\n(\"Local Compaction Request\", &requests[1]),\n(\"Local Post-Compaction History Layout\", &requests[2]),])" --- Scenario: Pre-turn compaction during model switch (without pre-sampling model-switch compaction): current behavior strips incoming from the compact request and restores it in the post-compaction follow-up request. @@ -10,7 +9,9 @@ Scenario: Pre-turn compaction during model switch (without pre-sampling model-sw 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now... 03:message/user:BEFORE_SWITCH_USER ## Local Compaction Request @@ -18,7 +19,9 @@ Scenario: Pre-turn compaction during model switch (without pre-sampling model-sw 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now... 03:message/user:BEFORE_SWITCH_USER 04:message/assistant:BEFORE_SWITCH_REPLY 05:message/user: @@ -26,10 +29,11 @@ Scenario: Pre-turn compaction during model switch (without pre-sampling model-sw ## Local Post-Compaction History Layout 00:message/user:BEFORE_SWITCH_USER 01:message/user:\nPRETURN_SWITCH_SUMMARY -02:message/developer[3]: +02:message/developer[4]: [01] \nThe user was previously using a different model.... [02] - [03] The user has requested a new communication st... + [03] # Collaboration Mode: Default\n\nYou are now... + [04] The user has requested a new communication st... 03:message/user[2]: [01] [02] > diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_including_incoming_shapes.snap b/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_including_incoming_shapes.snap index 5a6f270d3d..ea8350fa8e 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_including_incoming_shapes.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_including_incoming_shapes.snap @@ -18,7 +18,9 @@ Scenario: Remote pre-turn auto-compaction with a context override emits the cont 00:message/user:USER_ONE 01:message/user:USER_TWO 02:compaction:encrypted=true -03:message/developer: +03:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now... 04:message/user[2]: [01] [02] diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_strips_incoming_model_switch_shapes.snap b/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_strips_incoming_model_switch_shapes.snap index ebab84f4e0..68fc7ef39a 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_strips_incoming_model_switch_shapes.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__compact_remote__remote_pre_turn_compaction_strips_incoming_model_switch_shapes.snap @@ -1,6 +1,5 @@ --- source: core/tests/suite/compact_remote.rs -assertion_line: 1514 expression: "format_labeled_requests_snapshot(\"Remote pre-turn compaction during model switch currently excludes incoming user input, strips incoming from the compact request payload, and restores it in the post-compaction follow-up request.\",\n&[(\"Initial Request (Previous Model)\", &initial_turn_request),\n(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &post_compact_turn_request),])" --- Scenario: Remote pre-turn compaction during model switch currently excludes incoming user input, strips incoming from the compact request payload, and restores it in the post-compaction follow-up request. @@ -23,10 +22,11 @@ Scenario: Remote pre-turn compaction during model switch currently excludes inco ## Remote Post-Compaction History Layout 00:message/user:BEFORE_SWITCH_USER 01:compaction:encrypted=true -02:message/developer[3]: +02:message/developer[4]: [01] \nThe user was previously using a different model.... [02] - [03] The user has requested a new communication st... + [03] # Collaboration Mode: Default\n\nYou are now... + [04] The user has requested a new communication st... 03:message/user[2]: [01] [02] > diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_cwd_change_does_not_refresh_agents.snap b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_cwd_change_does_not_refresh_agents.snap index 65dffc556c..e3bec370d3 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_cwd_change_does_not_refresh_agents.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_cwd_change_does_not_refresh_agents.snap @@ -9,7 +9,9 @@ Scenario: Second turn changes cwd to a directory with different AGENTS.md; curre 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now in Default mode. Any previous i... 03:message/user:> 04:message/user:first turn in agents_one @@ -18,7 +20,9 @@ Scenario: Second turn changes cwd to a directory with different AGENTS.md; curre 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now in Default mode. Any previous i... 03:message/user:> 04:message/user:first turn in agents_one 05:message/assistant:turn one complete diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_override_matches_rollout_model.snap b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_override_matches_rollout_model.snap index 045e97706b..50e291b882 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_override_matches_rollout_model.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_override_matches_rollout_model.snap @@ -18,5 +18,6 @@ Scenario: First post-resume turn where pre-turn override sets model to rollout m [02] > 02:message/user:seed resume history 03:message/assistant:recorded before resume -04:message/user: -05:message/user:first resumed turn after model override +04:message/developer:# Collaboration Mode: Default\n\nYou are now in Default mode. Any previous i... +05:message/user: +06:message/user:first resumed turn after model override diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_with_personality_change.snap b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_with_personality_change.snap index 3918fafa65..0a0eeb100d 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_with_personality_change.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_resume_with_personality_change.snap @@ -18,8 +18,9 @@ Scenario: First post-resume turn where resumed config model differs from rollout [02] > 02:message/user:seed resume history 03:message/assistant:recorded before resume -04:message/developer[2]: +04:message/developer[3]: [01] \nThe user was previously using a different model. Please continue the conversatio... [02] + [03] # Collaboration Mode: Default\n\nYou are now in Default mode. Any previous i... 05:message/user: 06:message/user:resume and change personality diff --git a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_turn_overrides.snap b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_turn_overrides.snap index 2172d7399f..25eeab4230 100644 --- a/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_turn_overrides.snap +++ b/codex-rs/core/tests/suite/snapshots/all__suite__model_visible_layout__model_visible_layout_turn_overrides.snap @@ -9,7 +9,9 @@ Scenario: Second turn changes cwd, approval policy, and personality while keepin 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now in Default mode. Any previous i... 03:message/user:first turn ## Second Request (Turn Overrides) @@ -17,7 +19,9 @@ Scenario: Second turn changes cwd, approval policy, and personality while keepin 01:message/user[2]: [01] [02] > -02:message/developer: +02:message/developer[2]: + [01] + [02] # Collaboration Mode: Default\n\nYou are now in Default mode. Any previous i... 03:message/user:first turn 04:message/assistant:turn one complete 05:message/developer[2]: