Lets the agent observe the real app the way a user does: runs bitvid in headless
Chromium against an in-process mock relay, injects a fake window.nostr extension
backed by Node-side nostr-tools crypto (via page.exposeFunction) with a
serialized ~100ms latency queue to model a real extension. Drives the real
nip-07 login flow, isolates to the mock relay via a seeded NIP-65 list, and
captures console logs, per-method extension call counts, feed-render timing, and
screenshots.
Phase 1 (this commit) verifies fake-extension login + relay isolation + metrics.
Already surfaced a stuck "Fetching recent videos…" state to investigate. Next
phases: seed encrypted watch-history chunks and DMs to reproduce/verify the
decrypt-cache wins and the DM-history bug, with before/after extension-call
counts.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Standalone Playwright/CDP profilers used to find the main-thread bottlenecks:
- profile-live.mjs: cold-load CPU profile + long-task report against a URL.
- diagnose-feed.mjs: dumps feed DOM/app-state/console to explain empty feeds.
- profile-seeded.mjs: seeds an in-process mock relay, drives login/tab-switch/
modal-open in test mode, and attributes secp256k1 self-time to its nearest
app-level caller.
Co-Authored-By: Claude Opus 4.8 <[email protected]>