|
|
@@ -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 })
|
|
|
|
|
|
@@ -158,10 +150,32 @@ async function initialize() {
|
|
|
if (progress.type === "Done") sqliteDone?.resolve()
|
|
|
})
|
|
|
|
|
|
+ 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(() => {
|