refactor(app): rename cached context accessors (#33627)

This commit is contained in:
Brendan Allan 2026-06-24 16:55:57 +08:00 committed by GitHub
parent 2312a15e57
commit cacb7d045f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 30 additions and 30 deletions

View File

@ -20,7 +20,7 @@ export function DialogEditProject(props: { project: LocalProject; server: Server
const dialog = useDialog() const dialog = useDialog()
const global = useGlobal() const global = useGlobal()
const language = useLanguage() const language = useLanguage()
const serverCtx = createMemo(() => global.createServerCtx(props.server)) const serverCtx = createMemo(() => global.ensureServerCtx(props.server))
const serverSDK = () => serverCtx().sdk const serverSDK = () => serverCtx().sdk
const serverSync = () => serverCtx().sync const serverSync = () => serverCtx().sync

View File

@ -39,7 +39,7 @@ interface DialogSelectDirectoryV2Props {
export function DialogSelectDirectoryV2(props: DialogSelectDirectoryV2Props) { export function DialogSelectDirectoryV2(props: DialogSelectDirectoryV2Props) {
const global = useGlobal() const global = useGlobal()
const { sync, sdk } = global.createServerCtx(props.server) const { sync, sdk } = global.ensureServerCtx(props.server)
const dialog = useDialog() const dialog = useDialog()
const language = useLanguage() const language = useLanguage()
const policy = pickerMode(props.mode ?? "directory", props.start) const policy = pickerMode(props.mode ?? "directory", props.start)

View File

@ -49,7 +49,7 @@ function uniqueRows(rows: Row[]) {
export function DialogSelectDirectory(props: DialogSelectDirectoryProps) { export function DialogSelectDirectory(props: DialogSelectDirectoryProps) {
const global = useGlobal() const global = useGlobal()
const { sync, sdk, ...serverCtx } = global.createServerCtx(props.server) const { sync, sdk, ...serverCtx } = global.ensureServerCtx(props.server)
const dialog = useDialog() const dialog = useDialog()
const language = useLanguage() const language = useLanguage()

View File

@ -26,7 +26,7 @@ export function SettingsServerScope(props: ParentProps) {
function SettingsServerDataProviders(props: ParentProps<{ server: ServerConnection.Any }>) { function SettingsServerDataProviders(props: ParentProps<{ server: ServerConnection.Any }>) {
const global = useGlobal() const global = useGlobal()
const serverCtx = () => global.createServerCtx(props.server) const serverCtx = () => global.ensureServerCtx(props.server)
return ( return (
<QueryClientProvider client={serverCtx().queryClient}> <QueryClientProvider client={serverCtx().queryClient}>

View File

@ -276,7 +276,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) {
const conn = global.servers const conn = global.servers
.list() .list()
.find((item) => ServerConnection.key(item) === (route.server ?? server.key)) .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 }) => ({ route, sdk }) =>
sdk.client.session sdk.client.session
@ -348,7 +348,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) {
} }
const fallback = global.servers.list().flatMap((conn) => { 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 }] : [] return project ? [{ server: ServerConnection.key(conn), project }] : []
})[0] })[0]
if (!fallback) return if (!fallback) return
@ -515,7 +515,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) {
const serverCtx = createMemo(() => { const serverCtx = createMemo(() => {
const conn = server.list.find((item) => ServerConnection.key(item) === tab.server) 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 sdk = createMemo(() => serverCtx()?.sdk ?? null)
const cachedSession = createMemo(() => { const cachedSession = createMemo(() => {
@ -562,7 +562,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) {
createRoot((dispose) => { createRoot((dispose) => {
try { try {
void ctx.sync void ctx.sync
.createDirSyncContext(sess.directory) .ensureDirSyncContext(sess.directory)
.session.sync(sess.id) .session.sync(sess.id)
.catch(() => {}) .catch(() => {})
.finally(dispose) .finally(dispose)
@ -923,7 +923,7 @@ function TabNavItem(props: {
const global = useGlobal() const global = useGlobal()
const serverCtx = createMemo(() => { const serverCtx = createMemo(() => {
const conn = global.servers.list().find((item) => ServerConnection.key(item) === props.server) 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 ( return (

View File

@ -88,7 +88,7 @@ export const { use: useGlobal, provider: GlobalProvider } = createSimpleContext(
}, },
}, },
sessionPlacement, sessionPlacement,
createServerCtx(conn: ServerConnection.Any) { ensureServerCtx(conn: ServerConnection.Any) {
return ensureServerCtx(conn) return ensureServerCtx(conn)
}, },
} }

View File

@ -207,7 +207,7 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
const lookup = async (directory: string, sessionID?: string) => { const lookup = async (directory: string, sessionID?: string) => {
if (!sessionID) return undefined if (!sessionID) return undefined
const sync = serverSync().createDirSyncContext(directory) const sync = serverSync().ensureDirSyncContext(directory)
const session = sync.session.get(sessionID) const session = sync.session.get(sessionID)
if (session) return session if (session) return session
return sync.session return sync.session

View File

@ -2,7 +2,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
import { type Accessor, createMemo } from "solid-js" import { type Accessor, createMemo } from "solid-js"
import { type ServerSDK, useServerSDK } from "./server-sdk" import { type ServerSDK, useServerSDK } from "./server-sdk"
export type DirectorySDK = ReturnType<ServerSDK["createDirSdkContext"]> export type DirectorySDK = ReturnType<ServerSDK["ensureDirSdkContext"]>
export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
name: "SDK", name: "SDK",
@ -11,7 +11,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
const serverSDK = useServerSDK() const serverSDK = useServerSDK()
return createMemo(() => { return createMemo(() => {
const directory = typeof props.directory === "function" ? props.directory() : props.directory const directory = typeof props.directory === "function" ? props.directory() : props.directory
return serverSDK().createDirSdkContext(directory) return serverSDK().ensureDirSdkContext(directory)
}) })
}, },
}) })

View File

@ -289,13 +289,13 @@ function createServerSdkContextBase(server: ServerConnection.Any, scope: ServerS
type ServerSDKBase = ReturnType<typeof createServerSdkContextBase> type ServerSDKBase = ReturnType<typeof createServerSdkContextBase>
export type ServerSDK = ServerSDKBase & { export type ServerSDK = ServerSDKBase & {
createDirSdkContext: (directory: string) => ReturnType<typeof createDirSdkContext> ensureDirSdkContext: (directory: string) => ReturnType<typeof createDirSdkContext>
} }
export function createServerSdkContext(server: ServerConnection.Any, scope: ServerScope): ServerSDK { export function createServerSdkContext(server: ServerConnection.Any, scope: ServerScope): ServerSDK {
const sdk = createServerSdkContextBase(server, scope) const sdk = createServerSdkContextBase(server, scope)
return Object.assign(sdk, { 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<ServerSDK>(() => { return createMemo<ServerSDK>(() => {
const conn = props.server?.() ?? server.current const conn = props.server?.() ?? server.current
if (!conn) throw new Error(language.t("error.serverSDK.noServerAvailable")) if (!conn) throw new Error(language.t("error.serverSDK.noServerAvailable"))
return global.createServerCtx(conn).sdk return global.ensureServerCtx(conn).sdk
}) })
}, },
}) })

View File

@ -509,7 +509,7 @@ export function createServerSyncContextInner(serverSDK: ServerSDK) {
export function createServerSyncContext(serverSDK: ServerSDK) { export function createServerSyncContext(serverSDK: ServerSDK) {
const inner = createServerSyncContextInner(serverSDK) const inner = createServerSyncContextInner(serverSDK)
return Object.assign(inner, { return Object.assign(inner, {
createDirSyncContext: createRefCountMap( ensureDirSyncContext: createRefCountMap(
(dir) => createDirSyncContext(dir, inner, serverSDK), (dir) => createDirSyncContext(dir, inner, serverSDK),
(dir) => inner.disableMcp(dir), (dir) => inner.disableMcp(dir),
directoryKey, directoryKey,
@ -531,7 +531,7 @@ export const { use: useServerSync, provider: ServerSyncProvider } = createSimple
return createMemo<ServerSync>(() => { return createMemo<ServerSync>(() => {
const conn = props.server?.() ?? server.current const conn = props.server?.() ?? server.current
if (!conn) throw new Error(language.t("error.serverSDK.noServerAvailable")) if (!conn) throw new Error(language.t("error.serverSDK.noServerAvailable"))
return global.createServerCtx(conn).sync return global.ensureServerCtx(conn).sync
}) })
}, },
}) })

View File

@ -113,7 +113,7 @@ export const useSync = () => {
const serverSync = useServerSync() const serverSync = useServerSync()
const sdk = useSDK() const sdk = useSDK()
return createMemo(() => serverSync().createDirSyncContext(sdk().directory)) return createMemo(() => serverSync().ensureDirSyncContext(sdk().directory))
} }
export type DirectorySync = ReturnType<ReturnType<typeof useSync>> export type DirectorySync = ReturnType<ReturnType<typeof useSync>>

View File

@ -154,7 +154,7 @@ export function NewHome() {
const focusedServerCtx = createMemo(() => { const focusedServerCtx = createMemo(() => {
const conn = focusedServer() const conn = focusedServer()
if (!conn) return if (!conn) return
return global.createServerCtx(conn) return global.ensureServerCtx(conn)
}) })
const focusedSync = () => focusedServerCtx()?.sync ?? sync() const focusedSync = () => focusedServerCtx()?.sync ?? sync()
const projects = createMemo(() => focusedServerCtx()?.projects.list() ?? layout.projects.list()) const projects = createMemo(() => focusedServerCtx()?.projects.list() ?? layout.projects.list())
@ -216,7 +216,7 @@ export function NewHome() {
prefetched.add(key) prefetched.add(key)
createRoot((dispose) => { createRoot((dispose) => {
try { try {
const directory = ctx.sync.createDirSyncContext(record.session.directory) const directory = ctx.sync.ensureDirSyncContext(record.session.directory)
void directory.session void directory.session
.sync(record.session.id) .sync(record.session.id)
.then(() => { .then(() => {
@ -288,7 +288,7 @@ export function NewHome() {
const key = ServerConnection.key(conn) const key = ServerConnection.key(conn)
if ( if (
!global !global
.createServerCtx(conn) .ensureServerCtx(conn)
.projects.list() .projects.list()
.some((project) => project.worktree === directory) .some((project) => project.worktree === directory)
) )
@ -299,7 +299,7 @@ export function NewHome() {
function addProjects(conn: ServerConnection.Any, directories: string[]) { function addProjects(conn: ServerConnection.Any, directories: string[]) {
const directory = directories[0] const directory = directories[0]
if (!directory) return if (!directory) return
const ctx = global.createServerCtx(conn) const ctx = global.ensureServerCtx(conn)
directories.forEach(ctx.projects.open) directories.forEach(ctx.projects.open)
ctx.projects.touch(directory) ctx.projects.touch(directory)
setSelection({ server: ServerConnection.key(conn), directory }) setSelection({ server: ServerConnection.key(conn), directory })
@ -313,7 +313,7 @@ export function NewHome() {
} }
function openProjectNewSession(conn: ServerConnection.Any, directory: string) { function openProjectNewSession(conn: ServerConnection.Any, directory: string) {
const ctx = global.createServerCtx(conn) const ctx = global.ensureServerCtx(conn)
ctx.projects.open(directory) ctx.projects.open(directory)
ctx.projects.touch(directory) ctx.projects.touch(directory)
tabs.newDraft({ server: ServerConnection.key(conn), directory }) tabs.newDraft({ server: ServerConnection.key(conn), directory })
@ -342,7 +342,7 @@ export function NewHome() {
const conn = focusedServer() const conn = focusedServer()
if (!conn) return if (!conn) return
const directory = project?.worktree ?? session.directory const directory = project?.worktree ?? session.directory
const ctx = global.createServerCtx(conn) const ctx = global.ensureServerCtx(conn)
global.sessionPlacement.set({ global.sessionPlacement.set({
server: ServerConnection.key(conn), server: ServerConnection.key(conn),
leafID: session.id, leafID: session.id,
@ -391,7 +391,7 @@ export function NewHome() {
const next = closeHomeProject( const next = closeHomeProject(
state.selection, state.selection,
ServerConnection.key(conn), ServerConnection.key(conn),
global.createServerCtx(conn).projects, global.ensureServerCtx(conn).projects,
directory, directory,
) )
if (next) setSelection(next) if (next) setSelection(next)
@ -528,7 +528,7 @@ function HomeProjectColumn(props: {
{(item) => { {(item) => {
const key = ServerConnection.key(item) const key = ServerConnection.key(item)
const healthy = () => !!global.servers.health[key]?.healthy const healthy = () => !!global.servers.health[key]?.healthy
const serverCtx = global.createServerCtx(item) const serverCtx = global.ensureServerCtx(item)
const collapsed = () => !!state.collapsed[key] const collapsed = () => !!state.collapsed[key]
return ( return (
<div class="flex max-h-[min(572px,calc(100vh_-_300px))] min-w-0 flex-col gap-1 overflow-y-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"> <div class="flex max-h-[min(572px,calc(100vh_-_300px))] min-w-0 flex-col gap-1 overflow-y-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden">
@ -1204,7 +1204,7 @@ export function LegacyHome() {
}) })
function openProject(server: ServerConnection.Any, directory: string) { function openProject(server: ServerConnection.Any, directory: string) {
const serverCtx = global.createServerCtx(server) const serverCtx = global.ensureServerCtx(server)
serverCtx.projects.open(directory) serverCtx.projects.open(directory)
serverCtx.projects.touch(directory) serverCtx.projects.touch(directory)
navigate(`/${base64Encode(directory)}`) navigate(`/${base64Encode(directory)}`)

View File

@ -1299,7 +1299,7 @@ export default function LegacyLayout(props: ParentProps) {
} }
const openSession = async (target: { directory: string; id: string }) => { const openSession = async (target: { directory: string; id: string }) => {
if (!canOpen(target.directory)) return false if (!canOpen(target.directory)) return false
const sync = serverSync().createDirSyncContext(target.directory) const sync = serverSync().ensureDirSyncContext(target.directory)
if (sync.session.get(target.id)) { if (sync.session.get(target.id)) {
setStore("lastProjectSession", root, { directory: target.directory, id: target.id, at: Date.now() }) setStore("lastProjectSession", root, { directory: target.directory, id: target.id, at: Date.now() })
navigateWithSidebarReset(`/${base64Encode(target.directory)}/session/${target.id}`) navigateWithSidebarReset(`/${base64Encode(target.directory)}/session/${target.id}`)

View File

@ -91,7 +91,7 @@ export function SessionComposerRegion(props: {
}) })
const projectServerCtx = createMemo(() => { const projectServerCtx = createMemo(() => {
const conn = projectServer() const conn = projectServer()
if (conn) return global.createServerCtx(conn) if (conn) return global.ensureServerCtx(conn)
}) })
const projects = createMemo(() => const projects = createMemo(() =>
search.draftId ? (projectServerCtx()?.projects.list() ?? []) : layout.projects.list(), search.draftId ? (projectServerCtx()?.projects.list() ?? []) : layout.projects.list(),