3 Commits

Author SHA1 Message Date
Tommy D. Rossi 6224a0f374 fix: render ghost cursor as inline SVG instead of a data URL background
The ghost cursor painted its arrow with
`background-image: url("data:image/svg+xml;base64,…")`. Pages with a
strict `img-src` CSP refuse to load that URL, so on Hacker News every
navigation logged a CSP violation and the cursor rendered as an empty
box.

Changes:

- `setInnerSvg()` parses the markup with `DOMParser`, validates the root
  is a real SVG element, imports it into the document, and appends it to
  the cursor. No image URL is involved, so no `img-src` rule applies.
- The generated cursor module now exports raw SVG markup
  (`pointer-macos-tahoe-svg.ts`) instead of a base64 data URL
  (`pointer-macos-tahoe-data-url.ts`). `encode-screenstudio-cursor.ts`
  writes the markup with `JSON.stringify`.
- `applyRuntimeVisualOptions()` clears previous children and resets
  `background-image` on every style switch, so toggling between
  `screenstudio`, `minimal`, and `dot` never stacks two arrows.

The always-on cursor test now asserts the injected element contains a
literal `<svg>` and no `data:image/svg` reference.

Session: ses_fe45ea8e3ffepbcZz6OQQ9sFSH
2026-08-20 16:23:03 +02:00
Tommy D. Rossi 5c58cac7da docs: improve recording guidance and tune cursor defaults
Clarify recording guidance to prefer interaction-driven flows (click, hover, typing) so ghost cursor motion is visible during demos.

Tune ghost cursor movement defaults for faster, human-like motion and align cursor encoder script path handling with __dirname plus path.resolve conventions.
2026-02-26 13:16:12 +01:00
Tommy D. Rossi 2b5d2fa559 feat: add ghost cursor APIs and harden reconnect flow
Introduce a first-class ghost cursor system for recordings and screenshots with namespace APIs (, ) while preserving backward-compatible top-level recording helpers.

Improve reliability after relay restarts by consolidating extension wait logic around , reducing false disconnected states during  and execute flows.

Refactor recording glue into dedicated modules (,  in ) to keep executor orchestration thin and make cursor lifecycle state explicit and testable.
2026-02-25 19:33:55 +01:00