<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sz-chrome-remote-extension.git/test-suite/unit, 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>broker: refuse uploads from outside the staging directory</title>
<updated>2026-11-06T09:20:16+00:00</updated>
<author>
<name>Igor Soarez</name>
<email>igor@soarez.org</email>
</author>
<published>2026-11-06T09:20:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=85b49885256464b735923eaa771044706383718f'/>
<id>urn:sha1:85b49885256464b735923eaa771044706383718f</id>
<content type='text'>
page.upload and a raw DOM.setFileInputFiles through cdp.call now have to name
files whose real path is under /tmp/pi-chrome-uploads (PI_CHROME_UPLOAD_DIR),
on the broker's host. Anyone holding the token could otherwise attach any file
the user can read to a page.
</content>
</entry>
<entry>
<title>Drop the full-screen tab rule for automation targets (#27)</title>
<updated>2026-09-29T00:19:57+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-29T00:19:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=72233686a3fb5fabc496dc301c85beaf8aec9f0b'/>
<id>urn:sha1:72233686a3fb5fabc496dc301c85beaf8aec9f0b</id>
<content type='text'>
0.15.54 opened Pi's automation target as a tab in the user's window while it
was full screen, assuming macOS would merge a new window into it as a hidden
window tab. Chrome disables automatic window tabbing (app_controller_mac.mm),
so that never happens; the hidden tabs came from the tab-group bug fixed in
0.15.56. Always prefer Pi's own window.</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>Keep tab ownership across extension reloads (#25)</title>
<updated>2026-09-29T00:04:23+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-29T00:04:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=104d7f442e7e3596781f32d8f42df39fc1c41aa0'/>
<id>urn:sha1:104d7f442e7e3596781f32d8f42df39fc1c41aa0</id>
<content type='text'>
storage.session is wiped when the extension reloads, which it does on every
pi-chrome update, so Pi lost track of its automation window and session tabs
and left them behind. Mirror ownership to storage.local, restore it only when
the session copy is missing, re-check every restored tab (same window; adopted
tabs still in Pi's group), and drop the local copy on browser startup.</content>
</entry>
<entry>
<title>Create session tab groups in the tab's own window</title>
<updated>2026-09-28T23:45:18+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-28T23:45:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=b33d18552599664901356ae27db0270df3cc3129'/>
<id>urn:sha1:b33d18552599664901356ae27db0270df3cc3129</id>
<content type='text'>
chrome.tabs.group without createProperties.windowId creates the group in the
current (user's) window and moves the tab there, so a session's automation tab
left its dedicated window and became a hidden inactive tab. Make the unit mock
match Chrome's behavior.
</content>
</entry>
<entry>
<title>Fill whole textareas; cover new tabs' first page with early capture</title>
<updated>2026-09-28T23:30:23+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-28T23:30:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=e6c01048363e35b29ebb66e5f8936bdcf60c2913'/>
<id>urn:sha1:e6c01048363e35b29ebb66e5f8936bdcf60c2913</id>
<content type='text'>
chrome_fill's triple-click selected one line of a multi-line textarea, so fill
replaced only that line. Select value fields with the selectAll editing command
before deleting. Early capture now waits for in-flight tab.new creations, so a
first page that commits before the tab is tracked is still captured.
</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>Stop console capture from tripping DevTools detection; scope early capture to Pi tabs</title>
<updated>2026-09-27T02:41:47+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-09-27T02:41:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=f034b8517d0903455e1b9729e876420cbfd002fb'/>
<id>urn:sha1:f034b8517d0903455e1b9729e876420cbfd002fb</id>
<content type='text'>
Fixes #9. Sites like BOSS Zhipin log an object with a getter/toString trap and
close the tab if it is read. Store captured console args raw and serialize them
on read without running page code (data properties only, accessors as [getter],
built-ins via native getters). Inject document-start capture only into Pi's
automation tab and session-tracked tabs.
</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>
</feed>
