summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/global-sync.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-24 18:49:02 -0500
committerAdam <[email protected]>2026-03-25 05:59:05 -0500
commit0dbfefa08088270a000496cfe94e11b5bf3ce821 (patch)
tree022df9271b5825e7c8e1192f240d31de79904075 /packages/app/src/context/global-sync.tsx
parentd1c49ba210315900b7d21a7d4926b739d8021c6e (diff)
downloadopencode-0dbfefa08088270a000496cfe94e11b5bf3ce821.tar.gz
opencode-0dbfefa08088270a000496cfe94e11b5bf3ce821.zip
Reapply "fix(app): startup efficiency (#18854)"
This reverts commit a379eb38673aad097e1f178307865ec40a5ac3ea.
Diffstat (limited to 'packages/app/src/context/global-sync.tsx')
-rw-r--r--packages/app/src/context/global-sync.tsx58
1 files changed, 28 insertions, 30 deletions
diff --git a/packages/app/src/context/global-sync.tsx b/packages/app/src/context/global-sync.tsx
index 2d1e50135..cbd08e99f 100644
--- a/packages/app/src/context/global-sync.tsx
+++ b/packages/app/src/context/global-sync.tsx
@@ -9,17 +9,7 @@ import type {
} from "@opencode-ai/sdk/v2/client"
import { showToast } from "@opencode-ai/ui/toast"
import { getFilename } from "@opencode-ai/util/path"
-import {
- createContext,
- getOwner,
- Match,
- onCleanup,
- onMount,
- type ParentProps,
- Switch,
- untrack,
- useContext,
-} from "solid-js"
+import { createContext, getOwner, onCleanup, onMount, type ParentProps, untrack, useContext } from "solid-js"
import { createStore, produce, reconcile } from "solid-js/store"
import { useLanguage } from "@/context/language"
import { Persist, persisted } from "@/utils/persist"
@@ -80,6 +70,8 @@ function createGlobalSync() {
let active = true
let projectWritten = false
+ let bootedAt = 0
+ let bootingRoot = false
onCleanup(() => {
active = false
@@ -258,6 +250,11 @@ function createGlobalSync() {
const sdk = sdkFor(directory)
await bootstrapDirectory({
directory,
+ global: {
+ config: globalStore.config,
+ project: globalStore.project,
+ provider: globalStore.provider,
+ },
sdk,
store: child[0],
setStore: child[1],
@@ -278,15 +275,20 @@ function createGlobalSync() {
const unsub = globalSDK.event.listen((e) => {
const directory = e.name
const event = e.details
+ const recent = bootingRoot || Date.now() - bootedAt < 1500
if (directory === "global") {
applyGlobalEvent({
event,
project: globalStore.project,
- refresh: queue.refresh,
+ refresh: () => {
+ if (recent) return
+ queue.refresh()
+ },
setGlobalProject: setProjects,
})
if (event.type === "server.connected" || event.type === "global.disposed") {
+ if (recent) return
for (const directory of Object.keys(children.children)) {
queue.push(directory)
}
@@ -325,17 +327,19 @@ function createGlobalSync() {
})
async function bootstrap() {
- await bootstrapGlobal({
- globalSDK: globalSDK.client,
- connectErrorTitle: language.t("dialog.server.add.error"),
- connectErrorDescription: language.t("error.globalSync.connectFailed", {
- url: globalSDK.url,
- }),
- requestFailedTitle: language.t("common.requestFailed"),
- translate: language.t,
- formatMoreCount: (count) => language.t("common.moreCountSuffix", { count }),
- setGlobalStore: setBootStore,
- })
+ bootingRoot = true
+ try {
+ await bootstrapGlobal({
+ globalSDK: globalSDK.client,
+ requestFailedTitle: language.t("common.requestFailed"),
+ translate: language.t,
+ formatMoreCount: (count) => language.t("common.moreCountSuffix", { count }),
+ setGlobalStore: setBootStore,
+ })
+ bootedAt = Date.now()
+ } finally {
+ bootingRoot = false
+ }
}
onMount(() => {
@@ -392,13 +396,7 @@ const GlobalSyncContext = createContext<ReturnType<typeof createGlobalSync>>()
export function GlobalSyncProvider(props: ParentProps) {
const value = createGlobalSync()
- return (
- <Switch>
- <Match when={value.ready}>
- <GlobalSyncContext.Provider value={value}>{props.children}</GlobalSyncContext.Provider>
- </Match>
- </Switch>
- )
+ return <GlobalSyncContext.Provider value={value}>{props.children}</GlobalSyncContext.Provider>
}
export function useGlobalSync() {