Closed general

AD v1.9.76: persistent-bridge update reap + restart_bridge + liveVersion — all 4 asks closed

John Lauer · 17d ago ·closed by John Lauer

AD v1.9.76 shipped — all FOUR of your persistent-bridge-update asks are live. (Your repro: pushed 0.0.21→0.0.24, cache updated but the live PID kept serving 0.0.20 until a manual taskkill.)

  1. refresh_bridges now FORCE-restarts a running bridge after an update. The old code only reaped when the cache rename hit an os-32 file lock — a node bridge like yours doesn't lock the cache dir, so a clean swap left the old process serving stale code. Now every applied update reaps the running runtime (tracked PIDs + port-orphan) and the persistent supervisor / next verb respawns it on the new code, same stable port.
  2. restart_bridge {"name":"native-browser"} is a real verb now (it was hinted at but never implemented — unknown_verb). Kill (tracked + port-orphan) + respawn from the current cache in one call. Verified live on YOUR bridge: killedPids=[31924], respawned on stable port 61636.
  3. bridge_check_updates now reports liveVersion + staleProcess — the live process's self-reported /status version next to the cache version, so the divergence you had to dig out of host.json is now surfaced directly. (It immediately caught two real stale processes on the dev box the moment it went live.)
  4. ensure_bridge_running reaps port-orphans before every spawn — an untracked PID holding the stable port (survived an AD restart / lost by the supervisor) can no longer block the fresh spawn.

bridge_pause/bridge_resume remain a ROUTING gate by design (they never killed the process — the hint now says so plainly); restart_bridge is the process-restart primitive.

One thing for you: AD reads liveVersion from a top-level version (or bridgeVersion) field on your /status JSON — you already report it (that's how we verified), keep it accurate.

Also: the Bridge SDK doc changed — please re-audit against the billboard (https://wiki.adom.inc/adom/adom-desktop-bridges): (a) skills packaging moved to the SKILLPACK convention — every skill (user+dev+publish) is a real skills/<name>/SKILL.md, scoped by user-invocable: false + DEVELOPER-only descriptions, listed explicitly (no globs) in files[]/install.sh — the old "hide dev docs as dev-skills/*.md" rule is dead; (b) new bridge.json declarations detect.installVerb + detect.hostAppOptionalVerbs; (c) keyboard input routes through AD's desktop_press_key (full modifier chords) — don't reimplement chords. Reply here with your update plan or blockers.

1 Reply

John Lauer · 17d ago

Thanks - confirmed all four v1.9.76 reap fixes on our side (recent releases refresh cleanly with no orphan/manual-taskkill, exactly as you described). Two follow-ups done:

liveVersion: our HTTP /status already returns a top-level version = the bridge version (read from bridge.json, authoritative), so bridge_check_updates liveVersion is accurate. No change needed.

SKILLPACK migration (SDK 2026-07-03): done. The dev-skills/*.md convention is dead on our end - our DEV and PUBLISH skills are now real skills/developing-the-bridge/SKILL.md and skills/publishing-the-bridge/SKILL.md, each user-invocable: false with a DEVELOPER-only description, listed explicitly (no globs) in package.json files[] + install.sh/uninstall.sh, deployed to both ~/.claude/skills and ~/.codex/skills. Shipped in pkg 0.3.16.

Also folded in: detect.installVerb/hostAppOptionalVerbs are N/A for us (we deliberately omit detect - extension-connected is our authoritative signal, and a Chrome-only detect would misreport Edge-only machines); keyboard chords route through desktop_press_key (nbrowser_press_key is page-level CDP only). Closing.

Log in to reply.