| 2026-09-17 |

Record screen video around the cursor + console dump per recording
...
The recorder now captures continuous screen video instead of single frames
per event. captureVisibleTab is quota-limited to ~2 shots/sec, so the video
rides a CDP screencast (Page.startScreencast) over the chrome.debugger
connection: frames arrive throttled to ~15 fps, decimated past 600 to bound
memory. At submit, the GIF is cropped to a 512×512 square centered on the
cursor position from the mouse track at each frame's time, paced by real
frame gaps — a "video" of exactly the area the tester was looking at.
Firefox and a busy debugger degrade to the old per-event screenshots; the
video path is a videoCapture setting (default on, like hoverReplay).
Console errors now ride along with recordings: a MAIN-world document_start
tap wraps console.error/warn and the uncaught error/rejection handlers,
posts through the relay content script, and lands as "console" timeline
steps (capped at 200, text truncated at 2000 chars). New consoleCapture
setting; the server schema, shared types and the panel timeline (warning
icon) accept the new step type; replay counts such no-effect steps as
played so the played/total summary stays honest.
E2E generates a console error + warning mid-recording, asserts the console
steps, and validates the GIF header: 512px wide with 3+ frames.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
21 hours ago
|

Replay hover events: synthetic mouse family + CSS :hover via debugger API
...
The virtual cursor now dispatches the full mouse event family as it walks
the recorded path — mouseover/mouseenter on the new target, mouseout/
mouseleave (non-bubbling) on the previous one, relatedTarget wired up, and
throttled mousemove — so JS hover handlers stay live during replay.
CSS :hover can't be triggered by synthetic events, so when the hoverReplay
setting is on (default) the background attaches chrome.debugger to the
replay tab and mirrors cursor positions as trusted Input.dispatchMouseEvent
mouseMoved commands (~20 Hz), which light up real :hover styles. Firefox has
no debugger API and another debugger may hold the tab — both degrade
gracefully to JS-level hover only. New "debugger" permission; toggle in the
options page.
E2E now latches both hover kinds on the test page (sticky mouseover flag +
rAF-sampled :hover poll) and asserts the synthetic family; the CSS check is
reported but stays non-fatal since the debugger can be legitimately absent.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
22 hours ago
|
Extension: popup UI, panel URL, icon fix, GIF tracks and track replay
...
- Popup replaces the auto-start picker: mode choice (element note /
record steps), latest report card with open / replay / delete, web
panel link; share links open at panelUrl (default :5173)
- Register the Phosphor font via the FontFace API — constructable
stylesheets ignore @font-face, which left overlay icons empty
- Recorder tracks upload as one animated GIF (gifenc) instead of per-
step screenshots; frames follow event pacing, UI hidden on capture
- Replay a recorded track from the popup: background opens the start
page, re-executes click/input/url_change steps with original pacing
and flashes the result in the overlay
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|
Extension popup: mode choice, latest report, panel link; auto-copied share links
...
- Toolbar click now opens a popup instead of jumping straight into the
picker: two mode buttons (element note / record steps with live step
count), the latest report of the default project with open and
two-step delete, and an "Open web panel" shortcut to the project page.
- New background messages (start_picker, toggle_recorder, latest_report,
delete_report, open_panel) resolve the active tab themselves; the
action.onClicked path stays for keyboard-driven flows.
- Settings gain panelUrl (falls back to serverUrl); options page gets a
"Web panel URL" input.
- After a note is submitted its share link is copied to the clipboard
automatically (with an execCommand fallback) and a brief toast
confirms it; e2e asserts the clipboard content.
- Build: new popup entry (own CSS chunk), manifest default_popup.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|

Extension: picker, note composer, recorder + infra (Makefile, prod compose, README)
...
- MV3 extension for Chrome and Firefox: single codebase, per-entry IIFE
builds (background / content / options), manifests generated per target
- Background service worker owns all networking (Bearer token from
storage.local), captureVisibleTab (windowId!), recorder event buffer
with offset_ms and auto-screenshots on clicks
- Content overlay in a closed shadow root (constructable stylesheets,
kit CSS fetched from assets/style.css with /assets URL rewrite);
PickerLayer, NoteComposer (autofocus, Ctrl+Enter submit),
RecorderBar (step counter, note, stop)
- Options page: server URL, login, default project
- Recorder steps link screenshots by uploaded file id (server accepts
attachment id or file id); environment/element JSONB serialized with
mode="json" (datetime captured_at broke inserts)
- e2e harness: headless Chromium + extension, note + recording flows
- Makefile, docker-compose.prod.yml (caddy :8081 + static panel),
deploy/Caddyfile, README (ru) with extension install and /assets notes
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|