From 5925ac49a137b476907f199d570e177d98c9a38d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Thu, 5 Mar 2026 09:53:31 +0000 Subject: [PATCH] fix sidecar websocket: routes handler was intercepting upgrade requests The Bun routes option matched "/" before fetch could handle the WebSocket upgrade, so the API server could never connect. Moved route handling into fetch after the upgrade check. Co-Authored-By: Claude Opus 4.6 --- src/servers/sidecar/index.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/servers/sidecar/index.ts b/src/servers/sidecar/index.ts index de0fc274..44d77a62 100644 --- a/src/servers/sidecar/index.ts +++ b/src/servers/sidecar/index.ts @@ -203,22 +203,23 @@ const server = Bun.serve({ port: PORT, hostname: '127.0.0.1', - routes: { - '/': () => new Response('process-sidecar'), - '/health': () => new Response(JSON.stringify({ - status: 'ok', - uptime: Date.now() - startedAt, - piSessions: piManager.getAllSessions().length, - claudeSessions: claudeManager.getActiveSessionKeys().length, - }), { headers: { 'Content-Type': 'application/json' } }), - }, - fetch(req, server) { if (req.headers.get('upgrade') === 'websocket') { const ok = server.upgrade(req); if (!ok) return new Response('Upgrade failed', { status: 500 }); return; } + + const url = new URL(req.url); + if (url.pathname === '/') return new Response('process-sidecar'); + if (url.pathname === '/health') { + return new Response(JSON.stringify({ + status: 'ok', + uptime: Date.now() - startedAt, + piSessions: piManager.getAllSessions().length, + claudeSessions: claudeManager.getActiveSessionKeys().length, + }), { headers: { 'Content-Type': 'application/json' } }); + } return new Response('Not found', { status: 404 }); },