use std::collections::BTreeMap;
use std::path::{Path, PathBuf};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubagentRunSettings {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub thinking: Option<String>,
}
impl SubagentRunSettings {
pub fn is_empty(&self) -> bool {
self.provider.is_none() && self.model.is_none() && self.thinking.is_none()
}
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubagentSettingsFile {
#[serde(default = "default_version")]
pub version: u32,
#[serde(default)]
pub nodes: BTreeMap<String, SubagentRunSettings>,
#[serde(default)]
pub agents: BTreeMap<String, SubagentRunSettings>,
}
impl Default for SubagentSettingsFile {
fn default() -> Self {
Self {
version: default_version(),
nodes: BTreeMap::new(),
agents: BTreeMap::new(),
}
}
}
fn default_version() -> u32 {
1
}
pub fn subagent_settings_path_for_project(pi_dir: &Path) -> PathBuf {
pi_dir.join("subagent-settings.json")
}