# AG X Changelog ## v2.0.5 (2026-05-23) ### Fixed - **Critical**: Translation proxy now uses system Node.js instead of Electron binary - Previous: Electron's `process.execPath` would start a GUI process instead of CLI Node - Now: Auto-detects system Node via `which node` fallback to `/usr/bin/node` - **Critical**: Removed duplicate proxy start (was running proxy twice, causing port conflicts) - `main.js` no longer starts `apiProxy` — `ensureProxyStarted()` in `languageServer.js` handles it - **Critical**: Added port 48080 availability check before spawning proxy - Prevents duplicate proxy processes from leftover/orphaned instances - **Fixed**: Welcome screen `welcome:choice` handler had double `resolve()` call - Added `return` after Google Gemini handler to prevent fallthrough - **Fixed**: `settings.html` close button used deprecated `remote.getCurrentWindow()` - Now uses `ipcRenderer.send('provider:close-settings')` exclusively - **Fixed**: `translationProxy.applyConfig()` now appends `/v1` for `openai-compat` backends - **Fixed**: Proxy process is no longer `detached:true` with `unref()` — properly tracked as child - **Fixed**: SingletonLock cleanup on startup to prevent stale lock issues ### Changed - Proxy stdout/stderr now piped to parent for proper logging - `syncProviderToEndpoints()` runs on every startup (not just first run) - Version bumped to 2.0.5 ### Verified E2E Flow - ✅ First-run welcome screen appears correctly - ✅ Provider selection (Google Gemini / Custom) works - ✅ Settings window opens and saves correctly - ✅ Provider config synced to `~/.codex/endpoints.json` on every startup - ✅ Translation proxy starts on port 48080 with correct backend config - ✅ Language Server spawned with `--api_server_url http://127.0.0.1:48080` - ✅ Proxy health/models/endpoints endpoints all respond correctly - ✅ `--ag-reset` flag correctly re-triggers welcome screen - ✅ Proxy survives LS restarts and port changes