0.2.9

SkyworkAI/SkyReels-V20.2.9Apr 24, 2026by github-actions[bot]

AI Summary

Introduces a new Page container architecture and expands API support including WebSocket, HTTP caching, and Model Context Protocol (MCP) integration.

Key Highlights

  • New `Page` container architecture with frame restructuring.
  • WebSocket WebAPI implementation with basic protocol support.
  • HTTP Caching support with cache safety checks.
  • CDP enhancements including Emulation.setUserAgentOverride and JSON endpoints.
  • MCP (Model Context Protocol) integration with hover, press, and selectOption tools.

New Features

  • WebSocket WebAPI (WS.close returns DOMException)
  • navigator.userAgentData and XMLHttpRequest.timeout
  • Cookies file support with improved parsing rules
  • IP filter support and TCP keepalive timeout setup
  • V8 snapshot caching for CI and WPT use

Full Release Notes

## Architecture
- **Introduce `Page` container** (Page → frame restructuring; capture next linked-list node before releasing on cleanup)
- **Finalizers moved to pure reference counting**; improved finalizer code; clear identity before forcing finalizers
- ArenaPool gains arena buckets; non-DOM event dispatch extracted

## New Web APIs
- **WebSocket WebAPI** (basic protocol support, fixes; `WS.close` returns DOMException)
- `navigator.userAgentData`
- `XMLHttpRequest.timeout` with curl enforcement
- `EventCounts` API; `PerformanceObserver` `getEntriesByType`/`getEntriesByName`
- `document.writeln`; `document.body` setter
- `media.play()` returns a promise
- Expanded `new Response(...)` and `new Blob(...)` body/type support
- TextDecoder streaming; non-UTF-8 querystring/HTML encoding via `encoding_rs`

## Workers
- Many more Worker APIs enabled across multiple PRs (timer string handler, etc.)

## Cookies
- Cookies file support; improved parsing rules
- Require label boundary when matching domain attribute; reject Set-Cookie domains that are public suffixes; better handling of empty domains
- `Fetch` cookie jar only included for `include` + same-origin

## CDP (Chrome DevTools Protocol)
- `Emulation.setUserAgentOverride` (with restrictions); fake `Page.printToPDF`
- JSON endpoints; emit `Page.javascriptDialogOpening` events for JS dialogs
- `console.group`; console functions defined directly on console instance
- Promote `<label>` to checkbox/radio for CSS-hidden inputs
- Audit enable/disable placeholder handlers; timing fields on several CDP messages
- Improved `loaderId`/`requestId` compatibility; accept `LID-` requestId prefix
- Update WebDriver to use Page; stricter `Page.isSameOrigin`

## HTTP / Networking
- **HTTP Caching** (Cache-Control public by default; cache safety checks)
- **IP filter** support (+ improvements)
- TCP keepalive timeout setup; handle HTTP response with closed socket
- Default write callback to prevent stdout pollution; relax httpclient abort assertion

## MCP
- Add `hover`, `press`, `selectOption`, `setChecked`; improved navigation reliability + CDP support

## Forms
- Encode form data based on form/document encoding

## Build / CI / dev
- Port sqlite3 to the Zig build system; track html5ever Rust sources as cargo step inputs
- V8 snapshot caching (CI cache, WPT use, init snapshot before network, aggressive GC after creation)
- Refactored release workflow + Arch Linux package build; WPT extensions; send WPT completion
- `@import("string.zig")` → `lp.String`, `log.zig` → `lp.log` cleanups
- Docs: glibc requirement, nightly verification, WSL notes, docker localhost exposure

## Stability fixes
- Various crash fixes; UAF on empty/invalid location; double-free on decoder error
- Map Zig `error.RangeError` to JS RangeError; guard against index-out-of-bounds on invalid datetime
- Don't release un-acquired reference on CDP input event; don't release pending MutationObserver records
- Better handling of v8 callbacks with no valid context; error-callback on shared buffer clone