From 210bff96c23514b0cc2b4b2771aff90a8a6ea8a1 Mon Sep 17 00:00:00 2001 From: makoMakoGo <48956204+makoMakoGo@users.noreply.github.com> Date: Sun, 29 Mar 2026 15:52:37 +0800 Subject: [PATCH] fix(env): detect bun global bin paths in CLI scan (#1742) --- src-tauri/src/commands/misc.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src-tauri/src/commands/misc.rs b/src-tauri/src/commands/misc.rs index 3d78534f1..e07f1482f 100644 --- a/src-tauri/src/commands/misc.rs +++ b/src-tauri/src/commands/misc.rs @@ -500,7 +500,8 @@ fn extend_from_path_list( /// OpenCode install.sh 路径优先级(见 https://github.com/anomalyco/opencode README): /// $OPENCODE_INSTALL_DIR > $XDG_BIN_DIR > $HOME/bin > $HOME/.opencode/bin -/// 额外扫描 Go 安装路径(~/go/bin、$GOPATH/*/bin)。 +/// 额外扫描 Bun 默认全局安装路径(~/.bun/bin) +/// 和 Go 安装路径(~/go/bin、$GOPATH/*/bin)。 fn opencode_extra_search_paths( home: &Path, opencode_install_dir: Option, @@ -515,6 +516,7 @@ fn opencode_extra_search_paths( if !home.as_os_str().is_empty() { push_unique_path(&mut paths, home.join("bin")); push_unique_path(&mut paths, home.join(".opencode").join("bin")); + push_unique_path(&mut paths, home.join(".bun").join("bin")); push_unique_path(&mut paths, home.join("go").join("bin")); } @@ -1280,6 +1282,7 @@ mod tests { assert_eq!(paths[1], PathBuf::from("/xdg/bin")); assert!(paths.contains(&PathBuf::from("/home/tester/bin"))); assert!(paths.contains(&PathBuf::from("/home/tester/.opencode/bin"))); + assert!(paths.contains(&PathBuf::from("/home/tester/.bun/bin"))); assert!(paths.contains(&PathBuf::from("/home/tester/go/bin"))); assert!(paths.contains(&PathBuf::from("/go/path1/bin"))); assert!(paths.contains(&PathBuf::from("/go/path2/bin"))); @@ -1290,7 +1293,7 @@ mod tests { let home = PathBuf::from("/home/tester"); let same_dir = Some(std::ffi::OsString::from("/same/path")); - let paths = opencode_extra_search_paths(&home, same_dir.clone(), same_dir.clone(), None); + let paths = opencode_extra_search_paths(&home, same_dir.clone(), same_dir, None); let count = paths .iter() @@ -1299,6 +1302,18 @@ mod tests { assert_eq!(count, 1); } + #[test] + fn opencode_extra_search_paths_deduplicates_bun_default_dir() { + let home = PathBuf::from("/home/tester"); + let paths = opencode_extra_search_paths(&home, None, None, None); + + let count = paths + .iter() + .filter(|path| **path == PathBuf::from("/home/tester/.bun/bin")) + .count(); + assert_eq!(count, 1); + } + #[cfg(not(target_os = "windows"))] #[test] fn tool_executable_candidates_non_windows_uses_plain_binary_name() {