From 148df18eca249cf5a331e4c701d87d8b5d88ce1c Mon Sep 17 00:00:00 2001 From: oshtz Date: Fri, 24 Jul 2026 19:06:15 +0300 Subject: [PATCH] fix(desktop): read pair-scoped agent logs Signed-off-by: oshtz --- desktop/src-tauri/src/commands/agent_logs.rs | 34 ++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/desktop/src-tauri/src/commands/agent_logs.rs b/desktop/src-tauri/src/commands/agent_logs.rs index 25d3d4d1c4..12ee353a31 100644 --- a/desktop/src-tauri/src/commands/agent_logs.rs +++ b/desktop/src-tauri/src/commands/agent_logs.rs @@ -1,13 +1,21 @@ +use std::path::PathBuf; + use tauri::{AppHandle, Manager}; use crate::{ app_state::AppState, managed_agents::{ - load_managed_agents, managed_agent_log_path, read_log_tail, BackendKind, - ManagedAgentLogResponse, + load_managed_agents, managed_agent_log_path, managed_agent_runtime_log_path, read_log_tail, + workspace_pair_key, BackendKind, ManagedAgentLogResponse, }, }; +fn select_log_path(pair_log_path: Option, legacy_log_path: PathBuf) -> PathBuf { + pair_log_path + .filter(|path| path.exists()) + .unwrap_or(legacy_log_path) +} + #[tauri::command] pub async fn get_managed_agent_log( pubkey: String, @@ -29,7 +37,10 @@ pub async fn get_managed_agent_log( return Err("logs are not available for remote agents".to_string()); } - let log_path = managed_agent_log_path(&app, &pubkey)?; + let pair_log_path = workspace_pair_key(&app, record) + .map(|key| managed_agent_runtime_log_path(&app, &key)) + .transpose()?; + let log_path = select_log_path(pair_log_path, managed_agent_log_path(&app, &pubkey)?); Ok(ManagedAgentLogResponse { content: read_log_tail(&log_path, line_count.unwrap_or(120) as usize)?, log_path: log_path.display().to_string(), @@ -38,3 +49,20 @@ pub async fn get_managed_agent_log( .await .map_err(|e| format!("spawn_blocking failed: {e}"))? } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn selects_existing_pair_log_and_falls_back_to_legacy_log() { + let dir = tempfile::tempdir().expect("tempdir"); + let legacy = dir.path().join("agent.log"); + let pair = dir.path().join("agent-relay.log"); + + assert_eq!(select_log_path(Some(pair.clone()), legacy.clone()), legacy); + + std::fs::write(&pair, "pair log").expect("write pair log"); + assert_eq!(select_log_path(Some(pair.clone()), legacy), pair); + } +}