Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/app/src/components/dialog-edit-project.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/components/dialog-select-directory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/components/settings-server-picker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<QueryClientProvider client={serverCtx().queryClient}>
Expand Down
10 changes: 5 additions & 5 deletions packages/app/src/components/titlebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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(() => {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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 (
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/context/global.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export const { use: useGlobal, provider: GlobalProvider } = createSimpleContext(
},
},
sessionPlacement,
createServerCtx(conn: ServerConnection.Any) {
ensureServerCtx(conn: ServerConnection.Any) {
return ensureServerCtx(conn)
},
}
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/context/notification.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions packages/app/src/context/sdk.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<ServerSDK["createDirSdkContext"]>
export type DirectorySDK = ReturnType<ServerSDK["ensureDirSdkContext"]>

export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
name: "SDK",
Expand All @@ -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)
})
},
})
6 changes: 3 additions & 3 deletions packages/app/src/context/server-sdk.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -289,13 +289,13 @@ function createServerSdkContextBase(server: ServerConnection.Any, scope: ServerS

type ServerSDKBase = ReturnType<typeof createServerSdkContextBase>
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 {
const sdk = createServerSdkContextBase(server, scope)
return Object.assign(sdk, {
createDirSdkContext: createRefCountMap((dir) => createDirSdkContext(dir, sdk)),
ensureDirSdkContext: createRefCountMap((dir) => createDirSdkContext(dir, sdk)),
})
}

Expand All @@ -311,7 +311,7 @@ export const { use: useServerSDK, provider: ServerSDKProvider } = createSimpleCo
return createMemo<ServerSDK>(() => {
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
})
},
})
Expand Down
4 changes: 2 additions & 2 deletions packages/app/src/context/server-sync.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -531,7 +531,7 @@ export const { use: useServerSync, provider: ServerSyncProvider } = createSimple
return createMemo<ServerSync>(() => {
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
})
},
})
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/context/sync.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<ReturnType<typeof useSync>>
18 changes: 9 additions & 9 deletions packages/app/src/pages/home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -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(() => {
Expand Down Expand Up @@ -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)
)
Expand All @@ -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 })
Expand All @@ -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 })
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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 (
<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">
Expand Down Expand Up @@ -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)}`)
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/pages/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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}`)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand Down
Loading