@@ -10,9 +10,8 @@ import type {
1010import { showToast } from "@opencode-ai/ui/toast"
1111import { getFilename } from "@opencode-ai/shared/util/path"
1212import { batch , createContext , getOwner , onCleanup , onMount , type ParentProps , untrack , useContext } from "solid-js"
13- import { createStore , produce , reconcile , unwrap } from "solid-js/store"
13+ import { createStore , produce , reconcile } from "solid-js/store"
1414import { useLanguage } from "@/context/language"
15- import { Persist , persisted } from "@/utils/persist"
1615import type { InitError } from "../pages/error"
1716import { useGlobalSDK } from "./global-sdk"
1817import {
@@ -31,9 +30,9 @@ import { estimateRootSessionTotal, loadRootSessionsWithFallback } from "./global
3130import { trimSessions } from "./global-sync/session-trim"
3231import type { ProjectMeta } from "./global-sync/types"
3332import { SESSION_RECENT_LIMIT } from "./global-sync/types"
34- import { sanitizeProject } from "./global-sync/utils"
3533import { formatServerError } from "@/utils/server-errors"
3634import { queryOptions , skipToken , useMutation , useQueries , useQuery , useQueryClient } from "@tanstack/solid-query"
35+ import { createRefreshQueue } from "./global-sync/queue"
3736
3837type GlobalStore = {
3938 ready : boolean
@@ -61,7 +60,7 @@ export const loadMcpQuery = (directory: string, sdk?: OpencodeClient) =>
6160export const loadLspQuery = ( directory : string , sdk ?: OpencodeClient ) =>
6261 queryOptions ( {
6362 queryKey : [ directory , "lsp" ] ,
64- queryFn : sdk ? ( ) => sdk . lsp . status ( ) . then ( ( r ) => r . data ?? { } ) : skipToken ,
63+ queryFn : sdk ? ( ) => sdk . lsp . status ( ) . then ( ( r ) => r . data ?? [ ] ) : skipToken ,
6564 } )
6665
6766function createGlobalSync ( ) {
@@ -75,11 +74,6 @@ function createGlobalSync() {
7574 const sessionLoads = new Map < string , Promise < void > > ( )
7675 const sessionMeta = new Map < string , { limit : number } > ( )
7776
78- const [ projectCache , setProjectCache , projectInit ] = persisted (
79- Persist . global ( "globalSync.project" , [ "globalSync.project.v1" ] ) ,
80- createStore ( { value : [ ] as Project [ ] } ) ,
81- )
82-
8377 const [ configQuery , providerQuery , pathQuery ] = useQueries ( ( ) => ( {
8478 queries : [ loadGlobalConfigQuery ( ) , loadProvidersQuery ( null ) , loadPathQuery ( null ) , loadProjectsQuery ( ) ] ,
8579 } ) )
@@ -88,7 +82,7 @@ function createGlobalSync() {
8882 get ready ( ) {
8983 return bootstrap . isPending
9084 } ,
91- project : projectCache . value ,
85+ project : [ ] ,
9286 session_todo : { } ,
9387 provider_auth : { } ,
9488 get path ( ) {
@@ -111,32 +105,18 @@ function createGlobalSync() {
111105 } )
112106 const queryClient = useQueryClient ( )
113107
114- let active = true
115- let projectWritten = false
116108 let bootedAt = 0
117109 let bootingRoot = false
118110 let eventFrame : number | undefined
119111 let eventTimer : ReturnType < typeof setTimeout > | undefined
120112
121- onCleanup ( ( ) => {
122- active = false
123- } )
124113 onCleanup ( ( ) => {
125114 if ( eventFrame !== undefined ) cancelAnimationFrame ( eventFrame )
126115 if ( eventTimer !== undefined ) clearTimeout ( eventTimer )
127116 } )
128117
129- const cacheProjects = ( ) => {
130- setProjectCache (
131- "value" ,
132- untrack ( ( ) => globalStore . project . map ( sanitizeProject ) ) ,
133- )
134- }
135-
136118 const setProjects = ( next : Project [ ] | ( ( draft : Project [ ] ) => Project [ ] ) ) => {
137- projectWritten = true
138119 setGlobalStore ( "project" , next )
139- cacheProjects ( )
140120 }
141121
142122 const setBootStore = ( ( ...input : unknown [ ] ) => {
@@ -171,16 +151,6 @@ function createGlobalSync() {
171151 return ( setGlobalStore as ( ...args : unknown [ ] ) => unknown ) ( ...input )
172152 } ) as typeof setGlobalStore
173153
174- if ( projectInit instanceof Promise ) {
175- void projectInit . then ( ( ) => {
176- if ( ! active ) return
177- if ( projectWritten ) return
178- const cached = projectCache . value
179- if ( cached . length === 0 ) return
180- setGlobalStore ( "project" , cached )
181- } )
182- }
183-
184154 const setSessionTodo = ( sessionID : string , todos : Todo [ ] | undefined ) => {
185155 if ( ! sessionID ) return
186156 if ( ! todos ) {
@@ -197,11 +167,22 @@ function createGlobalSync() {
197167
198168 const paused = ( ) => untrack ( ( ) => globalStore . reload ) !== undefined
199169
200- // const queue = createRefreshQueue({
201- // paused,
202- // bootstrap: () => queryClient.fetchQuery({ queryKey: ["bootstrap"] }),
203- // bootstrapInstance,
204- // })
170+ const queue = createRefreshQueue ( {
171+ paused,
172+ bootstrap : ( ) => queryClient . fetchQuery ( { queryKey : [ "bootstrap" ] } ) ,
173+ bootstrapInstance,
174+ } )
175+
176+ const sdkFor = ( directory : string ) => {
177+ const cached = sdkCache . get ( directory )
178+ if ( cached ) return cached
179+ const sdk = globalSDK . createClient ( {
180+ directory,
181+ throwOnError : true ,
182+ } )
183+ sdkCache . set ( directory , sdk )
184+ return sdk
185+ }
205186
206187 const children = createChildStoreManager ( {
207188 owner,
@@ -211,26 +192,16 @@ function createGlobalSync() {
211192 void bootstrapInstance ( directory )
212193 } ,
213194 onDispose : ( directory ) => {
214- // queue.clear(directory)
195+ queue . clear ( directory )
215196 sessionMeta . delete ( directory )
216197 sdkCache . delete ( directory )
217198 clearProviderRev ( directory )
218199 clearSessionPrefetchDirectory ( directory )
219200 } ,
220201 translate : language . t ,
202+ getSdk : sdkFor ,
221203 } )
222204
223- const sdkFor = ( directory : string ) => {
224- const cached = sdkCache . get ( directory )
225- if ( cached ) return cached
226- const sdk = globalSDK . createClient ( {
227- directory,
228- throwOnError : true ,
229- } )
230- sdkCache . set ( directory , sdk )
231- return sdk
232- }
233-
234205 async function loadSessions ( directory : string ) {
235206 const pending = sessionLoads . get ( directory )
236207 if ( pending ) return pending
@@ -362,7 +333,7 @@ function createGlobalSync() {
362333 if ( event . type === "server.connected" || event . type === "global.disposed" ) {
363334 if ( recent ) return
364335 for ( const directory of Object . keys ( children . children ) ) {
365- // queue.push(directory)
336+ queue . push ( directory )
366337 }
367338 }
368339 return
@@ -381,17 +352,15 @@ function createGlobalSync() {
381352 setSessionTodo,
382353 vcsCache : children . vcsCache . get ( directory ) ,
383354 loadLsp : ( ) => {
384- void queryClient . fetchQuery ( loadLspQuery ( directory , sdkFor ( directory ) ) ) . then ( ( data ) => {
385- setStore ( "lsp" , data ?? [ ] )
386- } )
355+ void queryClient . fetchQuery ( loadLspQuery ( directory , sdkFor ( directory ) ) )
387356 } ,
388357 } )
389358 } )
390359
391360 onCleanup ( unsub )
392- // onCleanup(() => {
393- // queue.dispose()
394- // })
361+ onCleanup ( ( ) => {
362+ queue . dispose ( )
363+ } )
395364 onCleanup ( ( ) => {
396365 for ( const directory of Object . keys ( children . children ) ) {
397366 children . disposeDirectory ( directory )
@@ -427,7 +396,7 @@ function createGlobalSync() {
427396
428397 const updateConfigMutation = useMutation ( ( ) => ( {
429398 mutationFn : ( config : Config ) => globalSDK . client . global . config . update ( { config } ) ,
430- // onSuccess: () => bootstrap.refetch(),
399+ onSuccess : ( ) => bootstrap . refetch ( ) ,
431400 } ) )
432401
433402 return {
0 commit comments