Record the mouse path and play it back with a virtual cursor
- Recording: content script samples mousemove at ~25 Hz (2 px / 40 ms
  thresholds), batches it to the background every second and before
  submit; stored as reports.mouse_track (viewport + points, capped and
  decimated server-side) via a new alembic migration
- Replay: a virtual cursor (overlay arrow) walks the recorded path,
  scaled to the current viewport, dispatching synthetic mousemoves so
  JS hover handlers stay live; clicks snap the cursor to the target
- Replay errors: page-load timeout aborts with a clear message, a
  closed tab aborts, per-step failures (missing elements) are
  collected, reported in the flash and in the replay result
- Panel: "Start replay" button on recording reports talks to the
  extension through a new tiny relay content script (window messages,
  no extension-id config), with presence check and toasts for
  missing extension / no response / partial replay (en + ru)

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 82db818 commit 166a931d26e1a673322b6300fdd9b6ef7036201f
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 21 hours ago
Showing 16 changed files
View
packages/extension/e2e.mjs
View
packages/extension/manifest.template.json
View
packages/extension/scripts/build.mjs
View
packages/extension/src/background/index.ts
View
packages/extension/src/content/index.ts
View
packages/extension/src/relay.ts 0 → 100644
View
packages/extension/verify-cursor.mjs 0 → 100644
View
packages/extension/vite.config.ts
View
packages/shared/src/api.ts
View
packages/web/src/i18n/en.json
View
packages/web/src/i18n/ru.json
View
packages/web/src/pages/ReportPage.vue
View
server/alembic/versions/20260917_1910_a3f2c91d7b40_report_mouse_track.py 0 → 100644
View
server/app/models.py
View
server/app/routers/reports.py
View
server/app/schemas.py