From 23fd01f52eeb3defa63cfff433219c1ee80825b8 Mon Sep 17 00:00:00 2001 From: Dotta Date: Fri, 29 May 2026 01:56:20 +0000 Subject: [PATCH] Show Claude model refresh button --- ui/src/components/AgentConfigForm.test.ts | 15 +++++++++++++++ ui/src/components/AgentConfigForm.tsx | 6 +++++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 ui/src/components/AgentConfigForm.test.ts diff --git a/ui/src/components/AgentConfigForm.test.ts b/ui/src/components/AgentConfigForm.test.ts new file mode 100644 index 00000000000..e532c8ebdf4 --- /dev/null +++ b/ui/src/components/AgentConfigForm.test.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from "vitest"; +import { supportsAdapterModelRefresh } from "./AgentConfigForm"; + +describe("supportsAdapterModelRefresh", () => { + it("enables the model refresh action for Claude, Codex, and ACPX adapters", () => { + expect(supportsAdapterModelRefresh("claude_local")).toBe(true); + expect(supportsAdapterModelRefresh("codex_local")).toBe(true); + expect(supportsAdapterModelRefresh("acpx_local")).toBe(true); + }); + + it("keeps the refresh action hidden for adapters without a live refresh hook", () => { + expect(supportsAdapterModelRefresh("opencode_local")).toBe(false); + expect(supportsAdapterModelRefresh("process")).toBe(false); + }); +}); diff --git a/ui/src/components/AgentConfigForm.tsx b/ui/src/components/AgentConfigForm.tsx index 59c967c8e41..e07e97349f5 100644 --- a/ui/src/components/AgentConfigForm.tsx +++ b/ui/src/components/AgentConfigForm.tsx @@ -114,6 +114,10 @@ const emptyOverlay: AgentConfigOverlay = { /** Stable empty object used as fallback for missing env config to avoid new-object-per-render. */ const EMPTY_ENV: Record = {}; +export function supportsAdapterModelRefresh(adapterType: string): boolean { + return adapterType === "claude_local" || adapterType === "codex_local" || adapterType === "acpx_local"; +} + function isOverlayDirty(o: AgentConfigOverlay): boolean { return ( Object.keys(o.identity).length > 0 || @@ -1006,7 +1010,7 @@ export function AgentConfigForm(props: AgentConfigFormProps) { return result.data?.model ?? null; }} onRefreshModels={ - adapterType === "codex_local" || adapterType === "acpx_local" + supportsAdapterModelRefresh(adapterType) ? handleRefreshModels : undefined }