Previously LANG/LC_ALL were only set on Windows, so git stderr was
localized on macOS/Linux and substring checks for English messages
(e.g. 'unknown revision or path not in the working tree') silently
failed — empty-repo/missing-branch cases surfaced as red error
banners in the Git log panel instead of rendering as empty lists.
Replace lexicographic sort with numeric (major, minor, patch) sort
across all 7 version-directory sort sites in find_node_bin_dir.
Lexicographic sort incorrectly orders v20.9 > v20.11 (because '9' > '1')
which could select an older Node.js version and cause agent preflight
failures for version-gated agents like OpenClaw (requires >=22.12.0).
- Fix thread safety: replace #[tokio::main] in codeg_server with manual
runtime construction so set_var runs before any worker threads exist
- Fix nvm alias branch: sort matched candidates (read_dir order is
undefined) and skip non-numeric aliases like lts/* that cannot be
resolved without full nvm evaluation
- Fix HOME missing: accept Option<&Path> for home so env-var-only
discovery (NVM_HOME, VOLTA_HOME, FNM_DIR, etc.) still works in
Docker / systemd environments without HOME set
- Refactor resolve_dir to accept an env var chain, eliminating all
inline Option chains for fnm, nvm-windows, mise, and scoop
Expand find_node_bin_dir to support 9 version managers / installation
methods across macOS, Linux, and Windows:
- nvm (Unix): fix alias duplicate candidates, skip symbolic aliases
like lts/* that cannot be resolved without full nvm evaluation
- nvm-windows: detect via %NVM_SYMLINK% and %NVM_HOME% with correct
directory layout (node.exe directly in version dir, no bin/)
- fnm: use platform-correct defaults (%APPDATA%/fnm on Windows,
$XDG_DATA_HOME/fnm on Unix) instead of hardcoded Unix path
- volta: validate that a concrete Node image exists before adding
the shim directory, preventing cryptic errors when volta is
installed but no Node version has been set
- asdf (Unix): $ASDF_DATA_DIR or ~/.asdf/installs/nodejs/
- mise/rtx (cross-platform): $MISE_DATA_DIR with XDG fallback
- n (Unix): $N_PREFIX or /usr/local/n/versions/node/
- Homebrew (macOS): /opt/homebrew and /usr/local prefixes
- Scoop (Windows): nodejs-lts and nodejs app detection
Also improve production readiness:
- Document thread-safety requirements for set_var (unsafe in ed. 2024)
- Add warning log when HOME is unset (Docker / minimal containers)
- Clarify FNM_MULTISHELL_PATH scope (server binary only, not GUI)
- Note lexicographic sort limitation for semver edge cases
- Set UTF-8 environment variables (PYTHONUTF8, PYTHONIOENCODING, LANG,
LC_ALL) on all child processes via process.rs helpers
- Configure PTY terminals per shell flavor: chcp 65001 for cmd.exe,
[Console]::OutputEncoding for PowerShell, LANG=C.UTF-8 for Git Bash
- Use /K and -NoExit for interactive shells to avoid nested processes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>