<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sz-chrome-remote-extension.git/extensions/chrome-profile-bridge/index.ts, 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-11-06T11:49:39+00:00</updated>
<entry>
<title>extension: end a /chrome authorize grant with its session</title>
<updated>2026-11-06T11:49:39+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-11-06T11:49:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=ff99a4432a3feedfac10d9514ce661a9cb95004c'/>
<id>urn:sha1:ff99a4432a3feedfac10d9514ce661a9cb95004c</id>
<content type='text'>
The grant lives on globalThis so /reload keeps it, but nothing cleared it
when pi replaced the session in the same process. After /new, /resume or
/fork the next session started authorized and announced it in the footer.

Drop the saved grant on session_shutdown for new, resume and fork. Reload
keeps it. Quit leaves it alone, so a subagent quitting in the same process
does not take its parent's grant with it.

grant-scope.test.mjs loads the shipped module once per runtime in one
shared context, the way pi keeps globalThis across reloads and switches,
and checks the tools and the footer after each. It fails on 85b4988, and
its /chrome authorize cases fail with only the PI_CHROME_AUTHORIZE fix.
</content>
</entry>
<entry>
<title>extension: keep PI_CHROME_AUTHORIZE grants out of the persisted grant</title>
<updated>2026-11-06T11:49:39+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-11-06T11:49:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=68216dcb01c8cd5894c6e2b4914d7c619d75ab35'/>
<id>urn:sha1:68216dcb01c8cd5894c6e2b4914d7c619d75ab35</id>
<content type='text'>
The env grant was saved to globalThis like a /chrome authorize grant. After
a /reload or a session switch (/resume, /fork, /new) the new runtime restored
it, skipped the env branch, and left envGranted false, so the footer
announced a grant the user never gave.

Read the variable again on each session_start instead of persisting it.
A restored grant now always comes from /chrome authorize. A timed env grant
restarts its countdown on each reload or switch.
</content>
</entry>
<entry>
<title>extension: show the bridge footer only for grants given this session</title>
<updated>2026-10-26T13:42:32+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-10-26T13:42:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=ee1ddab7f9f24adfc55a41e62efa3156a282c7a8'/>
<id>urn:sha1:ee1ddab7f9f24adfc55a41e62efa3156a282c7a8</id>
<content type='text'>
A standing PI_CHROME_AUTHORIZE is not session state worth a line at the
bottom of every session that has it; announce only access the user granted
through /chrome authorize.
</content>
</entry>
<entry>
<title>feat(remote): drive a companion extension on another host through a broker</title>
<updated>2026-10-14T11:16:02+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-10-14T11:08:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=7e2196bd1f046707d1930f8c3d9aa7e4cc390bd6'/>
<id>urn:sha1:7e2196bd1f046707d1930f8c3d9aa7e4cc390bd6</id>
<content type='text'>
PI_CHROME_REMOTE=host:port sends every command to a broker/broker.mjs there,
with its bearer token, instead of binding a bridge on this machine. Unset, the
extension behaves as upstream. A remote session never binds or takes over a
port: when the broker is unreachable the tools fail rather than drive some
other browser.

A pi-chrome-remote prompt section says which browser chrome_* drives and how
files move to and from its host; chrome_upload_file wants absolute paths there.
PI_CHROME_AUTHORIZE grants every session up front.
</content>
</entry>
<entry>
<title>Report hidden Pi tab in /chrome doctor (#26)</title>
<updated>2026-09-29T00:18:03+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-29T00:18:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=0192da77e06b6ee3d0ce04e9d43ea387372281ca'/>
<id>urn:sha1:0192da77e06b6ee3d0ce04e9d43ea387372281ca</id>
<content type='text'>
Chrome ignores clicks and typing in hidden pages. Doctor now asks the worker
whether this session's own tab is visible (automation.status includeVisibility,
which never creates or activates a tab) and reports the reason and fix when it
is hidden.</content>
</entry>
<entry>
<title>Make Chrome primer and authorization log prompt-cache friendly</title>
<updated>2026-09-27T03:28:51+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-27T02:20:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=c5c048b3b2b978d99f6b4f941be842429744c946'/>
<id>urn:sha1:c5c048b3b2b978d99f6b4f941be842429744c946</id>
<content type='text'>
- Contribute the primer as a structured prompt section instead of forcing systemPrompt.
- Log pi-chrome-tool-change as a rendered custom entry that is not sent to the model.
</content>
</entry>
<entry>
<title>Report hidden-tab input, append targeted typing, smarter uploads, prune screenshots; release 0.15.54</title>
<updated>2026-09-26T23:07:56+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-26T23:07:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=238f347a03b2cefb21198bb78a90699e931d8504'/>
<id>urn:sha1:238f347a03b2cefb21198bb78a90699e931d8504</id>
<content type='text'>
- Check page visibility before trusted input: Chrome drops input to hidden pages (inactive tabs,
  covered/minimized windows, macOS window tabs behind full screen). Type/key/hover/scroll/tap/drag
  fail fast with the reason; click/fill use their DOM fallback immediately (or reject with
  domFallback:false).
- Use an inactive tab instead of a new window for the automation target while the user's window is
  full screen.
- chrome_type with uid/selector moves the caret to the end (moveToEndOfDocument) after its focus click.
- chrome_upload_file: labels/wrappers resolve to their file input, same-origin iframe search, and
  intercepted file chooser for upload buttons (trusted click when visible, user-gesture click when
  hidden); reject multiple paths for single-file inputs; no duplicate change event.
- Prune default-folder chrome_screenshot captures (7 days, newest 20 kept, retentionDays override).
- input.debug without a target no longer calls tabs.get(-1).
- New hidden-input unit suite.
</content>
</entry>
<entry>
<title>Absorb fork fixes and features; release 0.15.53</title>
<updated>2026-09-26T20:37:25+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-26T20:37:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=c49dc15fa5c33d5b1d210b0185677ce29640e2d5'/>
<id>urn:sha1:c49dc15fa5c33d5b1d210b0185677ce29640e2d5</id>
<content type='text'>
Adapted from community forks (ardhiqii, kkunkunya, nihar-oracle, steimerbyte):

- Abort stalled /next long polls after 45s; time out, retry, and single-post results.
- Fall back to CDP Runtime.evaluate when chrome.scripting is refused (about:blank automation tabs).
- Load pi-chrome in same-process subagent sessions as a bridge client; client chrome_launch reports owner status.
- Add chrome_cdp (validated raw CDP passthrough, background-guarded, payload summarization) and chrome_cdp_targets.
- chrome_type reports before/after values, insertedAt, splice/unchanged warnings; add replace=true.
- includeSnapshot waits for navigations started by the action; tab.new reports the settled tab.
- CDP timeouts surface as timeouts and are not re-sent after the cleanup detach.
- Activate/deactivate chrome_find and chrome_inspect with the rest of the chrome_* tools.
- New unit suites: bridge-resilience, cdp-passthrough, type-evidence.
</content>
</entry>
<entry>
<title>Simplify Chrome status commands and release 0.15.51</title>
<updated>2026-09-10T17:33:17+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-10T17:33:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=04e7b89f3525f770ee8eaefb983632f27afaf2f0'/>
<id>urn:sha1:04e7b89f3525f770ee8eaefb983632f27afaf2f0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Improve Chrome input reliability and release 0.15.49</title>
<updated>2026-09-10T13:57:16+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-10T13:31:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=ec23b553a245d3d57f428d03002ed77a785d300a'/>
<id>urn:sha1:ec23b553a245d3d57f428d03002ed77a785d300a</id>
<content type='text'>
</content>
</entry>
</feed>
