use serde::Deserialize; use std::path::PathBuf; use crate::protocol::AskForApproval; use codex_protocol::config_types::ReasoningEffort; use codex_protocol::config_types::ReasoningSummary; use codex_protocol::config_types::Verbosity; /// Collection of common configuration options that a user can define as a unit /// in `config.toml`. #[derive(Debug, Clone, Default, PartialEq, Deserialize)] pub struct ConfigProfile { pub model: Option, /// The key in the `model_providers` map identifying the /// [`ModelProviderInfo`] to use. pub model_provider: Option, pub approval_policy: Option, pub model_reasoning_effort: Option, pub model_reasoning_summary: Option, pub model_verbosity: Option, pub chatgpt_base_url: Option, pub experimental_instructions_file: Option, pub include_plan_tool: Option, pub include_apply_patch_tool: Option, pub include_view_image_tool: Option, pub experimental_use_unified_exec_tool: Option, pub experimental_use_exec_command_tool: Option, pub experimental_use_rmcp_client: Option, pub experimental_use_freeform_apply_patch: Option, pub tools_web_search: Option, pub tools_view_image: Option, /// Optional feature toggles scoped to this profile. #[serde(default)] pub features: Option, } impl From for codex_app_server_protocol::Profile { fn from(config_profile: ConfigProfile) -> Self { Self { model: config_profile.model, model_provider: config_profile.model_provider, approval_policy: config_profile.approval_policy, model_reasoning_effort: config_profile.model_reasoning_effort, model_reasoning_summary: config_profile.model_reasoning_summary, model_verbosity: config_profile.model_verbosity, chatgpt_base_url: config_profile.chatgpt_base_url, } } }