mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 08:02:28 +00:00
* fix(windows): make the GPU fallback actually remove the GPU child, and stop WSL latching absent Three Windows crash/regression fixes from shipped 1.4.156/1.4.158/1.4.159 crash reports. GPU fallback (cluster D, 14 reports, exit 0x80000003 STATUS_BREAKPOINT): the software-rendering fallback called disableHardwareAcceleration() plus --disable-gpu, neither of which removes the GPU child process — Chromium still spawns it to host Viz and merely drops the backend to software GL. Measured on Windows 11 / Electron 43.1.0: gpuProcessCount stays 1. So a GPU process being killed by a bad driver or an injected DLL kept dying after the fallback engaged, on every launch, for the life of that build (the marker is sticky per version). The crash tails show exactly this: gpu_fallback_applied followed by another GPU crash 1.3s later. --in-process-gpu is the only switch that drops the child count to 0; --disable-software-rasterizer is deliberately excluded because it also kills SwiftShader, which would drop every terminal to the DOM renderer. WSL distro list: a successful-but-empty `wsl --list --quiet` was cached for the process lifetime. `wsl --install` reports zero distros while one is still provisioning, so an early probe latched "no WSL" until restart — WSL appeared during setup and then vanished from the terminal picker. Empty results now re-probe on an exponential window (15s doubling to a 5min cap) while staying readable, so a missing distro is still visible to isKnownMissingDistro. WSL availability: isWslAvailable() latched false on any failure via a bare catch, so one slow wsl.exe activation disabled WSL for the whole session. Failures are now classified — a numeric exit status or ENOENT is answer-shaped and holds for 10min, anything else (timeout, spawn failure) retries after 45s — and both back off per consecutive failure, mirroring isPwshAvailable. Windows-only: every changed path is behind an existing process.platform check, so macOS and Linux behaviour is unchanged. * fix(windows): drop a stale WSL availability failure once a distro list succeeds The distro-list and availability caches expire independently, and getWslRepairReason checks availability first. So a definitive availability failure (numeric exit status or ENOENT) held for 10-30min would keep reporting `wsl-unavailable` even after `wsl --list --quiet` successfully returned a distro — i.e. over a WSL that demonstrably just answered. That is the same latch class this branch fixes, surviving in the gap between the two caches. A non-empty distro list proves wsl.exe ran, so drop the negative availability cache and let the next call re-probe. Scoped to non-empty lists only: those are cached for the process lifetime, so this cannot re-spawn the blocking 5s probe more than once. An empty list keeps its failure cache, since it re-probes on a 15s-to-5min schedule and would otherwise pay the blocking probe far too often. * fix(windows): harden GPU safe mode and WSL recovery * fix(wsl): make capability refresh cleanup explicit --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>