diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 29ee4dfea..b861492af 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -20,7 +20,7 @@ export function DialogEditProject(props: { project: LocalProject; server: Server const dialog = useDialog() const global = useGlobal() const language = useLanguage() - const serverCtx = createMemo(() => global.createServerCtx(props.server)) + const serverCtx = createMemo(() => global.ensureServerCtx(props.server)) const serverSDK = () => serverCtx().sdk const serverSync = () => serverCtx().sync diff --git a/packages/app/src/components/dialog-select-directory-v2.tsx b/packages/app/src/components/dialog-select-directory-v2.tsx index 5780ef15c..d24d106ec 100644 --- a/packages/app/src/components/dialog-select-directory-v2.tsx +++ b/packages/app/src/components/dialog-select-directory-v2.tsx @@ -39,7 +39,7 @@ interface DialogSelectDirectoryV2Props { export function DialogSelectDirectoryV2(props: DialogSelectDirectoryV2Props) { const global = useGlobal() - const { sync, sdk } = global.createServerCtx(props.server) + const { sync, sdk } = global.ensureServerCtx(props.server) const dialog = useDialog() const language = useLanguage() const policy = pickerMode(props.mode ?? "directory", props.start) diff --git a/packages/app/src/components/dialog-select-directory.tsx b/packages/app/src/components/dialog-select-directory.tsx index 7dd1acc05..8ba09a9f9 100644 --- a/packages/app/src/components/dialog-select-directory.tsx +++ b/packages/app/src/components/dialog-select-directory.tsx @@ -49,7 +49,7 @@ function uniqueRows(rows: Row[]) { export function DialogSelectDirectory(props: DialogSelectDirectoryProps) { const global = useGlobal() - const { sync, sdk, ...serverCtx } = global.createServerCtx(props.server) + const { sync, sdk, ...serverCtx } = global.ensureServerCtx(props.server) const dialog = useDialog() const language = useLanguage() diff --git a/packages/app/src/components/settings-server-picker.tsx b/packages/app/src/components/settings-server-picker.tsx index 294eea618..f3544c058 100644 --- a/packages/app/src/components/settings-server-picker.tsx +++ b/packages/app/src/components/settings-server-picker.tsx @@ -26,7 +26,7 @@ export function SettingsServerScope(props: ParentProps) { function SettingsServerDataProviders(props: ParentProps<{ server: ServerConnection.Any }>) { const global = useGlobal() - const serverCtx = () => global.createServerCtx(props.server) + const serverCtx = () => global.ensureServerCtx(props.server) return ( diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index ad6d84767..477792d64 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -276,7 +276,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) { const conn = global.servers .list() .find((item) => ServerConnection.key(item) === (route.server ?? server.key)) - return conn ? { route, sdk: global.createServerCtx(conn).sdk } : undefined + return conn ? { route, sdk: global.ensureServerCtx(conn).sdk } : undefined }, ({ route, sdk }) => sdk.client.session @@ -348,7 +348,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) { } const fallback = global.servers.list().flatMap((conn) => { - const project = global.createServerCtx(conn).projects.list()[0] + const project = global.ensureServerCtx(conn).projects.list()[0] return project ? [{ server: ServerConnection.key(conn), project }] : [] })[0] if (!fallback) return @@ -515,7 +515,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) { const serverCtx = createMemo(() => { const conn = server.list.find((item) => ServerConnection.key(item) === tab.server) - return conn ? global.createServerCtx(conn) : undefined + return conn ? global.ensureServerCtx(conn) : undefined }) const sdk = createMemo(() => serverCtx()?.sdk ?? null) const cachedSession = createMemo(() => { @@ -562,7 +562,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) { createRoot((dispose) => { try { void ctx.sync - .createDirSyncContext(sess.directory) + .ensureDirSyncContext(sess.directory) .session.sync(sess.id) .catch(() => {}) .finally(dispose) @@ -923,7 +923,7 @@ function TabNavItem(props: { const global = useGlobal() const serverCtx = createMemo(() => { const conn = global.servers.list().find((item) => ServerConnection.key(item) === props.server) - if (conn) return global.createServerCtx(conn) + if (conn) return global.ensureServerCtx(conn) }) return ( diff --git a/packages/app/src/context/global.tsx b/packages/app/src/context/global.tsx index 11f2517b0..cebf811c7 100644 --- a/packages/app/src/context/global.tsx +++ b/packages/app/src/context/global.tsx @@ -88,7 +88,7 @@ export const { use: useGlobal, provider: GlobalProvider } = createSimpleContext( }, }, sessionPlacement, - createServerCtx(conn: ServerConnection.Any) { + ensureServerCtx(conn: ServerConnection.Any) { return ensureServerCtx(conn) }, } diff --git a/packages/app/src/context/notification.tsx b/packages/app/src/context/notification.tsx index 753df2acc..7318af084 100644 --- a/packages/app/src/context/notification.tsx +++ b/packages/app/src/context/notification.tsx @@ -207,7 +207,7 @@ export const { use: useNotification, provider: NotificationProvider } = createSi const lookup = async (directory: string, sessionID?: string) => { if (!sessionID) return undefined - const sync = serverSync().createDirSyncContext(directory) + const sync = serverSync().ensureDirSyncContext(directory) const session = sync.session.get(sessionID) if (session) return session return sync.session diff --git a/packages/app/src/context/sdk.tsx b/packages/app/src/context/sdk.tsx index b8b7edce4..c5ee9bd7c 100644 --- a/packages/app/src/context/sdk.tsx +++ b/packages/app/src/context/sdk.tsx @@ -2,7 +2,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context" import { type Accessor, createMemo } from "solid-js" import { type ServerSDK, useServerSDK } from "./server-sdk" -export type DirectorySDK = ReturnType +export type DirectorySDK = ReturnType export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ name: "SDK", @@ -11,7 +11,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ const serverSDK = useServerSDK() return createMemo(() => { const directory = typeof props.directory === "function" ? props.directory() : props.directory - return serverSDK().createDirSdkContext(directory) + return serverSDK().ensureDirSdkContext(directory) }) }, }) diff --git a/packages/app/src/context/server-sdk.tsx b/packages/app/src/context/server-sdk.tsx index a010e6884..2f63d3482 100644 --- a/packages/app/src/context/server-sdk.tsx +++ b/packages/app/src/context/server-sdk.tsx @@ -289,13 +289,13 @@ function createServerSdkContextBase(server: ServerConnection.Any, scope: ServerS type ServerSDKBase = ReturnType export type ServerSDK = ServerSDKBase & { - createDirSdkContext: (directory: string) => ReturnType + ensureDirSdkContext: (directory: string) => ReturnType } export function createServerSdkContext(server: ServerConnection.Any, scope: ServerScope): ServerSDK { const sdk = createServerSdkContextBase(server, scope) return Object.assign(sdk, { - createDirSdkContext: createRefCountMap((dir) => createDirSdkContext(dir, sdk)), + ensureDirSdkContext: createRefCountMap((dir) => createDirSdkContext(dir, sdk)), }) } @@ -311,7 +311,7 @@ export const { use: useServerSDK, provider: ServerSDKProvider } = createSimpleCo return createMemo(() => { const conn = props.server?.() ?? server.current if (!conn) throw new Error(language.t("error.serverSDK.noServerAvailable")) - return global.createServerCtx(conn).sdk + return global.ensureServerCtx(conn).sdk }) }, }) diff --git a/packages/app/src/context/server-sync.tsx b/packages/app/src/context/server-sync.tsx index fc79fdaa8..7d714240f 100644 --- a/packages/app/src/context/server-sync.tsx +++ b/packages/app/src/context/server-sync.tsx @@ -509,7 +509,7 @@ export function createServerSyncContextInner(serverSDK: ServerSDK) { export function createServerSyncContext(serverSDK: ServerSDK) { const inner = createServerSyncContextInner(serverSDK) return Object.assign(inner, { - createDirSyncContext: createRefCountMap( + ensureDirSyncContext: createRefCountMap( (dir) => createDirSyncContext(dir, inner, serverSDK), (dir) => inner.disableMcp(dir), directoryKey, @@ -531,7 +531,7 @@ export const { use: useServerSync, provider: ServerSyncProvider } = createSimple return createMemo(() => { const conn = props.server?.() ?? server.current if (!conn) throw new Error(language.t("error.serverSDK.noServerAvailable")) - return global.createServerCtx(conn).sync + return global.ensureServerCtx(conn).sync }) }, }) diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx index 5ba4fe265..b90f49ffd 100644 --- a/packages/app/src/context/sync.tsx +++ b/packages/app/src/context/sync.tsx @@ -113,7 +113,7 @@ export const useSync = () => { const serverSync = useServerSync() const sdk = useSDK() - return createMemo(() => serverSync().createDirSyncContext(sdk().directory)) + return createMemo(() => serverSync().ensureDirSyncContext(sdk().directory)) } export type DirectorySync = ReturnType> diff --git a/packages/app/src/pages/home.tsx b/packages/app/src/pages/home.tsx index f4a5071d3..907ea91f1 100644 --- a/packages/app/src/pages/home.tsx +++ b/packages/app/src/pages/home.tsx @@ -154,7 +154,7 @@ export function NewHome() { const focusedServerCtx = createMemo(() => { const conn = focusedServer() if (!conn) return - return global.createServerCtx(conn) + return global.ensureServerCtx(conn) }) const focusedSync = () => focusedServerCtx()?.sync ?? sync() const projects = createMemo(() => focusedServerCtx()?.projects.list() ?? layout.projects.list()) @@ -216,7 +216,7 @@ export function NewHome() { prefetched.add(key) createRoot((dispose) => { try { - const directory = ctx.sync.createDirSyncContext(record.session.directory) + const directory = ctx.sync.ensureDirSyncContext(record.session.directory) void directory.session .sync(record.session.id) .then(() => { @@ -288,7 +288,7 @@ export function NewHome() { const key = ServerConnection.key(conn) if ( !global - .createServerCtx(conn) + .ensureServerCtx(conn) .projects.list() .some((project) => project.worktree === directory) ) @@ -299,7 +299,7 @@ export function NewHome() { function addProjects(conn: ServerConnection.Any, directories: string[]) { const directory = directories[0] if (!directory) return - const ctx = global.createServerCtx(conn) + const ctx = global.ensureServerCtx(conn) directories.forEach(ctx.projects.open) ctx.projects.touch(directory) setSelection({ server: ServerConnection.key(conn), directory }) @@ -313,7 +313,7 @@ export function NewHome() { } function openProjectNewSession(conn: ServerConnection.Any, directory: string) { - const ctx = global.createServerCtx(conn) + const ctx = global.ensureServerCtx(conn) ctx.projects.open(directory) ctx.projects.touch(directory) tabs.newDraft({ server: ServerConnection.key(conn), directory }) @@ -342,7 +342,7 @@ export function NewHome() { const conn = focusedServer() if (!conn) return const directory = project?.worktree ?? session.directory - const ctx = global.createServerCtx(conn) + const ctx = global.ensureServerCtx(conn) global.sessionPlacement.set({ server: ServerConnection.key(conn), leafID: session.id, @@ -391,7 +391,7 @@ export function NewHome() { const next = closeHomeProject( state.selection, ServerConnection.key(conn), - global.createServerCtx(conn).projects, + global.ensureServerCtx(conn).projects, directory, ) if (next) setSelection(next) @@ -528,7 +528,7 @@ function HomeProjectColumn(props: { {(item) => { const key = ServerConnection.key(item) const healthy = () => !!global.servers.health[key]?.healthy - const serverCtx = global.createServerCtx(item) + const serverCtx = global.ensureServerCtx(item) const collapsed = () => !!state.collapsed[key] return (
@@ -1204,7 +1204,7 @@ export function LegacyHome() { }) function openProject(server: ServerConnection.Any, directory: string) { - const serverCtx = global.createServerCtx(server) + const serverCtx = global.ensureServerCtx(server) serverCtx.projects.open(directory) serverCtx.projects.touch(directory) navigate(`/${base64Encode(directory)}`) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 7bbce7aff..ee1e7f98b 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1299,7 +1299,7 @@ export default function LegacyLayout(props: ParentProps) { } const openSession = async (target: { directory: string; id: string }) => { if (!canOpen(target.directory)) return false - const sync = serverSync().createDirSyncContext(target.directory) + const sync = serverSync().ensureDirSyncContext(target.directory) if (sync.session.get(target.id)) { setStore("lastProjectSession", root, { directory: target.directory, id: target.id, at: Date.now() }) navigateWithSidebarReset(`/${base64Encode(target.directory)}/session/${target.id}`) diff --git a/packages/app/src/pages/session/composer/session-composer-region.tsx b/packages/app/src/pages/session/composer/session-composer-region.tsx index 023ddfff9..ca4fee890 100644 --- a/packages/app/src/pages/session/composer/session-composer-region.tsx +++ b/packages/app/src/pages/session/composer/session-composer-region.tsx @@ -91,7 +91,7 @@ export function SessionComposerRegion(props: { }) const projectServerCtx = createMemo(() => { const conn = projectServer() - if (conn) return global.createServerCtx(conn) + if (conn) return global.ensureServerCtx(conn) }) const projects = createMemo(() => search.draftId ? (projectServerCtx()?.projects.list() ?? []) : layout.projects.list(),