From 2766327a684de194572b33835e004c6a4f8f7e63 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Fri, 17 Apr 2026 19:00:44 +0300 Subject: [PATCH] fix: tighten disconnect recovery guards --- packages/ui/src/sync/session-actions.ts | 6 ++++++ packages/web/server/lib/event-stream/runtime.js | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/sync/session-actions.ts b/packages/ui/src/sync/session-actions.ts index d3d6a357..bfbbaca8 100644 --- a/packages/ui/src/sync/session-actions.ts +++ b/packages/ui/src/sync/session-actions.ts @@ -429,6 +429,9 @@ export async function dismissPermission( sessionId: string, requestId: string, ): Promise { + if (!useConfigStore.getState().isConnected) { + throw new Error("Connection lost. Please wait for reconnection.") + } const result = await getRequestReplyClient("permission", sessionId, requestId).permission.reply({ requestID: requestId, reply: "reject", @@ -463,6 +466,9 @@ export async function rejectQuestion( sessionId: string, requestId: string, ): Promise { + if (!useConfigStore.getState().isConnected) { + throw new Error("Connection lost. Please wait for reconnection.") + } const result = await getRequestReplyClient("question", sessionId, requestId).question.reject({ requestID: requestId, }) diff --git a/packages/web/server/lib/event-stream/runtime.js b/packages/web/server/lib/event-stream/runtime.js index 3eefdea9..701a2b19 100644 --- a/packages/web/server/lib/event-stream/runtime.js +++ b/packages/web/server/lib/event-stream/runtime.js @@ -10,6 +10,18 @@ import { sendMessageStreamWsFrame, } from './protocol.js'; +function shouldTriggerUpstreamHealthCheck(upstream) { + if (!upstream) { + return true; + } + + if (!upstream.body) { + return upstream.ok || upstream.status >= 500; + } + + return upstream.status >= 500; +} + export function createGlobalUiEventBroadcaster({ sseClients, wsClients, @@ -151,7 +163,9 @@ export function createMessageStreamWsRuntime({ message: `OpenCode event stream unavailable (${upstream.status})`, }); socket.close(1011, 'OpenCode event stream unavailable'); - triggerHealthCheck?.(); + if (shouldTriggerUpstreamHealthCheck(upstream)) { + triggerHealthCheck?.(); + } return; }