From 8bd5407019e667a7cc9a52db45ac6055be70dc92 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Tue, 4 Aug 2026 14:13:13 +0800 Subject: [PATCH] refactor(app): gate unsupported v2 capabilities --- .../src/components/dialog-custom-provider.tsx | 2 +- .../components/dialog-select-directory-v2.tsx | 7 +- .../components/dialog-select-directory.tsx | 7 +- packages/app/src/components/edit-project.ts | 8 +- .../app/src/components/settings-general.tsx | 25 ++- .../app/src/components/settings-providers.tsx | 4 +- .../src/components/settings-v2/general.tsx | 25 ++- .../src/components/settings-v2/providers.tsx | 4 +- .../src/components/status-popover-body.tsx | 16 +- packages/app/src/context/directory-sync.ts | 3 +- .../src/context/global-sync/bootstrap.test.ts | 38 +--- .../app/src/context/global-sync/bootstrap.ts | 96 +++------- .../src/context/global-sync/child-store.ts | 5 +- .../src/context/global-sync/session-load.ts | 11 -- packages/app/src/context/layout.tsx | 2 +- packages/app/src/context/permission.tsx | 3 - packages/app/src/context/server-sdk.tsx | 17 +- packages/app/src/context/server-session.ts | 16 +- packages/app/src/context/server-sync.tsx | 56 +++--- .../pages/home/home-projects-controller.tsx | 1 + .../app/src/pages/home/home-projects-view.tsx | 9 +- packages/app/src/pages/home/home-projects.tsx | 1 + .../pages/home/home-sessions-controller.tsx | 16 +- .../app/src/pages/home/home-sessions-view.tsx | 7 +- packages/app/src/pages/home/home-sessions.tsx | 1 + packages/app/src/pages/layout.tsx | 64 +++---- .../app/src/pages/layout/sidebar-items.tsx | 3 +- .../app/src/pages/layout/sidebar-project.tsx | 11 +- .../src/pages/layout/sidebar-workspace.tsx | 19 +- packages/app/src/pages/session.tsx | 24 ++- .../session/timeline/message-timeline.tsx | 29 +-- .../pages/session/use-session-commands.tsx | 7 +- packages/app/src/utils/server-compat.ts | 168 ++++++++++++++---- 33 files changed, 371 insertions(+), 334 deletions(-) diff --git a/packages/app/src/components/dialog-custom-provider.tsx b/packages/app/src/components/dialog-custom-provider.tsx index 5db684a2da2..af476f38b79 100644 --- a/packages/app/src/components/dialog-custom-provider.tsx +++ b/packages/app/src/components/dialog-custom-provider.tsx @@ -136,7 +136,7 @@ export function CustomProviderForm(props: { autofocus?: boolean } = {}) { const nextDisabled = disabledProviders.filter((id) => id !== result.providerID) if (result.key) { - await serverSDK().client.auth.set({ + await serverSDK().legacy.auth.set({ providerID: result.providerID, auth: { type: "api", diff --git a/packages/app/src/components/dialog-select-directory-v2.tsx b/packages/app/src/components/dialog-select-directory-v2.tsx index e799f638d8d..ada42b7d83e 100644 --- a/packages/app/src/components/dialog-select-directory-v2.tsx +++ b/packages/app/src/components/dialog-select-directory-v2.tsx @@ -71,11 +71,8 @@ export function DialogSelectDirectoryV2(props: DialogSelectDirectoryV2Props) { () => (missingBase() ? true : undefined), async (): Promise => { if ((await sdk.protocol) === "v1") - return sdk.client.path - .get() - .then((result) => result.data) - .catch(() => undefined) - return sdk.currentApi.location + return sdk.legacy.path.get().catch(() => undefined) + return sdk.api.location .get() .then((location) => ({ state: "", diff --git a/packages/app/src/components/dialog-select-directory.tsx b/packages/app/src/components/dialog-select-directory.tsx index dfce1571ed9..a6b1894a839 100644 --- a/packages/app/src/components/dialog-select-directory.tsx +++ b/packages/app/src/components/dialog-select-directory.tsx @@ -62,11 +62,8 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) { () => (missingBase() ? true : undefined), async (): Promise => { if ((await sdk.protocol) === "v1") - return sdk.client.path - .get() - .then((result) => result.data) - .catch(() => undefined) - return sdk.currentApi.location + return sdk.legacy.path.get().catch(() => undefined) + return sdk.api.location .get() .then((location) => ({ state: "", diff --git a/packages/app/src/components/edit-project.ts b/packages/app/src/components/edit-project.ts index 0c5d576e934..efbf80840d4 100644 --- a/packages/app/src/components/edit-project.ts +++ b/packages/app/src/components/edit-project.ts @@ -73,7 +73,7 @@ export function createEditProjectModel(props: { project: LocalProject; server: S if (props.project.id && props.project.id !== "global") { if ((await serverCtx().sdk.protocol) !== "v1") return const project = await serverCtx() - .sdk.client.project.update({ + .sdk.legacy.project.update({ projectID: props.project.id, directory: props.project.worktree, name, @@ -82,12 +82,6 @@ export function createEditProjectModel(props: { project: LocalProject; server: S }) .then((result) => result.data) if (!project) return - // const project = await serverCtx().sdk.api.project.update({ - // projectID: props.project.id, - // name, - // icon: { color: store.color || "", override: store.iconOverride || "" }, - // commands: { start }, - // }) serverCtx().sync.set("project", (items) => items.map((item) => (item.id === project.id ? normalizeProjectInfo(project) : item)), ) diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index a20e66de3ee..18a2945c963 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -13,7 +13,7 @@ import { useLanguage } from "@/context/language" import { usePermission } from "@/context/permission" import { usePlatform, type DisplayBackend } from "@/context/platform" import { useServerSync } from "@/context/server-sync" -import { useServerSDK } from "@/context/server-sdk" +import { useServerProtocol, useServerSDK } from "@/context/server-sdk" import { useUpdaterAction } from "./updater-action" import { monoDefault, @@ -125,16 +125,11 @@ export const SettingsGeneral: Component = () => { const serverSync = useServerSync() const serverSdk = useServerSDK() + const protocol = useServerProtocol() const [shells] = createResource( - async () => { - const sdk = serverSdk() - if ((await sdk.protocol) === "v1") { - return (await sdk.client.pty.shells()).data ?? [] - } - // return (await sdk.api.pty.shells()).data - return [] as ShellOption[] - }, + () => (protocol() === "v1" ? serverSdk() : undefined), + (sdk) => sdk.legacy.pty.shells().catch(() => [] as ShellOption[]), { initialValue: [] as ShellOption[] }, ) @@ -325,10 +320,11 @@ export const SettingsGeneral: Component = () => { - + +