astrid_runtime/runtime/
config.rs1use astrid_tools::SparkConfig;
4use astrid_workspace::WorkspaceConfig;
5use std::path::PathBuf;
6
7use crate::subagent_executor::DEFAULT_SUBAGENT_TIMEOUT;
8
9pub(super) const DEFAULT_MAX_CONTEXT_TOKENS: usize = 100_000;
11pub(super) const DEFAULT_KEEP_RECENT_COUNT: usize = 10;
13
14pub(super) const DEFAULT_MAX_CONCURRENT_SUBAGENTS: usize = 4;
16pub(super) const DEFAULT_MAX_SUBAGENT_DEPTH: usize = 3;
18
19#[derive(Debug, Clone)]
21pub struct RuntimeConfig {
22 pub max_context_tokens: usize,
24 pub system_prompt: String,
26 pub auto_summarize: bool,
28 pub keep_recent_count: usize,
30 pub workspace: WorkspaceConfig,
32 pub max_concurrent_subagents: usize,
34 pub max_subagent_depth: usize,
36 pub default_subagent_timeout: std::time::Duration,
38 pub spark_seed: Option<SparkConfig>,
40 pub spark_file: Option<PathBuf>,
48}
49
50impl Default for RuntimeConfig {
51 fn default() -> Self {
52 let workspace_root = std::env::current_dir().unwrap_or_else(|_| PathBuf::from("."));
53 Self {
54 max_context_tokens: DEFAULT_MAX_CONTEXT_TOKENS,
55 system_prompt: String::new(),
56 auto_summarize: true,
57 keep_recent_count: DEFAULT_KEEP_RECENT_COUNT,
58 workspace: WorkspaceConfig::new(workspace_root),
59 max_concurrent_subagents: DEFAULT_MAX_CONCURRENT_SUBAGENTS,
60 max_subagent_depth: DEFAULT_MAX_SUBAGENT_DEPTH,
61 default_subagent_timeout: DEFAULT_SUBAGENT_TIMEOUT,
62 spark_seed: None,
63 spark_file: None,
64 }
65 }
66}