diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index aa93404986..25b7b6cf36 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -6638,8 +6638,6 @@ mod tests { use codex_protocol::models::FunctionCallOutputBody; use codex_protocol::models::FunctionCallOutputPayload; - use crate::protocol::COLLABORATION_MODE_CLOSE_TAG; - use crate::protocol::COLLABORATION_MODE_OPEN_TAG; use crate::protocol::CompactedItem; use crate::protocol::CreditsSnapshot; use crate::protocol::InitialHistory; @@ -8968,59 +8966,6 @@ mod tests { assert!(environment_update.contains("Europe/Berlin")); } - #[tokio::test] - async fn build_settings_update_items_emits_empty_collaboration_marker_when_instructions_clear() - { - let (session, previous_context) = make_session_and_context().await; - let previous_context = Arc::new(previous_context); - let mut current_context = previous_context - .with_model( - previous_context.model_info.slug.clone(), - &session.services.models_manager, - ) - .await; - current_context.collaboration_mode = CollaborationMode { - mode: ModeKind::Default, - settings: Settings { - model: previous_context.collaboration_mode.model().to_string(), - reasoning_effort: previous_context.collaboration_mode.reasoning_effort(), - developer_instructions: None, - }, - }; - - let mut previous_context_item = previous_context.to_turn_context_item(); - previous_context_item.collaboration_mode = Some(CollaborationMode { - mode: ModeKind::Realtime, - settings: Settings { - model: previous_context.collaboration_mode.model().to_string(), - reasoning_effort: previous_context.collaboration_mode.reasoning_effort(), - developer_instructions: Some("realtime instructions".to_string()), - }, - }); - - let update_items = session.build_settings_update_items( - Some(&previous_context_item), - None, - ¤t_context, - ); - - let developer_update = update_items - .iter() - .find_map(|item| match item { - ResponseItem::Message { role, content, .. } if role == "developer" => { - let [ContentItem::InputText { text }] = content.as_slice() else { - return None; - }; - Some(text) - } - _ => None, - }) - .expect("developer update item should be emitted"); - assert!(developer_update.contains(&format!( - "{COLLABORATION_MODE_OPEN_TAG}{COLLABORATION_MODE_CLOSE_TAG}" - ))); - } - #[tokio::test] async fn shutdown_resets_realtime_collaboration_mode_to_default() { let (session, _turn_context, _rx) = make_session_and_context_with_rx().await; diff --git a/codex-rs/core/src/context_manager/updates.rs b/codex-rs/core/src/context_manager/updates.rs index 5d138ecc62..80fae0c988 100644 --- a/codex-rs/core/src/context_manager/updates.rs +++ b/codex-rs/core/src/context_manager/updates.rs @@ -8,8 +8,6 @@ use codex_protocol::models::ContentItem; use codex_protocol::models::DeveloperInstructions; use codex_protocol::models::ResponseItem; use codex_protocol::openai_models::ModelInfo; -use codex_protocol::protocol::COLLABORATION_MODE_CLOSE_TAG; -use codex_protocol::protocol::COLLABORATION_MODE_OPEN_TAG; use codex_protocol::protocol::TurnContextItem; fn build_environment_update_item( @@ -56,21 +54,12 @@ fn build_collaboration_mode_update_item( ) -> Option { let prev = previous?; if prev.collaboration_mode.as_ref() != Some(&next.collaboration_mode) { - Some( - DeveloperInstructions::from_collaboration_mode(&next.collaboration_mode) - .unwrap_or_else(empty_collaboration_mode_update), - ) + DeveloperInstructions::from_collaboration_mode(&next.collaboration_mode) } else { None } } -fn empty_collaboration_mode_update() -> DeveloperInstructions { - DeveloperInstructions::new(format!( - "{COLLABORATION_MODE_OPEN_TAG}{COLLABORATION_MODE_CLOSE_TAG}" - )) -} - fn build_personality_update_item( previous: Option<&TurnContextItem>, next: &TurnContext, diff --git a/codex-rs/core/tests/suite/collaboration_instructions.rs b/codex-rs/core/tests/suite/collaboration_instructions.rs index 3134cef85b..7d799dc19f 100644 --- a/codex-rs/core/tests/suite/collaboration_instructions.rs +++ b/codex-rs/core/tests/suite/collaboration_instructions.rs @@ -622,7 +622,6 @@ async fn collaboration_mode_update_emits_empty_marker_when_instructions_clear() let input = req2.single_request().input(); let dev_texts = developer_texts(&input); assert_eq!(count_exact(&dev_texts, &collab_xml(realtime_text)), 1); - assert_eq!(count_exact(&dev_texts, &collab_xml("")), 1); Ok(()) } @@ -783,58 +782,3 @@ async fn resume_replays_collaboration_instructions() -> Result<()> { Ok(()) } - -#[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn empty_collaboration_instructions_emit_empty_marker() -> Result<()> { - skip_if_no_network!(Ok(())); - - let server = start_mock_server().await; - let req = mount_sse_once( - &server, - sse(vec![ev_response_created("resp-1"), ev_completed("resp-1")]), - ) - .await; - - let test = test_codex().build(&server).await?; - let current_model = test.session_configured.model.clone(); - - test.codex - .submit(Op::OverrideTurnContext { - cwd: None, - approval_policy: None, - sandbox_policy: None, - windows_sandbox_level: None, - model: None, - effort: None, - summary: None, - collaboration_mode: Some(CollaborationMode { - mode: ModeKind::Default, - settings: Settings { - model: current_model, - reasoning_effort: None, - developer_instructions: Some("".to_string()), - }, - }), - personality: None, - }) - .await?; - - test.codex - .submit(Op::UserInput { - items: vec![UserInput::Text { - text: "hello".into(), - text_elements: Vec::new(), - }], - final_output_json_schema: None, - }) - .await?; - wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await; - - let input = req.single_request().input(); - let dev_texts = developer_texts(&input); - assert_eq!(dev_texts.len(), 2); - let collab_text = collab_xml(""); - assert_eq!(count_exact(&dev_texts, &collab_text), 1); - - Ok(()) -}