mod loader;
mod provider;
mod search;
#[cfg(test)]
mod tests;
pub use provider::{ModelConfig, ModelCost, ModelLimit, ModelModalities, ProviderConfig};
pub use search::{
BrowserBackend, DocumentCacheConfig, DocumentOcrConfig, DocumentParserConfig, HeadlessConfig,
SearchConfig, SearchEngineConfig, SearchHealthConfig,
};
use crate::memory::MemoryConfig;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum StorageBackend {
Memory,
#[default]
File,
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(default, rename_all = "camelCase")]
pub struct AutoDelegationConfig {
pub enabled: bool,
#[serde(alias = "auto_parallel")]
pub auto_parallel: bool,
pub min_confidence: f32,
pub max_tasks: usize,
}
impl Default for AutoDelegationConfig {
fn default() -> Self {
Self {
enabled: false,
auto_parallel: true,
min_confidence: 0.72,
max_tasks: 4,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CodeConfig {
#[serde(default, alias = "default_model")]
pub default_model: Option<String>,
#[serde(default)]
pub providers: Vec<ProviderConfig>,
#[serde(default)]
pub storage_backend: StorageBackend,
#[serde(skip_serializing_if = "Option::is_none")]
pub sessions_dir: Option<PathBuf>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub storage_url: Option<String>,
#[serde(default, alias = "skill_dirs")]
pub skill_dirs: Vec<PathBuf>,
#[serde(default, alias = "agent_dirs")]
pub agent_dirs: Vec<PathBuf>,
#[serde(default, alias = "max_tool_rounds")]
pub max_tool_rounds: Option<usize>,
#[serde(default, alias = "max_parallel_tasks")]
pub max_parallel_tasks: Option<usize>,
#[serde(default, alias = "auto_delegation")]
pub auto_delegation: AutoDelegationConfig,
#[serde(default, alias = "auto_parallel")]
pub auto_parallel: Option<bool>,
#[serde(default, alias = "thinking_budget")]
pub thinking_budget: Option<usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memory: Option<MemoryConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub queue: Option<crate::queue::SessionQueueConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search: Option<SearchConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub document_parser: Option<DocumentParserConfig>,
#[serde(default, alias = "mcp_servers")]
pub mcp_servers: Vec<crate::mcp::McpServerConfig>,
}