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, 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 = "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>,
}