refactor(opencode): remove JSON storage migration (#30461)

This commit is contained in:
Dax
2026-06-02 19:05:14 -04:00
committed by GitHub
parent 113e7be5ac
commit ca2acc4f8d
20 changed files with 17 additions and 1590 deletions
+8 -63
View File
@@ -1,6 +1,5 @@
import { randomUUID } from "node:crypto"
import { EventEmitter } from "node:events"
import { existsSync, mkdirSync, rmSync } from "node:fs"
import { mkdirSync, rmSync } from "node:fs"
import * as http from "node:http"
import { createServer } from "node:net"
import { homedir, tmpdir } from "node:os"
@@ -11,10 +10,10 @@ import { app, BrowserWindow } from "electron"
import contextMenu from "electron-context-menu"
import type { InitStep, ServerReadyData, SqliteMigrationProgress, WslConfig } from "../preload/types"
import type { ServerReadyData, WslConfig } from "../preload/types"
import { checkAppExists, resolveAppPath, wslPath } from "./apps"
import { CHANNEL, UPDATER_ENABLED } from "./constants"
import { registerIpcHandlers, sendDeepLinks, sendMenuCommand, sendSqliteMigrationProgress } from "./ipc"
import { registerIpcHandlers, sendDeepLinks, sendMenuCommand } from "./ipc"
import { exportDebugLogs, initCrashReporter, initLogging, startNetLog, write as writeLog } from "./logging"
import { parseMarkdown } from "./markdown"
import { createMenu } from "./menu"
@@ -28,7 +27,6 @@ import {
type SidecarListener,
} from "./server"
import {
createLoadingWindow,
createMainWindow,
registerRendererProtocol,
setRelaunchHandler,
@@ -56,9 +54,6 @@ let logger: ReturnType<typeof initLogging>
let mainWindow: BrowserWindow | null = null
let server: SidecarListener | null = null
const initEmitter = new EventEmitter()
let initStep: InitStep = { phase: "server_waiting" }
const pendingDeepLinks: string[] = []
function useEnvProxy() {
@@ -76,12 +71,6 @@ function emitDeepLinks(urls: string[]) {
if (mainWindow) sendDeepLinks(mainWindow, urls)
}
function setInitStep(step: InitStep) {
initStep = step
logger.log("init step", { step })
initEmitter.emit("step", step)
}
async function killSidecar() {
if (!server) return
const current = server
@@ -219,23 +208,15 @@ const main = Effect.gen(function* () {
}
const serverReady = Deferred.makeUnsafe<ServerReadyData>()
const loadingComplete = Deferred.makeUnsafe<void>()
registerIpcHandlers({
killSidecar: () => killSidecar(),
awaitInitialization: Effect.fnUntraced(
function* (sendStep) {
sendStep(initStep)
const listener = (step: InitStep) => sendStep(step)
initEmitter.on("step", listener)
try {
logger.log("awaiting server ready")
const res = yield* Deferred.await(serverReady)
logger.log("server ready", { url: res.url })
return res
} finally {
initEmitter.off("step", listener)
}
function* () {
logger.log("awaiting server ready")
const res = yield* Deferred.await(serverReady)
logger.log("server ready", { url: res.url })
return res
},
(e) => Effect.runPromise(e),
),
@@ -251,7 +232,6 @@ const main = Effect.gen(function* () {
checkAppExists: (appName) => checkAppExists(appName),
wslPath: async (path, mode) => wslPath(path, mode),
resolveAppPath: async (appName) => resolveAppPath(appName),
loadingWindowComplete: () => Deferred.doneUnsafe(loadingComplete, Effect.void),
runUpdater: async (alertOnFail) => checkForUpdates(alertOnFail, killSidecar),
checkUpdate: async () => checkUpdate(),
installUpdate: async () => installUpdate(killSidecar),
@@ -275,15 +255,6 @@ const main = Effect.gen(function* () {
),
)
const needsMigration = ((): boolean => {
if (process.env.OPENCODE_DB === ":memory:") return false
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"))
})()
let overlay: BrowserWindow | null = null
const port = yield* Effect.gen(function* () {
const fromEnv = process.env.OPENCODE_PORT
if (fromEnv) {
@@ -314,21 +285,13 @@ const main = Effect.gen(function* () {
const loadingTask = yield* Effect.gen(function* () {
logger.log("sidecar connection started", { url })
initEmitter.on("sqlite", (progress: SqliteMigrationProgress) => {
setInitStep({ phase: "sqlite_waiting" })
if (overlay) sendSqliteMigrationProgress(overlay, progress)
if (mainWindow) sendSqliteMigrationProgress(mainWindow, progress)
})
ensureLoopbackNoProxy()
useEnvProxy()
logger.log("spawning sidecar", { url })
const { listener, health } = yield* Effect.promise(() =>
spawnLocalServer(hostname, port, password, {
needsMigration,
userDataPath: app.getPath("userData"),
onSqliteProgress: (progress) => initEmitter.emit("sqlite", progress),
onStdout: (message) => writeLog("server", "stdout", { message }),
onStderr: (message) => writeLog("server", "stderr", { message }, "warn"),
onExit: (code) => writeLog("utility", "sidecar exited", { code }, "warn"),
@@ -353,23 +316,7 @@ const main = Effect.gen(function* () {
logger.log("loading task finished")
}).pipe(Effect.forkChild)
if (needsMigration) {
const show = yield* loadingTask.pipe(
Fiber.await,
Effect.timeout("1 second"),
Effect.as(false),
Effect.catch(() => Effect.succeed(true)),
)
if (show) {
overlay = createLoadingWindow()
yield* Effect.sleep("1 second")
}
}
yield* Fiber.await(loadingTask)
setInitStep({ phase: "done" })
if (overlay) yield* Deferred.await(loadingComplete)
mainWindow = createMainWindow()
if (mainWindow) {
@@ -389,8 +336,6 @@ const main = Effect.gen(function* () {
},
})
}
overlay?.close()
})
Effect.runFork(main)