From 6875bb7b4e80e64ba48dfae19385e6caa0015700 Mon Sep 17 00:00:00 2001 From: Benjamin Shafii Date: Fri, 30 Jan 2026 08:57:17 -0800 Subject: [PATCH] fix(host): retry engine connect when running --- packages/app/src/app/context/workspace.ts | 25 ++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/app/src/app/context/workspace.ts b/packages/app/src/app/context/workspace.ts index be1785bad..1cebcd468 100644 --- a/packages/app/src/app/context/workspace.ts +++ b/packages/app/src/app/context/workspace.ts @@ -98,6 +98,8 @@ export function createWorkspaceStore(options: { const [engineDoctorResult, setEngineDoctorResult] = createSignal(null); const [engineDoctorCheckedAt, setEngineDoctorCheckedAt] = createSignal(null); const [engineInstallLogs, setEngineInstallLogs] = createSignal(null); + let lastEngineReconnectAt = 0; + let reconnectingEngine = false; const [projectDir, setProjectDir] = createSignal(""); const [workspaces, setWorkspaces] = createSignal([]); @@ -244,7 +246,8 @@ export function createWorkspaceStore(options: { const username = info.opencodeUsername?.trim() ?? ""; const password = info.opencodePassword?.trim() ?? ""; - setEngineAuth(username && password ? { username, password } : null); + const auth = username && password ? { username, password } : null; + setEngineAuth(auth); if (info.projectDir && syncLocalState) { setProjectDir(info.projectDir); @@ -252,6 +255,26 @@ export function createWorkspaceStore(options: { if (info.baseUrl && syncLocalState) { options.setBaseUrl(info.baseUrl); } + + if ( + syncLocalState && + options.mode() === "host" && + info.running && + info.baseUrl && + !options.client() && + !reconnectingEngine + ) { + const now = Date.now(); + if (now - lastEngineReconnectAt > 10_000) { + lastEngineReconnectAt = now; + reconnectingEngine = true; + connectToServer(info.baseUrl, info.projectDir ?? undefined, undefined, auth ?? undefined) + .catch(() => undefined) + .finally(() => { + reconnectingEngine = false; + }); + } + } } catch { // ignore }