From 9b73bf91e4303249f30517d4cacfa8287680a82c Mon Sep 17 00:00:00 2001 From: kirillk Date: Tue, 16 Jun 2026 22:02:19 -0400 Subject: [PATCH] fix(vscode): restore popular provider settings --- .changeset/restore-popular-providers.md | 5 +++ .../tests/unit/provider-catalog.test.ts | 32 +++++++++++++++++++ .../components/settings/provider-catalog.ts | 10 +++--- 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 .changeset/restore-popular-providers.md create mode 100644 packages/kilo-vscode/tests/unit/provider-catalog.test.ts diff --git a/.changeset/restore-popular-providers.md b/.changeset/restore-popular-providers.md new file mode 100644 index 00000000000..853465571b7 --- /dev/null +++ b/.changeset/restore-popular-providers.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Restore popular provider suggestions in the VS Code provider settings panel when provider metadata is unavailable. diff --git a/packages/kilo-vscode/tests/unit/provider-catalog.test.ts b/packages/kilo-vscode/tests/unit/provider-catalog.test.ts new file mode 100644 index 00000000000..bf7eebf655a --- /dev/null +++ b/packages/kilo-vscode/tests/unit/provider-catalog.test.ts @@ -0,0 +1,32 @@ +import { describe, expect, it } from "bun:test" + +import type { Provider } from "../../webview-ui/src/types/messages" +import { isPopularProvider, popularProviderIndex, sortProviders } from "../../webview-ui/src/components/settings/provider-catalog" + +function provider(id: string, metadata?: Provider["metadata"]): Provider { + return { + id, + name: id, + models: {}, + metadata, + } +} + +describe("provider catalog", () => { + it("treats known provider objects as popular when metadata is unavailable", () => { + expect(isPopularProvider(provider("openai"))).toBe(true) + expect(isPopularProvider(provider("anthropic"))).toBe(true) + expect(isPopularProvider(provider("unknown"))).toBe(false) + }) + + it("uses fallback ordering for provider objects without metadata", () => { + const items = [provider("openai"), provider("anthropic"), provider("unknown")] + const ids = sortProviders(items).map((item) => item.id) + + expect(ids).toEqual(["anthropic", "openai", "unknown"]) + }) + + it("prefers metadata priority over fallback ordering", () => { + expect(popularProviderIndex(provider("openai", { priority: 1 }))).toBe(1) + }) +}) diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/provider-catalog.ts b/packages/kilo-vscode/webview-ui/src/components/settings/provider-catalog.ts index 87a76107282..8b30ece8dbd 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/provider-catalog.ts +++ b/packages/kilo-vscode/webview-ui/src/components/settings/provider-catalog.ts @@ -12,13 +12,15 @@ export const CUSTOM_PROVIDER_ID = "_custom" const fallback = new Set(FALLBACK_PROVIDER_IDS) export function isPopularProvider(provider: Provider | string) { - if (typeof provider !== "string") return provider.metadata?.priority !== undefined - return fallback.has(provider) + const id = typeof provider === "string" ? provider : provider.id + if (typeof provider !== "string" && provider.metadata?.priority !== undefined) return true + return fallback.has(id) } export function popularProviderIndex(provider: Provider | string) { - if (typeof provider !== "string") return provider.metadata?.priority ?? Number.MAX_SAFE_INTEGER - return providerOrderIndex(provider, FALLBACK_PROVIDER_IDS) + const id = typeof provider === "string" ? provider : provider.id + if (typeof provider !== "string" && provider.metadata?.priority !== undefined) return provider.metadata.priority + return providerOrderIndex(id, FALLBACK_PROVIDER_IDS) } function validIcon(id: string | undefined): IconName | undefined {