diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 1e5e2fc..60d8cb3 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -1219,6 +1219,55 @@ pub struct MemoryFilesResponse { #[tauri::command] pub async fn list_memory_files() -> Result { + // On Windows, we need to look in the WSL home directory + // On Linux/Mac, use the native home directory + #[cfg(target_os = "windows")] + { + list_memory_files_via_wsl().await + } + + #[cfg(not(target_os = "windows"))] + { + list_memory_files_native().await + } +} + +/// List memory files via WSL (for Windows) +#[cfg(target_os = "windows")] +async fn list_memory_files_via_wsl() -> Result { + use std::process::Command; + + // Use WSL to find all memory files in the WSL home directory + // This script finds all "memory" directories and lists their files + let script = r#" + find ~/.claude/projects -type d -name memory 2>/dev/null | while read dir; do + find "$dir" -maxdepth 1 -type f 2>/dev/null + done | sort + "#; + + let output = Command::new("wsl") + .args(["-e", "bash", "-l", "-c", script]) + .output() + .map_err(|e| format!("Failed to execute WSL command: {}", e))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + return Err(format!("Failed to list memory files: {}", stderr)); + } + + let stdout = String::from_utf8_lossy(&output.stdout); + let files: Vec = stdout + .lines() + .filter(|line| !line.trim().is_empty()) + .map(|line| line.trim().to_string()) + .collect(); + + Ok(MemoryFilesResponse { files }) +} + +/// List memory files using native filesystem (for Linux/Mac) +#[cfg(not(target_os = "windows"))] +async fn list_memory_files_native() -> Result { use std::fs; // Get the .claude directory in the user's home diff --git a/src/lib/components/MemoryBrowserPanel.svelte b/src/lib/components/MemoryBrowserPanel.svelte index d500325..aa62a37 100644 --- a/src/lib/components/MemoryBrowserPanel.svelte +++ b/src/lib/components/MemoryBrowserPanel.svelte @@ -1,7 +1,6 @@