From e7ff2ee47d6e82b41906a90257279b07b2c4b282 Mon Sep 17 00:00:00 2001 From: tison Date: Thu, 23 Apr 2026 08:55:11 +0800 Subject: [PATCH] fix: gemini cli resume session can have project_dir (#2240) Signed-off-by: tison --- src-tauri/src/session_manager/providers/gemini.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/session_manager/providers/gemini.rs b/src-tauri/src/session_manager/providers/gemini.rs index c600f7bd7..73ae17868 100644 --- a/src-tauri/src/session_manager/providers/gemini.rs +++ b/src-tauri/src/session_manager/providers/gemini.rs @@ -17,7 +17,7 @@ pub fn scan_sessions() -> Vec { let mut sessions = Vec::new(); - // Iterate over project hash directories: tmp//chats/session-*.json + // Iterate over project directories: tmp//chats/session-*.json let project_dirs = match std::fs::read_dir(&tmp_dir) { Ok(entries) => entries, Err(_) => return Vec::new(), @@ -34,13 +34,22 @@ pub fn scan_sessions() -> Vec { Err(_) => continue, }; + let project_root_file = entry.path().join(".project_root"); + let project_dir = match std::fs::read_to_string(project_root_file) { + Ok(name) => Some(name), + Err(_) => None, + }; + for file_entry in chat_files.flatten() { let path = file_entry.path(); if path.extension().and_then(|e| e.to_str()) != Some("json") { continue; } if let Some(meta) = parse_session(&path) { - sessions.push(meta); + sessions.push(SessionMeta { + project_dir: project_dir.clone(), + ..meta + }); } } } @@ -159,7 +168,7 @@ fn parse_session(path: &Path) -> Option { session_id: session_id.clone(), title: title.clone(), summary: title, - project_dir: None, // project hash is not reversible + project_dir: None, // (optionally) populated later created_at, last_active_at: last_active_at.or(created_at), source_path: Some(source_path),