From 61680629045f4c4fc3fac3b0d36b76b25d12f372 Mon Sep 17 00:00:00 2001 From: viyatb-oai Date: Fri, 8 May 2026 15:46:48 -0700 Subject: [PATCH] refactor: keep network proxy feature changes scoped Co-authored-by: Codex noreply@openai.com --- codex-rs/cli/src/main.rs | 37 ++++++++++-------------------------- codex-rs/features/src/lib.rs | 16 ---------------- 2 files changed, 10 insertions(+), 43 deletions(-) diff --git a/codex-rs/cli/src/main.rs b/codex-rs/cli/src/main.rs index 04bec06721..dbe6b7605c 100644 --- a/codex-rs/cli/src/main.rs +++ b/codex-rs/cli/src/main.rs @@ -58,7 +58,7 @@ use codex_core::config::edit::ConfigEditsBuilder; use codex_core::config::find_codex_home; use codex_features::FEATURES; use codex_features::Stage; -use codex_features::feature_toggle_override_key; +use codex_features::is_known_feature_key; use codex_login::AuthManager; use codex_memories_write::clear_memory_roots_contents; use codex_models_manager::bundled_models_response; @@ -687,23 +687,22 @@ impl FeatureToggles { fn to_overrides(&self) -> anyhow::Result> { let mut v = Vec::new(); for feature in &self.enable { - let key = Self::feature_override_key(feature)?; - v.push(format!("{key}=true")); + Self::validate_feature(feature)?; + v.push(format!("features.{feature}=true")); } for feature in &self.disable { - let key = Self::feature_override_key(feature)?; - v.push(format!("{key}=false")); + Self::validate_feature(feature)?; + v.push(format!("features.{feature}=false")); } Ok(v) } - fn feature_override_key(feature: &str) -> anyhow::Result { - feature_toggle_override_key(feature) - .ok_or_else(|| anyhow::anyhow!("Unknown feature flag: {feature}")) - } - fn validate_feature(feature: &str) -> anyhow::Result<()> { - Self::feature_override_key(feature).map(|_| ()) + if is_known_feature_key(feature) { + Ok(()) + } else { + anyhow::bail!("Unknown feature flag: {feature}") + } } } @@ -2660,22 +2659,6 @@ mod tests { ); } - #[test] - fn feature_toggles_preserve_configurable_feature_tables() { - let toggles = FeatureToggles { - enable: vec!["network_proxy".to_string()], - disable: vec!["multi_agent_v2".to_string()], - }; - let overrides = toggles.to_overrides().expect("valid features"); - assert_eq!( - overrides, - vec![ - "features.network_proxy.enabled=true".to_string(), - "features.multi_agent_v2.enabled=false".to_string(), - ] - ); - } - #[test] fn feature_toggles_accept_legacy_linux_sandbox_flag() { let toggles = FeatureToggles { diff --git a/codex-rs/features/src/lib.rs b/codex-rs/features/src/lib.rs index 522ba2f156..fa51959e88 100644 --- a/codex-rs/features/src/lib.rs +++ b/codex-rs/features/src/lib.rs @@ -258,13 +258,6 @@ impl Feature { self.info().default_enabled } - pub fn uses_config_table(self) -> bool { - matches!( - self, - Feature::MultiAgentV2 | Feature::AppsMcpPathOverride | Feature::NetworkProxy - ) - } - fn info(self) -> &'static FeatureSpec { FEATURES .iter() @@ -580,15 +573,6 @@ pub fn is_known_feature_key(key: &str) -> bool { feature_for_key(key).is_some() } -pub fn feature_toggle_override_key(key: &str) -> Option { - let feature = feature_for_key(key)?; - if feature.uses_config_table() { - Some(format!("features.{}.enabled", feature.key())) - } else { - Some(format!("features.{key}")) - } -} - /// Deserializable features table for TOML. #[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq, JsonSchema)] pub struct FeaturesToml {