From 3a6711e7a5be7e54a7bf0e475849a844e6f44af2 Mon Sep 17 00:00:00 2001 From: aiulms <41933917+aiulms@users.noreply.github.com> Date: Sat, 18 Apr 2026 23:25:08 +0800 Subject: [PATCH 1/2] fix(desktop-electron): avoid startup loading hang --- packages/desktop-electron/src/main/index.ts | 24 ++++----------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/packages/desktop-electron/src/main/index.ts b/packages/desktop-electron/src/main/index.ts index 946e01e325d0..e5814febd247 100644 --- a/packages/desktop-electron/src/main/index.ts +++ b/packages/desktop-electron/src/main/index.ts @@ -1,6 +1,5 @@ import { randomUUID } from "node:crypto" import { EventEmitter } from "node:events" -import { existsSync } from "node:fs" import { createServer } from "node:net" import { homedir } from "node:os" import { join } from "node:path" @@ -128,8 +127,6 @@ function setInitStep(step: InitStep) { } async function initialize() { - const needsMigration = !sqliteFileExists() - const sqliteDone = needsMigration ? defer() : undefined let overlay: BrowserWindow | null = null const port = await getSidecarPort() @@ -153,13 +150,8 @@ async function initialize() { setInitStep({ phase: "sqlite_waiting" }) if (overlay) sendSqliteMigrationProgress(overlay, progress) if (mainWindow) sendSqliteMigrationProgress(mainWindow, progress) - if (progress.type === "Done") sqliteDone?.resolve() }) - if (needsMigration) { - await sqliteDone?.promise - } - await Promise.race([ health.wait, delay(30_000).then(() => { @@ -177,12 +169,10 @@ async function initialize() { deepLinks: pendingDeepLinks, } - if (needsMigration) { - const show = await Promise.race([loadingTask.then(() => false), delay(1_000).then(() => true)]) - if (show) { - overlay = createLoadingWindow(globals) - await delay(1_000) - } + const show = await Promise.race([loadingTask.then(() => false), delay(1_000).then(() => true)]) + if (show) { + overlay = createLoadingWindow(globals) + await delay(1_000) } await loadingTask @@ -295,12 +285,6 @@ async function getSidecarPort() { }) } -function sqliteFileExists() { - const xdg = process.env.XDG_DATA_HOME - const base = xdg && xdg.length > 0 ? xdg : join(homedir(), ".local", "share") - return existsSync(join(base, "opencode", "opencode.db")) -} - function setupAutoUpdater() { if (!UPDATER_ENABLED) return autoUpdater.logger = logger From a2c06e52586f4b592795bcc2f8f69907c9964200 Mon Sep 17 00:00:00 2001 From: aiulms <41933917+aiulms@users.noreply.github.com> Date: Sat, 18 Apr 2026 23:25:09 +0800 Subject: [PATCH 2/2] fix(desktop-electron): avoid startup loading hang --- packages/desktop-electron/src/preload/index.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/desktop-electron/src/preload/index.ts b/packages/desktop-electron/src/preload/index.ts index 296fcb2f1cc1..154046e99a1f 100644 --- a/packages/desktop-electron/src/preload/index.ts +++ b/packages/desktop-electron/src/preload/index.ts @@ -5,10 +5,16 @@ const api: ElectronAPI = { killSidecar: () => ipcRenderer.invoke("kill-sidecar"), installCli: () => ipcRenderer.invoke("install-cli"), awaitInitialization: (onStep) => { - const handler = (_: unknown, step: InitStep) => onStep(step) + const handler = (_: unknown, step: InitStep) => { + onStep(step) + if (step.phase === "done") { + ipcRenderer.removeListener("init-step", handler) + } + } ipcRenderer.on("init-step", handler) - return ipcRenderer.invoke("await-initialization").finally(() => { + return ipcRenderer.invoke("await-initialization").catch((error) => { ipcRenderer.removeListener("init-step", handler) + throw error }) }, getDefaultServerUrl: () => ipcRenderer.invoke("get-default-server-url"),