From fb3aabb743c94579d0f8fbbdb88f3ff2a1a1e5d6 Mon Sep 17 00:00:00 2001 From: HenkDz Date: Fri, 3 Apr 2026 22:25:27 +0100 Subject: [PATCH] feat(adapters): add overriddenBuiltin flag to API and Adapter Manager UI When an external plugin overrides a built-in adapter type, the GET /api/adapters response now includes overriddenBuiltin: true. The Adapter Manager shows an 'Overrides built-in' badge on such adapters. --- server/src/routes/adapters.ts | 3 +++ ui/src/api/adapters.ts | 2 ++ ui/src/pages/AdapterManager.tsx | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/server/src/routes/adapters.ts b/server/src/routes/adapters.ts index fdeb64d2..09761412 100644 --- a/server/src/routes/adapters.ts +++ b/server/src/routes/adapters.ts @@ -63,6 +63,8 @@ interface AdapterInfo { modelsCount: number; loaded: boolean; disabled: boolean; + /** True when an external plugin has replaced a built-in adapter of the same type. */ + overriddenBuiltin?: boolean; version?: string; packageName?: string; isLocalPath?: boolean; @@ -105,6 +107,7 @@ function buildAdapterInfo(adapter: ServerAdapterModule, externalRecord: AdapterP modelsCount: (adapter.models ?? []).length, loaded: true, // If it's in the registry, it's loaded disabled: disabledSet.has(adapter.type), + overriddenBuiltin: externalRecord ? BUILTIN_ADAPTER_TYPES.has(adapter.type) : undefined, // Prefer on-disk package.json so the UI reflects bumps without relying on store-only fields. version: fromDisk ?? externalRecord?.version, packageName: externalRecord?.packageName, diff --git a/ui/src/api/adapters.ts b/ui/src/api/adapters.ts index dea60394..201c5bee 100644 --- a/ui/src/api/adapters.ts +++ b/ui/src/api/adapters.ts @@ -17,6 +17,8 @@ export interface AdapterInfo { packageName?: string; /** Whether the adapter was installed from a local path (vs npm). */ isLocalPath?: boolean; + /** True when an external plugin has replaced a built-in adapter of the same type. */ + overriddenBuiltin?: boolean; } export interface AdapterInstallResult { diff --git a/ui/src/pages/AdapterManager.tsx b/ui/src/pages/AdapterManager.tsx index e41b9ca3..f7f4577d 100644 --- a/ui/src/pages/AdapterManager.tsx +++ b/ui/src/pages/AdapterManager.tsx @@ -63,6 +63,11 @@ function AdapterRow({ {adapter.label || getAdapterLabel(adapter.type)} {adapter.source === "external" ? "External" : "Built-in"} + {adapter.overriddenBuiltin && ( + + Overrides built-in + + )} {adapter.source === "external" && ( adapter.isLocalPath ?