<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sz-chrome-remote-extension.git/docs/DESIGN-0.17-daemon.md, 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-16T17:13:48+00:00</updated>
<entry>
<title>Revert 0.16.x and 0.17.x: restore tree to v0.15.20 state</title>
<updated>2026-05-16T17:13:48+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-05-16T17:13:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=b2ca8f8c343281c0263bda4c043cbe7f0d7d442e'/>
<id>urn:sha1:b2ca8f8c343281c0263bda4c043cbe7f0d7d442e</id>
<content type='text'>
Reverts the pairing + signed-envelopes work (0.16.0-0.16.1), the
standalone daemon refactor (0.17.0-0.17.3), and assorted patches.
These were unpublished from npm; this commit restores the working
tree to match the v0.15.20 release so the branch tip and the npm
'latest' dist-tag are consistent again.

Tags v0.16.0 through v0.17.3 are preserved as recovery anchors;
the work is reachable via 'git checkout v0.17.3' if ever needed.

Tree-equivalent to v0.15.20.
</content>
</entry>
<entry>
<title>0.17.0: standalone daemon, no more owner-vs-client topology</title>
<updated>2026-05-16T16:46:57+00:00</updated>
<author>
<name>Tianren Dong</name>
<email>tianrendong.dtr@gmail.com</email>
</author>
<published>2026-05-16T16:46:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.soarez.net/sz/sz-chrome-remote-extension.git/commit/?id=2ac665ec31fe156b372540e8ac38aa42765b3001'/>
<id>urn:sha1:2ac665ec31fe156b372540e8ac38aa42765b3001</id>
<content type='text'>
The Chrome bridge is now a separate detached daemon at
~/.cache/pi-chrome/&lt;version&gt;/daemon.cjs. Every Pi session is a uniform client;
daemon lifecycle is decoupled from any Pi session. Killing a Pi never breaks
Chrome control, and pi update followed by any new Pi session auto-replaces
an incompatible daemon.

Architecture:
- New extensions/chrome-profile-bridge/daemon.cjs: ~700 LOC, zero deps, runs
  detached. Owns the HTTP listener, BridgeAuth state, command queue, /pair
  handshake. Idle-shuts-down after 10 min of no activity.
- ChromeProfileBridge on Pi side becomes a pure client: start() probes /status,
  spawns daemon if missing/incompatible, kills+respawns if version mismatch.
  send() always uses signed /command. No more server-mode branch.
- New signed /admin RPC for pair-window/reset/status state mutations the
  daemon owns. Pi clients sign with broker key (same contract as /command).
- New /heartbeat for daemon idle-timer keepalive.
- daemon.log at ~/.cache/pi-chrome/&lt;version&gt;/daemon.log.

/chrome pair, /chrome unpair, /chrome onboard now go through /admin RPCs
instead of mutating in-process bridge state.

Removed the foreign-owner takeover dance from /chrome onboard (auto-handled
at session_start now).

Wire protocol is byte-identical to 0.16.x; existing paired extensions don't
need to re-pair. See docs/DESIGN-0.17-daemon.md for the full write-up.
</content>
</entry>
</feed>
