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>
1 parent 23ac506 commit b9464b4c4db440ad368f78d213b07f9c268ccb09
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 20 hours ago
Showing 6 changed files
View
packages/extension/e2e.mjs
View
packages/extension/manifest.template.json
View
packages/extension/src/background/index.ts
View
packages/extension/src/background/settings.ts
View
packages/extension/src/content/index.ts
View
packages/extension/src/options/Options.vue