diff --git a/src/mcp_server_gitea.rs b/src/mcp_server_gitea.rs index 39201d5..40cfc99 100644 --- a/src/mcp_server_gitea.rs +++ b/src/mcp_server_gitea.rs @@ -266,70 +266,33 @@ fn resolve_binary_path(explicit_path: &Option) -> Result { return Ok(path.clone()); } - // Build list of all paths to try IN ORDER - let mut search_paths = vec![]; + // WASM Limitation: Cannot reliably detect platform or use exists() checks. + // Simple approach: Try common absolute paths in priority order. + // Return the first one - Zed will execute it and fail clearly if not found. - // Note: We compile to WASM (wasm32), so std::env::consts::OS is always "wasm32" - // We can't reliably detect the runtime OS in WASM, so we just try all common paths - // in a reasonable order that favors Linux (most common) then Homebrew (macOS) + let mut paths = vec![ + "/usr/local/bin/gitea-mcp".to_string(), + "/usr/local/bin/gitea-mcp-server".to_string(), + "/usr/bin/gitea-mcp".to_string(), + "/usr/bin/gitea-mcp-server".to_string(), + "/opt/homebrew/bin/gitea-mcp".to_string(), + "/opt/homebrew/bin/gitea-mcp-server".to_string(), + ]; - // Try standard Linux/Unix system paths first - search_paths.push("/usr/local/bin/gitea-mcp".to_string()); - search_paths.push("/usr/local/bin/gitea-mcp-server".to_string()); - search_paths.push("/usr/bin/gitea-mcp".to_string()); - search_paths.push("/usr/bin/gitea-mcp-server".to_string()); - - // Add home directory paths + // Add home directory paths if HOME is available if let Ok(home) = std::env::var("HOME") { - search_paths.push(format!("{}/.local/bin/gitea-mcp", home)); - search_paths.push(format!("{}/.local/bin/gitea-mcp-server", home)); - search_paths.push(format!("{}/bin/gitea-mcp", home)); - search_paths.push(format!("{}/bin/gitea-mcp-server", home)); - search_paths.push(format!("{}/.cargo/bin/gitea-mcp", home)); - search_paths.push(format!("{}/.cargo/bin/gitea-mcp-server", home)); + paths.push(format!("{}/.local/bin/gitea-mcp", home)); + paths.push(format!("{}/.local/bin/gitea-mcp-server", home)); + paths.push(format!("{}/.cargo/bin/gitea-mcp", home)); + paths.push(format!("{}/.cargo/bin/gitea-mcp-server", home)); } - // Try Homebrew paths (macOS) - search_paths.push("/opt/homebrew/bin/gitea-mcp".to_string()); - search_paths.push("/opt/homebrew/bin/gitea-mcp-server".to_string()); - - // Return the first path in our list - // The system will try to execute this, and if it exists, it works. - // If not, the error message will show exactly which path was tried. - if !search_paths.is_empty() { - return Ok(search_paths[0].clone()); + // Return the first path + if let Some(path) = paths.first() { + return Ok(path.clone()); } - // Fallback: search PATH environment variable for absolute paths - if let Ok(path_env) = std::env::var("PATH") { - let separator = if cfg!(target_os = "windows") { - ";" - } else { - ":" - }; - for path_dir in path_env.split(separator) { - if path_dir.is_empty() || !path_dir.starts_with("/") { - continue; - } - for binary_name in &["gitea-mcp", "gitea-mcp-server"] { - let abs_path = format!("{}/{}", path_dir, binary_name); - return Ok(abs_path); - } - } - } - - // Binary not found - return error with detailed guidance - Err("gitea-mcp binary not found. Please set gitea_mcp_binary_path in your Zed settings.\n\n\ - Example for macOS with Homebrew:\n\ - brew install gitea/tap/gitea-mcp-server\n\ - Then add to settings.json:\n\ - \"gitea_mcp_binary_path\": \"/opt/homebrew/bin/gitea-mcp-server\"\n\n\ - Example for Linux:\n\ - Download from: https://gitea.com/gitea/gitea-mcp/releases\n\ - Or build: git clone https://gitea.com/gitea/gitea-mcp.git && cd gitea-mcp && make install\n\n\ - Alternatively, use Docker mode by setting:\n\ - \"use_docker\": true" - .to_string()) + Ok("/usr/local/bin/gitea-mcp".to_string()) } // Register the extension with Zed