Repository navigation
Ghostfox 0.9.1 β the hearing + smell release
67 tools. M3 AccEvent stream + M3.5 smell complete the senses.
M3 hearing β the a11y tree as a stream
page_a11y_events: compacted records from the engine's own accessible-event topic β focus moves, text inserted/removed (with modifiedText + offset), name/value/state changes, caret moves, live-region announcements. The incremental diff; no more full-tree re-walks. clear=true drains the buffer.
M3.5 smell β paint & timing sense
page_frame_stats: the jank detector β rAF frame-cadence stats from the privileged frame script (avg/p50/p95/p99/max delta, jankyFrames, throttledFrames). Clean page β16.7ms; busy main thread = delta spikes.page_timing_report: Navigation Timing (dnsMs/tlsMs/connectMs/ttfbMs/domInteractive/loadEvent) + paint entries.page_wait_visual: refresh-driver visual stability β blocks until frames flow at normal cadence for quiet_ms; the sleep-killer.- netcap entries now carry per-request
timing{dnsMs, tlsMs, connectMs, ttfbMs, rawTiming} from nsITimedChannel.
Fixed while wiring the streams
t.Objectwas never defined in the Juggler protocol validator β every free-form-object tool (page_proprio, page_cookie_events, the new streams) threw ILLDEFINED SCHEME. Defined now.Page.getProprioStatereturned the bare state instead of the declared {state} shape.- nsITimedChannel phases are epoch microseconds β timing math was 1000x off; converted to ms, unavailable phases nulled.
- timing enrichment now runs in the primary page-open netcap listener too.
Plus everything from the 0.9.1 changelog (network interception broker, page_captcha_vision, identity_morph, HTTP transport, page_a11y_set_text, page_proprio, page_cookie_events, session_vitals).