pub mod file;
pub mod provider;
pub mod rag;
pub mod remote;
pub mod sections;
pub use file::{ConfigFile, LegacyForkSection, LegacyHiveSection};
pub use provider::{AgentDef, AgentsSection, ModelOverride, ModelRole, ProviderEntry};
pub use rag::{BridgeRagConfig, BridgeRagSection, RagConfig};
#[cfg(test)]
pub use remote::WebSection;
pub use remote::{
ChannelMappingEntry, DiscordSection, RemotePermissionsSection, SlackSection, TelegramSection,
WebConfig,
};
pub use sections::ApiSection;
use std::fmt;
use crate::agent::swarm::config::CollaborationConfig;
#[derive(Clone)]
pub struct Config {
pub api_key: String,
pub base_url: String,
pub model: String,
pub max_tokens: u32,
pub supports_tools: Option<bool>,
pub tool_timeout_secs: u64,
pub task_timeout_secs: u64,
pub max_iterations: u32,
pub max_continuations: u32,
pub circuit_breaker_threshold: u32,
pub stream_idle_timeout_secs: u64,
pub stream_max_retries: u32,
pub iteration_delay_ms: u64,
pub temperature: Option<f32>,
pub thinking_budget_tokens: Option<u32>,
pub reasoning_effort: Option<String>,
pub model_overrides: Vec<ModelOverride>,
pub agents: Vec<AgentDef>,
pub context_max_tokens: usize,
pub compaction_threshold: f32,
pub adaptive_compaction: bool,
pub auto_commit: bool,
pub lint_cmd: Option<String>,
pub test_cmd: Option<String>,
pub theme: String,
pub debug_mode: bool,
pub bench_retain_days: u32,
pub collaboration: CollaborationConfig,
pub collet_home: std::path::PathBuf,
pub debug_targets: DebugTargets,
pub web: WebConfig,
pub auto_optimize: bool,
pub auto_route: bool,
pub pii_filter: bool,
pub deny_paths: Vec<String>,
pub follow_symlinks: bool,
pub rag: Option<RagConfig>,
pub soul_enabled: bool,
pub evolution_enabled: bool,
pub evolution_model: Option<String>,
pub evolution_cycles: u32,
pub telemetry_enabled: bool,
pub telemetry_error_reporting: bool,
pub telemetry_analytics: bool,
pub cli: Option<String>,
pub cli_args: Vec<String>,
pub cli_yolo_args: Vec<String>,
pub cli_model_env: Option<String>,
pub cli_skip_model: bool,
pub cli_yolo_env: Vec<String>,
pub cli_max_turns_flag: Option<String>,
pub providers: Vec<ProviderEntry>,
pub proxy_headers: std::collections::HashMap<String, String>,
pub yolo: bool,
pub iteration_budget: Option<crate::agent::guard::IterationBudget>,
}
impl fmt::Debug for Config {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Config")
.field("api_key", &"[REDACTED]")
.field("base_url", &self.base_url)
.field("model", &self.model)
.field("max_tokens", &self.max_tokens)
.finish_non_exhaustive()
}
}
#[derive(Debug, Clone)]
pub struct DebugTargets {
pub tool_latency_avg_ms: u64,
pub api_latency_avg_ms: u64,
pub tool_success_rate: f32,
pub tokens_per_iteration: u64,
pub tools_per_iteration: u32,
}
impl Default for DebugTargets {
fn default() -> Self {
Self {
tool_latency_avg_ms: 2000,
api_latency_avg_ms: 5000,
tool_success_rate: 95.0,
tokens_per_iteration: 8000,
tools_per_iteration: 5,
}
}
}