use crate::constants::{defaults, tools};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct AutomationConfig {
#[serde(default)]
pub full_auto: FullAutoConfig,
#[serde(default)]
pub scheduled_tasks: ScheduledTasksConfig,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ScheduledTasksConfig {
#[serde(default = "default_scheduled_tasks_enabled")]
pub enabled: bool,
}
impl Default for ScheduledTasksConfig {
fn default() -> Self {
Self {
enabled: default_scheduled_tasks_enabled(),
}
}
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct FullAutoConfig {
#[serde(default = "default_full_auto_enabled")]
pub enabled: bool,
#[serde(default = "default_full_auto_max_turns")]
pub max_turns: usize,
#[serde(default = "default_full_auto_allowed_tools")]
pub allowed_tools: Vec<String>,
#[serde(default = "default_require_profile_ack")]
pub require_profile_ack: bool,
#[serde(default)]
pub profile_path: Option<PathBuf>,
}
impl Default for FullAutoConfig {
fn default() -> Self {
Self {
enabled: default_full_auto_enabled(),
max_turns: default_full_auto_max_turns(),
allowed_tools: default_full_auto_allowed_tools(),
require_profile_ack: default_require_profile_ack(),
profile_path: None,
}
}
}
fn default_full_auto_enabled() -> bool {
false
}
fn default_scheduled_tasks_enabled() -> bool {
false
}
fn default_full_auto_allowed_tools() -> Vec<String> {
vec![
tools::READ_FILE.to_string(),
tools::UNIFIED_SEARCH.to_string(),
]
}
fn default_require_profile_ack() -> bool {
true
}
fn default_full_auto_max_turns() -> usize {
defaults::DEFAULT_FULL_AUTO_MAX_TURNS
}