Three hardening fixes:
- 60s per-request timeout (configurable via DaemonServer constructor)
prevents a misbehaving handler from blocking the connection's
read pipeline indefinitely. On timeout the client gets a clean
tool_error response.
- broadcast() and the per-request response writeln are wrapped in
try/catch with stderr logging. Previously write failures silently
dropped clients with no diagnostic; events going missing was
invisible.
- start() probes for a live daemon before unlinking a stale socket.
If something answers within 200ms, refuse to start. Previously
two daemons racing to bind would let the second rip the first's
live socket out.
Co-Authored-By: Claude <noreply@anthropic.com>