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 ?