aster/agents/
subagent_task_config.rs1use crate::agents::ExtensionConfig;
2use crate::providers::base::Provider;
3use std::env;
4use std::fmt;
5use std::path::{Path, PathBuf};
6use std::sync::Arc;
7
8pub const DEFAULT_SUBAGENT_MAX_TURNS: usize = 25;
10
11pub const ASTER_SUBAGENT_MAX_TURNS_ENV_VAR: &str = "ASTER_SUBAGENT_MAX_TURNS";
13
14#[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}