use serde::{Deserialize, Serialize};
use std::collections::HashMap;
fn default_max_mail_messages() -> usize {
10
}
fn default_max_mail_message_length() -> usize {
4096
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RolePreset {
pub model: Option<String>,
pub sandbox: Option<String>,
pub approval_policy: Option<String>,
pub reasoning_effort: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentMcpConfig {
#[serde(default = "default_codex_bin")]
pub codex_bin: String,
#[serde(default)]
pub identity: Option<String>,
#[serde(default)]
pub model: Option<String>,
#[serde(default)]
pub fast_model: Option<String>,
#[serde(default)]
pub reasoning_effort: Option<String>,
#[serde(default = "default_sandbox")]
pub sandbox: String,
#[serde(default = "default_approval_policy")]
pub approval_policy: String,
#[serde(default = "default_mail_poll_interval_ms")]
pub mail_poll_interval_ms: u64,
#[serde(default = "default_request_timeout_secs")]
pub request_timeout_secs: u64,
#[serde(default = "default_max_concurrent_threads")]
pub max_concurrent_threads: usize,
#[serde(default = "default_persist_threads")]
pub persist_threads: bool,
#[serde(default = "default_auto_mail")]
pub auto_mail: bool,
#[serde(default = "default_max_mail_messages")]
pub max_mail_messages: usize,
#[serde(default = "default_max_mail_message_length")]
pub max_mail_message_length: usize,
#[serde(default)]
pub per_thread_auto_mail: HashMap<String, bool>,
#[serde(default)]
pub base_prompt_file: Option<String>,
#[serde(default)]
pub extra_instructions_file: Option<String>,
#[serde(default)]
pub roles: HashMap<String, RolePreset>,
#[serde(default)]
pub transport: Option<String>,
}
fn default_codex_bin() -> String {
"codex".to_string()
}
fn default_sandbox() -> String {
"workspace-write".to_string()
}
fn default_approval_policy() -> String {
"on-failure".to_string()
}
fn default_mail_poll_interval_ms() -> u64 {
5000
}
fn default_request_timeout_secs() -> u64 {
300
}
fn default_max_concurrent_threads() -> usize {
10
}
fn default_persist_threads() -> bool {
true
}
fn default_auto_mail() -> bool {
true
}
impl Default for AgentMcpConfig {
fn default() -> Self {
Self {
codex_bin: default_codex_bin(),
identity: None,
model: None,
fast_model: None,
reasoning_effort: None,
sandbox: default_sandbox(),
approval_policy: default_approval_policy(),
mail_poll_interval_ms: default_mail_poll_interval_ms(),
request_timeout_secs: default_request_timeout_secs(),
max_concurrent_threads: default_max_concurrent_threads(),
persist_threads: default_persist_threads(),
auto_mail: default_auto_mail(),
max_mail_messages: default_max_mail_messages(),
max_mail_message_length: default_max_mail_message_length(),
per_thread_auto_mail: HashMap::new(),
base_prompt_file: None,
extra_instructions_file: None,
roles: HashMap::new(),
transport: None,
}
}
}