use astrid_tools::SparkConfig;
use astrid_workspace::WorkspaceConfig;
use std::path::PathBuf;
use crate::subagent_executor::DEFAULT_SUBAGENT_TIMEOUT;
pub(super) const DEFAULT_MAX_CONTEXT_TOKENS: usize = 100_000;
pub(super) const DEFAULT_KEEP_RECENT_COUNT: usize = 10;
pub(super) const DEFAULT_MAX_CONCURRENT_SUBAGENTS: usize = 4;
pub(super) const DEFAULT_MAX_SUBAGENT_DEPTH: usize = 3;
#[derive(Debug, Clone)]
pub struct RuntimeConfig {
pub max_context_tokens: usize,
pub system_prompt: String,
pub auto_summarize: bool,
pub keep_recent_count: usize,
pub workspace: WorkspaceConfig,
pub max_concurrent_subagents: usize,
pub max_subagent_depth: usize,
pub default_subagent_timeout: std::time::Duration,
pub spark_seed: Option<SparkConfig>,
pub spark_file: Option<PathBuf>,
}
impl Default for RuntimeConfig {
fn default() -> Self {
let workspace_root = std::env::current_dir().unwrap_or_else(|_| PathBuf::from("."));
Self {
max_context_tokens: DEFAULT_MAX_CONTEXT_TOKENS,
system_prompt: String::new(),
auto_summarize: true,
keep_recent_count: DEFAULT_KEEP_RECENT_COUNT,
workspace: WorkspaceConfig::new(workspace_root),
max_concurrent_subagents: DEFAULT_MAX_CONCURRENT_SUBAGENTS,
max_subagent_depth: DEFAULT_MAX_SUBAGENT_DEPTH,
default_subagent_timeout: DEFAULT_SUBAGENT_TIMEOUT,
spark_seed: None,
spark_file: None,
}
}
}