use serde::{Deserialize, Serialize};
use super::defaults;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, clap::ValueEnum, Default)]
#[serde(rename_all = "kebab-case")]
pub enum ApprovalMode {
Plan,
#[default]
Default,
AutoEdit,
Yolo,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct AwsConfig {
pub profile: Option<String>,
pub region: Option<String>,
pub model: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ToolsConfig {
#[serde(default)]
pub approval_mode: ApprovalMode,
#[serde(default = "defaults::default_deny_rules")]
pub deny_rules: Vec<String>,
#[serde(default = "defaults::default_max_turns")]
pub max_turns: usize,
}
impl Default for ToolsConfig {
fn default() -> Self {
Self {
approval_mode: ApprovalMode::default(),
deny_rules: defaults::default_deny_rules(),
max_turns: defaults::default_max_turns(),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "kebab-case")]
pub enum ProviderKind {
#[default]
Bedrock,
OpenRouter,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct ProviderConfig {
#[serde(default)]
pub active: ProviderKind,
pub model: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct BedrockConfig {
pub access_key_id: Option<String>,
pub secret_access_key: Option<String>,
pub region: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct OpenRouterConfig {
pub api_key: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct GlobalConfig {
#[serde(default)]
pub aws: AwsConfig,
#[serde(default)]
pub tools: ToolsConfig,
#[serde(default)]
pub provider: ProviderConfig,
#[serde(default)]
pub bedrock: BedrockConfig,
#[serde(default)]
pub openrouter: OpenRouterConfig,
#[serde(default)]
pub brave_api_key: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct ProjectToolsConfig {
pub approval_mode: Option<ApprovalMode>,
pub deny_rules: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct ProjectConfig {
pub aws: Option<AwsConfig>,
pub tools: Option<ProjectToolsConfig>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AppConfig {
pub aws: AwsConfig,
pub tools: ToolsConfig,
pub provider: ProviderConfig,
pub bedrock: BedrockConfig,
pub openrouter: OpenRouterConfig,
pub brave_api_key: Option<String>,
}