diff --git a/src/config/schema.rs b/src/config/schema.rs index 58f9b49b1..37dc7f383 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -190,6 +190,10 @@ pub struct Config { #[serde(default)] pub agents: HashMap, + /// Hooks configuration (lifecycle hooks and built-in hook toggles). + #[serde(default)] + pub hooks: HooksConfig, + /// Hardware configuration (wizard-driven physical world setup). #[serde(default)] pub hardware: HardwareConfig, @@ -1755,6 +1759,41 @@ impl Default for ObservabilityConfig { } } +// ── Hooks ──────────────────────────────────────────────────────── + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct HooksConfig { + pub enabled: bool, + #[serde(default)] + pub builtin: BuiltinHooksConfig, +} + +impl Default for HooksConfig { + fn default() -> Self { + Self { + enabled: true, + builtin: BuiltinHooksConfig::default(), + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BuiltinHooksConfig { + pub session_memory: bool, + pub command_logger: bool, + pub boot_script: bool, +} + +impl Default for BuiltinHooksConfig { + fn default() -> Self { + Self { + session_memory: true, + command_logger: false, + boot_script: true, + } + } +} + // ── Autonomy / Security ────────────────────────────────────────── /// Autonomy and security policy configuration (`[autonomy]` section). @@ -2928,6 +2967,7 @@ impl Default for Config { cost: CostConfig::default(), peripherals: PeripheralsConfig::default(), agents: HashMap::new(), + hooks: HooksConfig::default(), hardware: HardwareConfig::default(), query_classification: QueryClassificationConfig::default(), transcription: TranscriptionConfig::default(), @@ -4125,6 +4165,7 @@ default_temperature = 0.7 cost: CostConfig::default(), peripherals: PeripheralsConfig::default(), agents: HashMap::new(), + hooks: HooksConfig::default(), hardware: HardwareConfig::default(), transcription: TranscriptionConfig::default(), }; @@ -4295,6 +4336,7 @@ tool_dispatcher = "xml" cost: CostConfig::default(), peripherals: PeripheralsConfig::default(), agents: HashMap::new(), + hooks: HooksConfig::default(), hardware: HardwareConfig::default(), transcription: TranscriptionConfig::default(), }; diff --git a/src/onboard/wizard.rs b/src/onboard/wizard.rs index 86f8c313b..a09f16f7c 100644 --- a/src/onboard/wizard.rs +++ b/src/onboard/wizard.rs @@ -184,6 +184,7 @@ pub async fn run_wizard(force: bool) -> Result { cost: crate::config::CostConfig::default(), peripherals: crate::config::PeripheralsConfig::default(), agents: std::collections::HashMap::new(), + hooks: crate::config::HooksConfig::default(), hardware: hardware_config, query_classification: crate::config::QueryClassificationConfig::default(), transcription: crate::config::TranscriptionConfig::default(), @@ -430,6 +431,7 @@ async fn run_quick_setup_with_home( cost: crate::config::CostConfig::default(), peripherals: crate::config::PeripheralsConfig::default(), agents: std::collections::HashMap::new(), + hooks: crate::config::HooksConfig::default(), hardware: crate::config::HardwareConfig::default(), query_classification: crate::config::QueryClassificationConfig::default(), transcription: crate::config::TranscriptionConfig::default(),