Features
- ui: show the browser engine icon + name on profile cards and rows (e8132c2)
- engine: show a download progress banner for on-demand engines (B4) (2ddf608)
- proxy: accept reversed-colon, '##', and comma proxy paste formats (38f9cb3)
- camoufox: honor start page and hide Chrome extensions on Firefox (bac69b2)
- engine: Camoufox packaging + install-dir hardening (T21) (19d7101)
- engine: make Camoufox selectable in the profile engine picker (T20) (5aa7e14)
- engine: map the profile fingerprint to Camoufox at launch (T20) (d12da2f)
- engine: engine router — per-profile dispatch + Camoufox wired in (T19) (07001b9)
- engine: Camoufox bootstrap + register it in the engine registry (T18) (256bd40)
- engine: FirefoxBrowserDriver via playwright-core + camoufox-js (T17) (21a33be)
- proxy: fall back across geo providers when ipapi is down (311dafb)
- engine: engine in export/import + not-in-roster fallback (T12) (23e7f0f)
- engine: per-engine binary gate at launch (T11) (c855ba5)
- engine: reject engine change while running (T10) (6071a14)
- engine: per-profile engine picker in create + edit (T9) (85c83d2)
- engine: repurpose browserEngine as default for new profiles (T8) (1efbde9)
- engine: per-profile engine resolution in the driver (T7) (eaa85dc)
- engine: engine->bootstrap registry, replace the singleton (T6) (d73c552)
- profiles: add per-profile engine column + types (T5) (4f25732)
- engine-update: engine update controls in Settings (4fd7735)
- engine-update: wire EngineUpdateService into main + IPC + preload (0d909a3)
- engine-update: EngineUpdateStatus type + EngineUpdateService (2a0912d)
Fixes
- camoufox: emit the closing phase from the window-watcher (0fc2545)
- camoufox: open the start page on every launch (2a330b5)
- camoufox: quit the browser when its last window is closed (3f4c7ed)
- linux: launch the browser with --no-sandbox when the kernel blocks userns (136cbe4)
- mcp: keep an explicit CAPTCHA/2FA defer guardrail (b0bc604)
- mcp: avoid blanket human handoffs in agent guidance (0271943)
- camoufox: redirect webgl DB path out of app.asar in packaged builds (B2) (e059c44)
- camoufox: guard the download write-stream + note the pin range (2b4d15f)
- camoufox: keep socks5 proxy intact + block WebRTC leak (H3/H2) (8acf485)
- camoufox: verify the browser binary against a pinned SHA-256 (C1/H1/L1) (fba582f)
- deps: bump adm-zip to >=0.6.1 (GHSA-vwc7-r8mq-g2x9) (3301fab)
- engine: collapse concurrent ensure() onto one install (B1) (c0dc8d7)
- camoufox: dedupe better-sqlite3 to the app's Electron-ABI build (c21482c)
- engine: single locale + acknowledge overrides for Camoufox (T20) (b04f92a)
- engine: let camoufox-js resolve its own binary (properties.json ENOENT) (T20) (8b46662)
- engine: externalize playwright-core + camoufox-js in the main build (T19) (fcf70e7)
- proxy: sharpen proxy-test error classification (review follow-up) (3002ee2)
- proxy: human-readable test errors + latency in the proxy tester (ea2bfdc)
- proxy: bound the whole geo probe by an overall deadline (306d9bb)
- profiles: stop the search-engine reset dialog; gate the debug probe log (9cf402f)
- proxy: throttle socks5 bridge failure logs (d6664c1)
- desktop: guard renderer IPC sends against destroyed webContents (388d175)
- engine-update: only re-check on an off->on auto-update toggle flip (fdfdce1)
- engine-update: protect the session's in-use engine from GC (012b5fd)
Other
- engine: promote curated tools to engine-neutral BrowserDriver verbs (T16) (78c1fce)
- engine: move BrowserEngine to @multizen/types, drop cft (T4) (c850e74)
- engine: drop CFT from Settings UI + CdpSession doc (T3) (acfe478)
- engine: remove CFT branches from ChromiumBrowserDriver (T2) (055775e)
- engine: remove CFT from ChromiumBootstrap (T1) (9c1340f)
- bootstrap: extract reusable installVersion + safe GC primitives (bbc32c0)
Full changelog: v0.3.1...v0.4.0