mirror of
https://github.com/openai/codex.git
synced 2026-05-24 13:04:29 +00:00
refactor: keep network proxy feature changes scoped
Co-authored-by: Codex noreply@openai.com
This commit is contained in:
@@ -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<Vec<String>> {
|
||||
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<String> {
|
||||
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 {
|
||||
|
||||
@@ -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<String> {
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user