mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
The daemon was dying silently with no log trail. Two compounding causes: 1. uncaughtException/unhandledRejection handlers in index.ts called process.exit(1) immediately after logger.fatal, but pino is configured with async streams (sync: false console + rotating-file-stream), so the fatal entry never flushed. main().catch already worked around this with a 200ms setTimeout — extract exitAfterPinoFlush() and apply it to the process-level handlers too. 2. socket.send() in the relay transport adapter and ws.send() in sendToClient/sendBinaryToClient were unprotected. The ws library throws synchronously on send-after-close, and the readyState === 1 check has a race window. With an active foreground turn streaming agent_stream output, a peer-side disconnect could turn into an uncaughtException — which (per #1) then exited without logging. Wrap the three send sites in try/catch and warn-log on failure; let onclose/onerror drive cleanup. The readyState fast-path stays as an optimization. Refs getpaseo/paseo#612 Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>