summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-04-19 15:53:47 +0800
committerGitHub <[email protected]>2026-04-19 15:53:47 +0800
commita546e88f37d1816adadf1e833a5fb4f39b7d56df (patch)
tree21b3ec005993d7d0dca2942932c5169f67023bbf
parente998c9e9cb9973919468ca49f4962d1b37d3bfc3 (diff)
downloadopencode-a546e88f37d1816adadf1e833a5fb4f39b7d56df.tar.gz
opencode-a546e88f37d1816adadf1e833a5fb4f39b7d56df.zip
fix(desktop-electron): run JSON migration before spawning sidecar (#23396)
-rw-r--r--bun.lock1
-rw-r--r--packages/desktop-electron/package.json1
-rw-r--r--packages/desktop-electron/src/main/index.ts32
3 files changed, 25 insertions, 9 deletions
diff --git a/bun.lock b/bun.lock
index a8de83178..582eca489 100644
--- a/bun.lock
+++ b/bun.lock
@@ -227,6 +227,7 @@
"name": "@opencode-ai/desktop-electron",
"version": "1.14.17",
"dependencies": {
+ "drizzle-orm": "catalog:",
"effect": "catalog:",
"electron-context-menu": "4.1.2",
"electron-log": "^5",
diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json
index d8e20eb06..236d17591 100644
--- a/packages/desktop-electron/package.json
+++ b/packages/desktop-electron/package.json
@@ -30,6 +30,7 @@
"electron-store": "^10",
"electron-updater": "^6",
"electron-window-state": "^5.0.3",
+ "drizzle-orm": "catalog:",
"marked": "^15"
},
"devDependencies": {
diff --git a/packages/desktop-electron/src/main/index.ts b/packages/desktop-electron/src/main/index.ts
index 8f21e5b93..6c4e6d5ca 100644
--- a/packages/desktop-electron/src/main/index.ts
+++ b/packages/desktop-electron/src/main/index.ts
@@ -43,6 +43,7 @@ import { parseMarkdown } from "./markdown"
import { createMenu } from "./menu"
import { getDefaultServerUrl, getWslConfig, setDefaultServerUrl, setWslConfig, spawnLocalServer } from "./server"
import { createLoadingWindow, createMainWindow, setBackgroundColor, setDockIcon } from "./windows"
+import { drizzle } from "drizzle-orm/node-sqlite/driver"
import type { Server } from "virtual:opencode-server"
const initEmitter = new EventEmitter()
@@ -139,15 +140,6 @@ async function initialize() {
const url = `http://${hostname}:${port}`
const password = randomUUID()
- logger.log("spawning sidecar", { url })
- const { listener, health } = await spawnLocalServer(hostname, port, password)
- server = listener
- serverReady.resolve({
- url,
- username: "opencode",
- password,
- })
-
const loadingTask = (async () => {
logger.log("sidecar connection started", { url })
@@ -159,9 +151,31 @@ async function initialize() {
})
if (needsMigration) {
+ const { Database, JsonMigration } = await import("virtual:opencode-server")
+ await JsonMigration.run(drizzle({ client: Database.Client().$client }), {
+ progress: (event: { current: number; total: number }) => {
+ const percent = Math.round(event.current / event.total) * 100
+ initEmitter.emit("sqlite", { type: "InProgress", value: percent })
+ },
+ })
+ initEmitter.emit("sqlite", { type: "Done" })
+
+ sqliteDone?.resolve()
+ }
+
+ if (needsMigration) {
await sqliteDone?.promise
}
+ logger.log("spawning sidecar", { url })
+ const { listener, health } = await spawnLocalServer(hostname, port, password)
+ server = listener
+ serverReady.resolve({
+ url,
+ username: "opencode",
+ password,
+ })
+
await Promise.race([
health.wait,
delay(30_000).then(() => {