<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sz-chrome-remote-extension.git/test-suite/notes, branch master</title>
<subtitle>pi-chrome, patched to drive a signed-in browser on another host through a broker, with an MCP server
</subtitle>
<id>https://git.soarez.net/sz/sz-chrome-remote-extension.git/atom?h=master</id>
<link rel='self' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/'/>
<updated>2026-05-16T18:01:00+00:00</updated>
<entry>
<title>0.15.25: fix reload after stale singleton</title>
<updated>2026-05-16T18:01:00+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-05-16T18:01:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=b792f22f2c2ef4dfb7bd300e7381a186e34e0c18'/>
<id>urn:sha1:b792f22f2c2ef4dfb7bd300e7381a186e34e0c18</id>
<content type='text'>
</content>
</entry>
<entry>
<title>pi-chrome: snapshot pre-migration state</title>
<updated>2026-05-13T11:29:41+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-05-13T11:29:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=4c54b05dc15b81e449dc8ac53da8bae536fa2798'/>
<id>urn:sha1:4c54b05dc15b81e449dc8ac53da8bae536fa2798</id>
<content type='text'>
</content>
</entry>
<entry>
<title>pi-chrome 0.14.2: recover from foreign-extension input overlays</title>
<updated>2026-05-13T06:35:01+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-05-13T06:35:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=26ab0d36e45b1b65f667d4743eb30e83389ff57f'/>
<id>urn:sha1:26ab0d36e45b1b65f667d4743eb30e83389ff57f</id>
<content type='text'>
When a different Chrome extension (password manager, autofill popup,
etc.) anchors an overlay to the focused input, Chrome's CDP refuses
our Input.dispatchMouseEvent with 'Cannot access a chrome-extension://
URL of different extension'. The CDP target list shows the foreign
chrome-extension:// URL as type:'other' attached to the same tab.

New behaviour in cdp() wrapper:
1. On that specific error for any Input.* call, snapshot CDP targets
   to identify the offending extension id and log it (foreign-ext-
   detected event added to ring buffer).
2. Send Esc via Input.dispatchKeyEvent (key dispatch routes by focus,
   not coordinates, so it bypasses the overlay) to dismiss the popup.
3. Retry the original Input.* call once.
4. If retry still fails, throw a clear error naming the foreign
   extension id and listing three concrete workarounds: disable that
   extension on the page, use Tab-to-focus instead of clicking, or
   run /chrome quiet off.
</content>
</entry>
<entry>
<title>pi-chrome: humanize synthetic input + anti-automation test suite</title>
<updated>2026-05-13T05:05:46+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-05-13T05:05:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=33110e803fcacc31dc2859dbc0d470b008556798'/>
<id>urn:sha1:33110e803fcacc31dc2859dbc0d470b008556798</id>
<content type='text'>
Bump 0.8.0 → 0.9.1.

Companion extension (service_worker.js):
- humanise pointer paths: easing Bezier-ish interpolation w/ wobble, 12–42
  steps, 4–18 ms gaps; pointer position persisted across calls
- click point picked inside element rect, not dead center
- pointer events fill movementX/Y, screenX/Y, pressure (0.5 on down),
  pointerId, width/height, tilt, composed
- click sequence: humanMoveTo → pointerdown → focus → 45–140 ms hold →
  pointerup → mouseup → click
- per-character typing: keydown → keypress → beforeinput → value mutate
  (or execCommand for contenteditable) → input → keyup, with 25–95 ms
  hold + 35–140 ms inter-key; auto Shift chord for uppercase/symbols
- pressKeyInPage emits same cadence + handles printable insert / Backspace
- hoverPage: humanised path + 80–220 ms dwell
- dragPage: full HTML5 sequence (dragstart/drag/dragenter/dragover/
  dragleave/drop/dragend) with shared DataTransfer + pointer continuity
- new scrollPage: wheel events with front-loaded momentum-shaped deltas
- self-reload on version drift: SW reads x-pi-chrome-version header,
  reloads when older than pi-chrome

Pi side (index.ts):
- new chrome_scroll tool
- PI_CHROME_VERSION read from package.json (and re-read on every /next
  so future bumps take effect without pi restart)
- /chrome-doctor escalates version mismatch to top-line ✗ error and
  skips downstream capability probes when stale
- /next response carries x-pi-chrome-version header for SW self-heal

Test suite (test-suite/):
- 28 challenge pages each catching a different synthetic-event tell:
  isTrusted, webdriver/fingerprint, mouse entropy/timing/coords,
  pointer pressure/continuity, per-char cadence + framework invariants,
  user activation, honeypots, focus order, wheel scroll, drag+
  DataTransfer, contenteditable+Selection, paste/clipboard, native
  select, hover dwell, React valueTracker, keyboard modifiers, touch
  events, stack-trace fingerprint, viewport-edge clicks, mousemove
  rate, scroll momentum, IntersectionObserver visibility
- shared _lib.js exposes window.__verdict + writes localStorage so
  index.html dashboard aggregates results
- notes/bypass-ideas.md documents fixes still needed per challenge
</content>
</entry>
</feed>
