summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-03-05 17:00:13 +0800
committerBrendan Allan <[email protected]>2026-03-05 17:00:13 +0800
commit6531cfc521f069ad86eb22990fc42924d161d0d9 (patch)
tree18a619d5d974b42ad1f9f36e9c80eda79cea3915
parent6ddd13c6ac9bb918bd8239e5cc2308d8938db747 (diff)
downloadopencode-6531cfc521f069ad86eb22990fc42924d161d0d9.tar.gz
opencode-6531cfc521f069ad86eb22990fc42924d161d0d9.zip
desktop-electon: handle latest version update check properly
-rw-r--r--packages/desktop-electron/src/main/index.ts44
1 files changed, 29 insertions, 15 deletions
diff --git a/packages/desktop-electron/src/main/index.ts b/packages/desktop-electron/src/main/index.ts
index 03c1e128e..7b6acd147 100644
--- a/packages/desktop-electron/src/main/index.ts
+++ b/packages/desktop-electron/src/main/index.ts
@@ -1,14 +1,18 @@
-import { app, BrowserWindow, dialog } from "electron"
-import type { Event } from "electron"
-import pkg from "electron-updater"
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"
-import { createServer } from "node:net"
+import type { Event } from "electron"
+import { app, type BrowserWindow, dialog } from "electron"
+import pkg from "electron-updater"
-const APP_NAMES: Record<string, string> = { dev: "OpenCode Dev", beta: "OpenCode Beta", prod: "OpenCode" }
+const APP_NAMES: Record<string, string> = {
+ dev: "OpenCode Dev",
+ beta: "OpenCode Beta",
+ prod: "OpenCode",
+}
const APP_IDS: Record<string, string> = {
dev: "ai.opencode.desktop.dev",
beta: "ai.opencode.desktop.beta",
@@ -18,7 +22,9 @@ app.setName(app.isPackaged ? APP_NAMES[CHANNEL] : "OpenCode Dev")
app.setPath("userData", join(app.getPath("appData"), app.isPackaged ? APP_IDS[CHANNEL] : "ai.opencode.desktop.dev"))
const { autoUpdater } = pkg
+import type { InitStep, ServerReadyData, SqliteMigrationProgress, WslConfig } from "../preload/types"
import { checkAppExists, resolveAppPath, wslPath } from "./apps"
+import type { CommandChild } from "./cli"
import { installCli, syncCli } from "./cli"
import { CHANNEL, UPDATER_ENABLED } from "./constants"
import { registerIpcHandlers, sendDeepLinks, sendMenuCommand, sendSqliteMigrationProgress } from "./ipc"
@@ -37,9 +43,6 @@ import {
} from "./server"
import { createLoadingWindow, createMainWindow, setDockIcon } from "./windows"
-import type { InitStep, ServerReadyData, SqliteMigrationProgress, WslConfig } from "../preload/types"
-import type { CommandChild } from "./cli"
-
type ServerConnection =
| { variant: "existing"; url: string }
| {
@@ -56,16 +59,19 @@ const initEmitter = new EventEmitter()
let initStep: InitStep = { phase: "server_waiting" }
let mainWindow: BrowserWindow | null = null
-let loadingWindow: BrowserWindow | null = null
+const loadingWindow: BrowserWindow | null = null
let sidecar: CommandChild | null = null
-let loadingComplete = defer<void>()
+const loadingComplete = defer<void>()
const pendingDeepLinks: string[] = []
const serverReady = defer<ServerReadyData>()
const logger = initLogging()
-logger.log("app starting", { version: app.getVersion(), packaged: app.isPackaged })
+logger.log("app starting", {
+ version: app.getVersion(),
+ packaged: app.isPackaged,
+})
setupApp()
@@ -162,7 +168,10 @@ async function initialize() {
const loadingTask = (async () => {
logger.log("setting up server connection")
const serverConnection = await setupServerConnection()
- logger.log("server connection ready", { variant: serverConnection.variant, url: serverConnection.url })
+ logger.log("server connection ready", {
+ variant: serverConnection.variant,
+ url: serverConnection.url,
+ })
const cliHealthCheck = (() => {
if (serverConnection.variant == "cli") {
@@ -175,7 +184,10 @@ async function initialize() {
if (progress.type === "Done") sqliteDone?.resolve()
})
await health.wait
- serverReady.resolve({ url: serverConnection.url, password: serverConnection.password })
+ serverReady.resolve({
+ url: serverConnection.url,
+ password: serverConnection.password,
+ })
}
} else {
serverReady.resolve({ url: serverConnection.url, password: null })
@@ -370,8 +382,10 @@ async function checkUpdate() {
files: updateInfo?.files?.map((file) => file.url) ?? [],
})
const version = result?.updateInfo?.version
- if (!version) {
- logger.log("no update available", { reason: "provider returned no newer version" })
+ if (result?.isUpdateAvailable === false || !version) {
+ logger.log("no update available", {
+ reason: "provider returned no newer version",
+ })
return { updateAvailable: false }
}
logger.log("update available", { version })