vtcode_config/
agent_teams.rs1use serde::{Deserialize, Serialize};
4
5#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
7#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
8#[serde(rename_all = "snake_case")]
9#[derive(Default)]
10pub enum TeammateMode {
11 #[default]
13 Auto,
14 Tmux,
16 InProcess,
18}
19
20#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
21#[derive(Debug, Clone, Deserialize, Serialize)]
22pub struct AgentTeamsConfig {
23 #[serde(default)]
25 pub enabled: bool,
26
27 #[serde(default = "default_max_teammates")]
29 pub max_teammates: usize,
30
31 #[serde(default)]
33 pub default_model: Option<String>,
34
35 #[serde(default)]
37 pub teammate_mode: TeammateMode,
38
39 #[serde(default)]
41 pub storage_dir: Option<String>,
42}
43
44impl Default for AgentTeamsConfig {
45 fn default() -> Self {
46 Self {
47 enabled: false,
48 max_teammates: default_max_teammates(),
49 default_model: None,
50 teammate_mode: TeammateMode::default(),
51 storage_dir: None,
52 }
53 }
54}
55
56fn default_max_teammates() -> usize {
57 4
58}
59
60#[cfg(test)]
61mod tests {
62 use super::{AgentTeamsConfig, TeammateMode};
63
64 #[test]
65 fn defaults() {
66 let config = AgentTeamsConfig::default();
67 assert!(!config.enabled);
68 assert_eq!(config.max_teammates, 4);
69 assert_eq!(config.teammate_mode, TeammateMode::Auto);
70 }
71}