fix: tighten disconnect recovery guards

This commit is contained in:
Bohdan Triapitsyn
2026-04-17 19:00:44 +03:00
parent f5535dcaf1
commit 2766327a68
2 changed files with 21 additions and 1 deletions
+6
View File
@@ -429,6 +429,9 @@ export async function dismissPermission(
sessionId: string, sessionId: string,
requestId: string, requestId: string,
): Promise<void> { ): Promise<void> {
if (!useConfigStore.getState().isConnected) {
throw new Error("Connection lost. Please wait for reconnection.")
}
const result = await getRequestReplyClient("permission", sessionId, requestId).permission.reply({ const result = await getRequestReplyClient("permission", sessionId, requestId).permission.reply({
requestID: requestId, requestID: requestId,
reply: "reject", reply: "reject",
@@ -463,6 +466,9 @@ export async function rejectQuestion(
sessionId: string, sessionId: string,
requestId: string, requestId: string,
): Promise<void> { ): Promise<void> {
if (!useConfigStore.getState().isConnected) {
throw new Error("Connection lost. Please wait for reconnection.")
}
const result = await getRequestReplyClient("question", sessionId, requestId).question.reject({ const result = await getRequestReplyClient("question", sessionId, requestId).question.reject({
requestID: requestId, requestID: requestId,
}) })
@@ -10,6 +10,18 @@ import {
sendMessageStreamWsFrame, sendMessageStreamWsFrame,
} from './protocol.js'; } 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({ export function createGlobalUiEventBroadcaster({
sseClients, sseClients,
wsClients, wsClients,
@@ -151,7 +163,9 @@ export function createMessageStreamWsRuntime({
message: `OpenCode event stream unavailable (${upstream.status})`, message: `OpenCode event stream unavailable (${upstream.status})`,
}); });
socket.close(1011, 'OpenCode event stream unavailable'); socket.close(1011, 'OpenCode event stream unavailable');
triggerHealthCheck?.(); if (shouldTriggerUpstreamHealthCheck(upstream)) {
triggerHealthCheck?.();
}
return; return;
} }