v1.9.0

shivangi-aneja/GaussianSpeechv1.9.0May 7, 2026by skyfallsin

AI Summary

This release introduces responsive viewport testing capabilities, fixes critical tab leaks, and improves session lifecycle robustness to handle timeouts and proxy issues gracefully.

Key Highlights

  • Added `POST /tabs/:tabId/viewport` for setting viewport sizes on live tabs.
  • Implemented safe page close force-kill to prevent page hangs from starving DOM threads.
  • Session destruction on navigation timeout to ensure fresh proxies for subsequent requests.
  • Transparent proxy retry on navigation failures.

New Features

  • Viewport testing endpoint for responsive design checks.
  • Safe page close mechanism with force-kill timeout.
  • Session destruction on timeout.
  • Transparent proxy retry mechanism.

Full Release Notes

## Responsive Viewport Testing

`POST /tabs/:tabId/viewport` — set any viewport size on a live tab for responsive testing. Pass `{ width, height }` and the page re-renders at that size. Useful for testing mobile breakpoints, tablet layouts, or unusual screen dimensions without creating a new session.

## Tab Leak Fix

Two fixes for pages that survive normal cleanup:

- **`safePageClose` force-kill**: If `page.close()` hangs (e.g., stuck unload handler), the page is force-closed after timeout instead of leaked. Previously a single stuck page would starve Firefox of DOM threads.
- **Orphan page reaper**: Background interval detects Playwright pages that escaped `tabGroups` tracking and force-closes them.

## Session Lifecycle Robustness

- **Navigation timeout → session destroy**: A poisoned proxy (Cloudflare holding a connection for 30s) used to kill all subsequent navigations in that context. Now click/navigate/open_url timeouts destroy the session so the next request gets a fresh proxy.
- **Drain locks before close**: Queued tab operations get clean `410 Tab destroyed` instead of cascading `500 Target page closed` errors.
- **Dead-context → 503**: Cascade errors return `session_expired` with retry semantics instead of generic 500.
- **Transparent proxy retry**: Navigation failures from proxy blocks or timeouts automatically retry once with a fresh session.
- **goBack timeout 10s → 20s**: Back navigation uses browser cache; 10s was too short for complex SPA re-renders.

## Install Hardening

- Ship compiled `plugin.js` so install works even when TypeScript compilation is skipped — by @Yeraze (#2140)
- Cross-platform postinstall script with cache validation — by @gustavosmendes (#2149)
- Graceful handling of `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1` (warns + skips warm-up instead of crash loop) — by @gustavosmendes (#2149)

## Fixes & Improvements

- Native memory pressure: restart browser when idle if heap exceeds threshold
- Memory leak false-positive reduction (3 safeguards for watchdog stall detection)
- Crash reporter renamed to telemetry, credentials moved to Cloudflare Worker relay
- OpenClaw plugin metadata + ClawHub publish workflow

## Thank You

- @cunninghambe — co-authored viewport endpoint and tab leak fix (#2470, #2471)
- @gustavosmendes — install hardening and `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` support (#2149)
- @Yeraze — compiled plugin.js fix (#2140)
- @Xy2002 — Railway deployment configuration (#651)