diff --git a/codex-rs/core/tests/suite/model_runtime_selectors.rs b/codex-rs/core/tests/suite/model_runtime_selectors.rs index e6ad052631..73a4e4a614 100644 --- a/codex-rs/core/tests/suite/model_runtime_selectors.rs +++ b/codex-rs/core/tests/suite/model_runtime_selectors.rs @@ -47,6 +47,33 @@ fn tool_names(body: &Value) -> Vec { .unwrap_or_default() } +fn namespace_child_tool_names(body: &Value, namespace: &str) -> Vec { + body.get("tools") + .and_then(Value::as_array) + .and_then(|tools| { + tools.iter().find_map(|tool| { + if tool.get("type").and_then(Value::as_str) == Some("namespace") + && tool.get("name").and_then(Value::as_str) == Some(namespace) + { + tool.get("tools").and_then(Value::as_array).map(|children| { + children + .iter() + .filter_map(|child| { + child + .get("name") + .and_then(Value::as_str) + .map(str::to_string) + }) + .collect() + }) + } else { + None + } + }) + }) + .unwrap_or_default() +} + fn selected_tool_names(body: &Value, selected: &[&str]) -> Vec { tool_names(body) .into_iter() @@ -159,27 +186,19 @@ async fn catalog_multi_agent_version_selector_overrides_feature_flags() -> Resul }) .await?; assert_eq!( - selected_tool_names( - &v1_body, - &[ - "spawn_agent", - "send_input", - "resume_agent", - "wait_agent", - "close_agent", - "send_message", - "followup_task", - "list_agents", - ], - ), + namespace_child_tool_names(&v1_body, "multi_agent_v1"), vec![ - "spawn_agent".to_string(), - "send_input".to_string(), - "resume_agent".to_string(), - "wait_agent".to_string(), "close_agent".to_string(), + "resume_agent".to_string(), + "send_input".to_string(), + "spawn_agent".to_string(), + "wait_agent".to_string(), ] ); + assert_eq!( + selected_tool_names(&v1_body, &["send_message", "followup_task", "list_agents"]), + Vec::::new() + ); assert!( !v1_body .to_string() @@ -226,6 +245,10 @@ async fn catalog_multi_agent_version_selector_overrides_feature_flags() -> Resul "list_agents".to_string(), ] ); + assert_eq!( + namespace_child_tool_names(&v2_body, "multi_agent_v1"), + Vec::::new() + ); assert!( tool_description(&v2_body, "spawn_agent").is_some_and( |description| description.contains("max_concurrent_threads_per_session = 17") @@ -273,37 +296,27 @@ async fn catalog_omitted_and_unknown_multi_agent_versions_follow_feature_flags() }) .await?; - let expected_v1_tools = vec![ - "spawn_agent".to_string(), - "send_input".to_string(), - "resume_agent".to_string(), - "wait_agent".to_string(), - "close_agent".to_string(), - ]; assert_eq!( ( - selected_tool_names( - &omitted_body, - &[ - "spawn_agent", - "send_input", - "resume_agent", - "wait_agent", - "close_agent", - ], - ), - selected_tool_names( - &unknown_body, - &[ - "spawn_agent", - "send_input", - "resume_agent", - "wait_agent", - "close_agent", - ], - ), + namespace_child_tool_names(&omitted_body, "multi_agent_v1"), + namespace_child_tool_names(&unknown_body, "multi_agent_v1"), ), - (expected_v1_tools.clone(), expected_v1_tools) + ( + vec![ + "close_agent".to_string(), + "resume_agent".to_string(), + "send_input".to_string(), + "spawn_agent".to_string(), + "wait_agent".to_string(), + ], + vec![ + "close_agent".to_string(), + "resume_agent".to_string(), + "send_input".to_string(), + "spawn_agent".to_string(), + "wait_agent".to_string(), + ], + ) ); Ok(())