Skip to main content

aster/agents/
subagent_task_config.rs

1use crate::agents::ExtensionConfig;
2use crate::providers::base::Provider;
3use std::env;
4use std::fmt;
5use std::path::{Path, PathBuf};
6use std::sync::Arc;
7
8/// Default maximum number of turns for task execution
9pub const DEFAULT_SUBAGENT_MAX_TURNS: usize = 25;
10
11/// Environment variable name for configuring max turns
12pub const ASTER_SUBAGENT_MAX_TURNS_ENV_VAR: &str = "ASTER_SUBAGENT_MAX_TURNS";
13
14/// Configuration for task execution with all necessary dependencies
15#[derive(Clone)]
16pub struct TaskConfig {
17    pub provider: Arc<dyn Provider>,
18    pub parent_session_id: String,
19    pub parent_working_dir: PathBuf,
20    pub extensions: Vec<ExtensionConfig>,
21    pub max_turns: Option<usize>,
22}
23
24impl fmt::Debug for TaskConfig {
25    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26        f.debug_struct("TaskConfig")
27            .field("provider", &"<dyn Provider>")
28            .field("parent_session_id", &self.parent_session_id)
29            .field("parent_working_dir", &self.parent_working_dir)
30            .field("max_turns", &self.max_turns)
31            .field("extensions", &self.extensions)
32            .finish()
33    }
34}
35
36impl TaskConfig {
37    pub fn new(
38        provider: Arc<dyn Provider>,
39        parent_session_id: &str,
40        parent_working_dir: &Path,
41        extensions: Vec<ExtensionConfig>,
42    ) -> Self {
43        Self {
44            provider,
45            parent_session_id: parent_session_id.to_owned(),
46            parent_working_dir: parent_working_dir.to_owned(),
47            extensions,
48            max_turns: Some(
49                env::var(ASTER_SUBAGENT_MAX_TURNS_ENV_VAR)
50                    .ok()
51                    .and_then(|val| val.parse::<usize>().ok())
52                    .unwrap_or(DEFAULT_SUBAGENT_MAX_TURNS),
53            ),
54        }
55    }
56}