Extract isOnPath() to shared src/util.ts so both the daemon (client.ts)
and extension (root.ts) can use it. Add isServerAvailable() with a
per-process cache to pickServer(), skipping servers whose binary isn't
on PATH before sending requests to the daemon.
This avoids wasted daemon round-trips for missing binaries and sets up
for upcoming multi-server diagnostics fan-out.