Resolved Chrome handle. null until the initial in-flight launch settles
(see browserReady) and again briefly during recoverBrowser. Run
handlers MUST go through awaitBrowser(state) rather than reading this
field directly — it's null until the first awaiting caller resolves it.
The split lets run listen() and write the info file
immediately, instead of blocking on Chrome launch. Under CI load Chrome
launch tail latencies regularly exceed 100 s; gating socket readiness
on Chrome would propagate that latency to every daemon start/status/
ping and exhaust client-side spawn timeouts in both the Node and Deno
paths (CI runs 26006815757 + 26007923495).
Usage
import { type DaemonState } from "lib/commands/daemon/server.ts";