diff options
| author | Brendan Allan <[email protected]> | 2026-04-19 15:53:47 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-19 15:53:47 +0800 |
| commit | a546e88f37d1816adadf1e833a5fb4f39b7d56df (patch) | |
| tree | 21b3ec005993d7d0dca2942932c5169f67023bbf /packages/desktop-electron | |
| parent | e998c9e9cb9973919468ca49f4962d1b37d3bfc3 (diff) | |
| download | opencode-a546e88f37d1816adadf1e833a5fb4f39b7d56df.tar.gz opencode-a546e88f37d1816adadf1e833a5fb4f39b7d56df.zip | |
fix(desktop-electron): run JSON migration before spawning sidecar (#23396)
Diffstat (limited to 'packages/desktop-electron')
| -rw-r--r-- | packages/desktop-electron/package.json | 1 | ||||
| -rw-r--r-- | packages/desktop-electron/src/main/index.ts | 32 |
2 files changed, 24 insertions, 9 deletions
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(() => { |
