use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Settings {
#[serde(default)]
pub permissions: PermissionSettings,
#[serde(default)]
pub model: Option<String>,
#[serde(default)]
pub hooks: HooksConfig,
#[serde(default)]
pub max_turns: Option<usize>,
#[serde(default)]
pub max_tokens: Option<u32>,
#[serde(default)]
pub effort: Option<String>,
#[serde(default)]
pub commit_attribution: bool,
#[serde(default)]
pub interns: Vec<InternConfig>,
#[serde(default)]
pub main_provider: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct InternConfig {
pub name: String,
pub provider: String,
pub model: String,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub base_url: Option<String>,
#[serde(default)]
pub api_key_env: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PermissionSettings {
#[serde(default)]
pub allow: Vec<String>,
#[serde(default)]
pub deny: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct HookEntry {
#[serde(default)]
pub matcher: Option<String>,
pub command: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct HooksConfig {
#[serde(default, rename = "PreToolUse")]
pub pre_tool_use: Vec<HookEntry>,
#[serde(default, rename = "PostToolUse")]
pub post_tool_use: Vec<HookEntry>,
#[serde(default, rename = "Stop")]
pub stop: Vec<HookEntry>,
#[serde(default, rename = "SessionStart")]
pub session_start: Vec<HookEntry>,
}