From a98fdb0c7bf90c586ac054e4e2780b3c2c6ef36b Mon Sep 17 00:00:00 2001 From: asepharyana Date: Sun, 12 Jul 2026 02:21:08 +0700 Subject: [PATCH] feat: enhance AppConfig loading to merge default providers and set API key --- src/controller/input.rs | 6 ++++++ src/model/app_config.rs | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/controller/input.rs b/src/controller/input.rs index 5e30a0d..9715894 100644 --- a/src/controller/input.rs +++ b/src/controller/input.rs @@ -280,6 +280,12 @@ fn handle_overlay_enter(state: &mut AppStateRest) -> Vec { let model = cfg.default_model.clone().unwrap_or_else(|| "claude-opus-4-8".to_string()); state.settings.provider = provider.clone(); state.settings.model = model.clone(); + // Set API key from provider's default if not already configured + if state.settings.api_key.is_none() || state.settings.api_key.as_deref() == Some("") { + if let Some(ref key) = cfg.default_api_key { + state.settings.api_key = Some(key.clone()); + } + } let _ = state.settings.save(); state.push_toast(crate::app::state::types::Toast::new( crate::app::state::types::ToastKind::Success, diff --git a/src/model/app_config.rs b/src/model/app_config.rs index 7af0076..12003b6 100644 --- a/src/model/app_config.rs +++ b/src/model/app_config.rs @@ -60,9 +60,15 @@ impl AppConfig { pub fn load() -> Self { let store = super::store::Store::new(); let path = store.base_dir.join("app_config.json"); - std::fs::read_to_string(path) + let mut cfg: AppConfig = std::fs::read_to_string(path) .ok() .and_then(|s| serde_json::from_str(&s).ok()) - .unwrap_or_default() + .unwrap_or_default(); + // Merge any default providers not present in the loaded config + let defaults = Self::default(); + for (name, provider) in defaults.providers { + cfg.providers.entry(name).or_insert(provider); + } + cfg } }