Skip to content

v0.2.4 — localStorage persistence, robots.txt by default, 30+ engine fixes

Choose a tag to compare

@github-actions github-actions released this 29 Aug 03:01
· 35 commits to main since this release

v0.2.4 ships 30+ fixes landed since v0.2.3 — the biggest batch yet. Everything below is verified by the hosted instance and covered by tests in-repo.

Highlights

  • localStorage survives restarts — per-origin storage is flushed to disk and reloaded on boot (upstream obscura#629). Sessions, consent banners, and login hints now persist across process restarts.
  • robots.txt compliance on by default — RFC 9309 parser, honored on every autonomous fetch path (/fetch, /screenshot, /download, /click, /eval, body-grab). AGINXBROWSER_RESPECT_ROBOTS=0 to opt out.
  • Session recording & replay — interactive sessions record every action and can export a runnable curl replay script (session_export).
  • MCP session semantics — new session_list tool; Mcp-Session-Id dual semantics (join existing / spawn new) documented.
  • One-line installer hardened — release-asset mirror fallback, writable-bindir detection, docker hint for linux/arm64. Pin with VERSION=v0.2.4.

Benchmark vs headless Chrome

Real-page tier reporting added (/bench):

metric aginxbrowser (auto) headless Chrome
page load 532 ms 4053 ms
memory / page 227 MB 2.1 GB

Chrome in the same region also hard-failed 12.5% of pages on CN routing; aginxbrowser 0%.

Rendering engine (diting)

  • getComputedStyle now reads the full stylesheet cascade, not just inline styles — and returns a whole-object snapshot (obscura#738 trap + perf).
  • Hit-testing follows paint order, so z-index stacking is respected by elementFromPoint (obscura#738).
  • transform: translate(...) is computed into geometry (obscura#740).
  • Float layout: zones follow document order, same-side floats form a rail, Vector 2022 grid scaffold — float displacement no longer escapes grid containers; navboxes land at the bottom where they belong.
  • matchMedia evaluates against the live viewport.

CDP / automation

  • dispatchMouseEvent emits the pointer pair before the mouse pair (obscura#739).
  • Input.insertText implemented (obscura#577).
  • Box-model/quads emit integer coordinates (obscura#576).
  • objectId lookups: JSON literals resolve honestly; number remote objects spelled like Chrome (obscura#541).
  • setExtraHTTPHeaders fans out to the stealth transport (obscura#571).
  • Enter in a textarea splices the newline at the caret.
  • Pending JS navigation drained on click/eval surfaces (obscura#618).
  • srcset: prefetch the selection winner only, not every candidate (obscura#667/#662 class).

Network / stealth

  • Implicit env-proxy matcher pinned off: HTTP_PROXY/HTTPS_PROXY/ALL_PROXY no longer silently hijack engine traffic — AGINXBROWSER_PROXY is the only proxy knob (obscura#491).
  • One source of truth for the User-Agent across HTTP transports and the in-page JS persona (obscura#481).
  • fetch/XHR response bodies and robots.txt streams are size-capped (obscura#581 OOM).

Housekeeping

  • Compiler-flagged dead code swept; import-map prefix-match never_loop fixed.
  • README catches up with the engine registry (diting modules).
  • Docker verify strips the leading v from the image tag.

Full changelog: v0.2.3...v0.2.4