@@ -43,6 +43,7 @@ import { parseMarkdown } from "./markdown"
4343import { createMenu } from "./menu"
4444import { getDefaultServerUrl , getWslConfig , setDefaultServerUrl , setWslConfig , spawnLocalServer } from "./server"
4545import { createLoadingWindow , createMainWindow , setBackgroundColor , setDockIcon } from "./windows"
46+ import { drizzle } from "drizzle-orm/node-sqlite/driver"
4647import type { Server } from "virtual:opencode-server"
4748
4849const initEmitter = new EventEmitter ( )
@@ -139,15 +140,6 @@ async function initialize() {
139140 const url = `http://${ hostname } :${ port } `
140141 const password = randomUUID ( )
141142
142- logger . log ( "spawning sidecar" , { url } )
143- const { listener, health } = await spawnLocalServer ( hostname , port , password )
144- server = listener
145- serverReady . resolve ( {
146- url,
147- username : "opencode" ,
148- password,
149- } )
150-
151143 const loadingTask = ( async ( ) => {
152144 logger . log ( "sidecar connection started" , { url } )
153145
@@ -158,10 +150,32 @@ async function initialize() {
158150 if ( progress . type === "Done" ) sqliteDone ?. resolve ( )
159151 } )
160152
153+ if ( needsMigration ) {
154+ const { Database, JsonMigration } = await import ( "virtual:opencode-server" )
155+ await JsonMigration . run ( drizzle ( { client : Database . Client ( ) . $client } ) , {
156+ progress : ( event : { current : number ; total : number } ) => {
157+ const percent = Math . round ( event . current / event . total ) * 100
158+ initEmitter . emit ( "sqlite" , { type : "InProgress" , value : percent } )
159+ } ,
160+ } )
161+ initEmitter . emit ( "sqlite" , { type : "Done" } )
162+
163+ sqliteDone ?. resolve ( )
164+ }
165+
161166 if ( needsMigration ) {
162167 await sqliteDone ?. promise
163168 }
164169
170+ logger . log ( "spawning sidecar" , { url } )
171+ const { listener, health } = await spawnLocalServer ( hostname , port , password )
172+ server = listener
173+ serverReady . resolve ( {
174+ url,
175+ username : "opencode" ,
176+ password,
177+ } )
178+
165179 await Promise . race ( [
166180 health . wait ,
167181 delay ( 30_000 ) . then ( ( ) => {
0 commit comments