From 6775bc2c9650ee65e4e01bc87ffc60ee4b767c27 Mon Sep 17 00:00:00 2001 From: Wes Date: Wed, 8 Jul 2026 13:19:42 -0600 Subject: [PATCH] fix(desktop): async-ify the auto-restart setter after the perf-sweep collision MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Semantic merge collision: #1641 rewrote agent_settings.rs to the async/spawn_blocking pattern (State import dropped for Manager) while #1649 added set_managed_agent_auto_restart in the file's prior synchronous style. Both green independently; the union does not compile (E0425: State not found). Rewrites the setter to match the file's current pattern — same body, same semantics, now off the main thread like its start-on-app-launch sibling. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes --- .../src-tauri/src/commands/agent_settings.rs | 66 ++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/desktop/src-tauri/src/commands/agent_settings.rs b/desktop/src-tauri/src/commands/agent_settings.rs index 3716ea2127..54b52bd197 100644 --- a/desktop/src-tauri/src/commands/agent_settings.rs +++ b/desktop/src-tauri/src/commands/agent_settings.rs @@ -56,42 +56,46 @@ pub async fn set_managed_agent_start_on_app_launch( } #[tauri::command] -pub fn set_managed_agent_auto_restart( +pub async fn set_managed_agent_auto_restart( pubkey: String, auto_restart_on_config_change: bool, app: AppHandle, - state: State<'_, AppState>, ) -> Result { - let _store_guard = state - .managed_agents_store_lock - .lock() - .map_err(|error| error.to_string())?; - let mut records = load_managed_agents(&app)?; - let mut runtimes = state - .managed_agent_processes - .lock() - .map_err(|error| error.to_string())?; + tokio::task::spawn_blocking(move || { + let state = app.state::(); + let _store_guard = state + .managed_agents_store_lock + .lock() + .map_err(|error| error.to_string())?; + let mut records = load_managed_agents(&app)?; + let mut runtimes = state + .managed_agent_processes + .lock() + .map_err(|error| error.to_string())?; - let (sync_changed, exited_pubkeys) = - sync_managed_agent_processes(&mut records, &mut runtimes, ¤t_instance_id(&app)); - if sync_changed { - save_managed_agents(&app, &records)?; - } - for pubkey in &exited_pubkeys { - state.clear_session_cache(pubkey); - } + let (sync_changed, exited_pubkeys) = + sync_managed_agent_processes(&mut records, &mut runtimes, ¤t_instance_id(&app)); + if sync_changed { + save_managed_agents(&app, &records)?; + } + for pubkey in &exited_pubkeys { + state.clear_session_cache(pubkey); + } - { - let record = find_managed_agent_mut(&mut records, &pubkey)?; - record.auto_restart_on_config_change = auto_restart_on_config_change; - record.updated_at = now_iso(); - } + { + let record = find_managed_agent_mut(&mut records, &pubkey)?; + record.auto_restart_on_config_change = auto_restart_on_config_change; + record.updated_at = now_iso(); + } - save_managed_agents(&app, &records)?; - let record = records - .iter() - .find(|record| record.pubkey == pubkey) - .ok_or_else(|| format!("agent {pubkey} not found"))?; - let personas = load_personas(&app).unwrap_or_default(); - build_managed_agent_summary(&app, record, &runtimes, &personas) + save_managed_agents(&app, &records)?; + let record = records + .iter() + .find(|record| record.pubkey == pubkey) + .ok_or_else(|| format!("agent {pubkey} not found"))?; + let personas = load_personas(&app).unwrap_or_default(); + build_managed_agent_summary(&app, record, &runtimes, &personas) + }) + .await + .map_err(|e| format!("spawn_blocking failed: {e}"))? }