diff --git a/codex-rs/config/src/strict_config_tests.rs b/codex-rs/config/src/strict_config_tests.rs index e22aa3fd79..9e709f1ddf 100644 --- a/codex-rs/config/src/strict_config_tests.rs +++ b/codex-rs/config/src/strict_config_tests.rs @@ -95,8 +95,8 @@ fn strict_config_accepts_tool_registry_config() { for contents in [ "[features.tool_registry]\nerror_on_tool_collisions = true\n", "[profiles.work.features.tool_registry]\nerror_on_tool_collisions = true\n", - "[features.tool_registry]\ninclude_tool_namespaces_info = true\n", - "[profiles.work.features.tool_registry]\ninclude_tool_namespaces_info = true\n", + "[features.tool_registry]\ninclude_tool_metadata = true\n", + "[profiles.work.features.tool_registry]\ninclude_tool_metadata = true\n", ] { assert_eq!( config_error_from_ignored_toml_fields::(path, contents), diff --git a/codex-rs/core/config.schema.json b/codex-rs/core/config.schema.json index d35f67fc4a..b5252c8f32 100644 --- a/codex-rs/core/config.schema.json +++ b/codex-rs/core/config.schema.json @@ -3219,8 +3219,8 @@ "description": "Fail the turn when multiple tools share the same effective name.", "type": "boolean" }, - "include_tool_namespaces_info": { - "description": "Include the resolved tool namespace inventory in per-turn request metadata.", + "include_tool_metadata": { + "description": "Include authoritative tool information in request metadata.", "type": "boolean" } }, diff --git a/codex-rs/core/src/config/config_tests.rs b/codex-rs/core/src/config/config_tests.rs index d83b08c3ef..ffc67949b1 100644 --- a/codex-rs/core/src/config/config_tests.rs +++ b/codex-rs/core/src/config/config_tests.rs @@ -574,7 +574,7 @@ disable_in_process_fallback = true async fn load_config_resolves_tool_registry_config() -> std::io::Result<()> { let codex_home = tempdir()?; - for (config_toml, error_on_tool_collisions, include_tool_namespaces_info) in [ + for (config_toml, error_on_tool_collisions, include_tool_metadata) in [ ("", false, false), ( "[features.tool_registry]\nerror_on_tool_collisions = true\n", @@ -582,7 +582,7 @@ async fn load_config_resolves_tool_registry_config() -> std::io::Result<()> { false, ), ( - "[features.tool_registry]\ninclude_tool_namespaces_info = true\n", + "[features.tool_registry]\ninclude_tool_metadata = true\n", false, true, ), @@ -601,8 +601,8 @@ async fn load_config_resolves_tool_registry_config() -> std::io::Result<()> { error_on_tool_collisions ); assert_eq!( - config.tool_registry.include_tool_namespaces_info, - include_tool_namespaces_info + config.tool_registry.include_tool_metadata, + include_tool_metadata ); assert!(!config.features.enabled(Feature::CodeMode)); } diff --git a/codex-rs/core/src/config/mod.rs b/codex-rs/core/src/config/mod.rs index 3730d77aed..086ff2fd4d 100644 --- a/codex-rs/core/src/config/mod.rs +++ b/codex-rs/core/src/config/mod.rs @@ -1115,8 +1115,8 @@ pub struct Config { pub struct ToolRegistryConfig { /// Fail the turn when multiple tools share the same effective name. pub error_on_tool_collisions: bool, - /// Include the resolved tool namespace inventory in per-turn request metadata. - pub include_tool_namespaces_info: bool, + /// Include authoritative tool information in request metadata. + pub include_tool_metadata: bool, } const DEFAULT_CODE_MODE_EXEC_YIELD_TIME_MS: u64 = 30_000; @@ -3719,11 +3719,11 @@ impl Config { .and_then(|features| features.tool_registry.as_ref()) .and_then(|config| config.error_on_tool_collisions) .unwrap_or_default(), - include_tool_namespaces_info: cfg + include_tool_metadata: cfg .features .as_ref() .and_then(|features| features.tool_registry.as_ref()) - .and_then(|config| config.include_tool_namespaces_info) + .and_then(|config| config.include_tool_metadata) .unwrap_or_default(), }; let code_mode = resolve_code_mode_config(&cfg); diff --git a/codex-rs/core/src/session/config_lock.rs b/codex-rs/core/src/session/config_lock.rs index b38c614bf5..4c12c3e406 100644 --- a/codex-rs/core/src/session/config_lock.rs +++ b/codex-rs/core/src/session/config_lock.rs @@ -155,12 +155,12 @@ fn save_config_resolved_fields( .get_or_insert_with(FeaturesToml::default); features.materialize_resolved_enabled(config.features.get()); if config.tool_registry.error_on_tool_collisions - || config.tool_registry.include_tool_namespaces_info + || config.tool_registry.include_tool_metadata || features.tool_registry.is_some() { features.tool_registry = Some(ToolRegistryConfigToml { error_on_tool_collisions: Some(config.tool_registry.error_on_tool_collisions), - include_tool_namespaces_info: Some(config.tool_registry.include_tool_namespaces_info), + include_tool_metadata: Some(config.tool_registry.include_tool_metadata), }); } let mut multi_agent_v2: MultiAgentV2ConfigToml = @@ -273,7 +273,7 @@ mod tests { let mut sc = crate::session::tests::make_session_configuration_for_tests().await; let mut config = (*sc.original_config_do_not_use).clone(); config.tool_registry.error_on_tool_collisions = true; - config.tool_registry.include_tool_namespaces_info = true; + config.tool_registry.include_tool_metadata = true; config.multi_agent_v2.subagent_developer_instructions = Some("Locked subagent developer instructions.".to_string()); config.token_budget = Some(crate::config::TokenBudgetConfig { @@ -334,7 +334,7 @@ mod tests { features.tool_registry, Some(ToolRegistryConfigToml { error_on_tool_collisions: Some(true), - include_tool_namespaces_info: Some(true), + include_tool_metadata: Some(true), }) ); let feature_entries = features.entries(); diff --git a/codex-rs/features/src/feature_configs.rs b/codex-rs/features/src/feature_configs.rs index af31402f31..b608609c4d 100644 --- a/codex-rs/features/src/feature_configs.rs +++ b/codex-rs/features/src/feature_configs.rs @@ -10,9 +10,9 @@ pub struct ToolRegistryConfigToml { /// Fail the turn when multiple tools share the same effective name. #[serde(skip_serializing_if = "Option::is_none")] pub error_on_tool_collisions: Option, - /// Include the resolved tool namespace inventory in per-turn request metadata. + /// Include authoritative tool information in request metadata. #[serde(skip_serializing_if = "Option::is_none")] - pub include_tool_namespaces_info: Option, + pub include_tool_metadata: Option, } #[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq, Eq, JsonSchema)] diff --git a/codex-rs/features/src/tests.rs b/codex-rs/features/src/tests.rs index a028c0bca5..0f57994f2a 100644 --- a/codex-rs/features/src/tests.rs +++ b/codex-rs/features/src/tests.rs @@ -30,7 +30,7 @@ fn under_development_features_are_disabled_by_default() { #[test] fn tool_registry_config_is_not_a_feature_toggle() { let features: FeaturesToml = toml::from_str( - "[tool_registry]\nerror_on_tool_collisions = true\ninclude_tool_namespaces_info = true\n", + "[tool_registry]\nerror_on_tool_collisions = true\ninclude_tool_metadata = true\n", ) .expect("tool registry settings should deserialize"); @@ -38,7 +38,7 @@ fn tool_registry_config_is_not_a_feature_toggle() { features.tool_registry, Some(crate::ToolRegistryConfigToml { error_on_tool_collisions: Some(true), - include_tool_namespaces_info: Some(true), + include_tool_metadata: Some(true), }) ); assert!(features.entries().is_empty()); @@ -554,7 +554,7 @@ fn materialize_resolved_enabled_writes_all_features_and_preserves_custom_config( let mut features_toml = FeaturesToml { tool_registry: Some(crate::ToolRegistryConfigToml { error_on_tool_collisions: Some(true), - include_tool_namespaces_info: Some(true), + include_tool_metadata: Some(true), }), code_mode_host: Some(FeatureToml::Config(crate::CodeModeHostConfigToml { enabled: Some(false), @@ -587,7 +587,7 @@ fn materialize_resolved_enabled_writes_all_features_and_preserves_custom_config( features_toml.tool_registry, Some(crate::ToolRegistryConfigToml { error_on_tool_collisions: Some(true), - include_tool_namespaces_info: Some(true), + include_tool_metadata: Some(true), }) ); let entries = features_toml.entries();