diff --git a/packages/kilo-vscode/tests/unit/marketplace-actions.test.ts b/packages/kilo-vscode/tests/unit/marketplace-actions.test.ts index 1eb81bfacf6..fc47330c300 100644 --- a/packages/kilo-vscode/tests/unit/marketplace-actions.test.ts +++ b/packages/kilo-vscode/tests/unit/marketplace-actions.test.ts @@ -7,7 +7,12 @@ import { type MarketplaceRemoveContext, } from "../../src/services/marketplace/actions" import type { McpMarketplaceItem } from "../../src/services/marketplace/types" -import { filterItems, installedScopes, retain } from "../../webview-ui/src/components/marketplace/utils" +import { + filterItems, + hasRelevantItems, + installedScopes, + retain, +} from "../../webview-ui/src/components/marketplace/utils" import type { MarketplaceItem } from "../../webview-ui/src/types/marketplace" const project = "/repo" @@ -133,11 +138,10 @@ describe("Marketplace installation metadata", () => { "mcp:warehouse": { vscodeExtension: ["data.warehouse"] }, }).map((item) => item.id), ).toEqual(["reviewer", "warehouse"]) - expect( - filterItems(items, metadata, "warehouse", "all", [], [], {}, true, { - "agent:reviewer": { filename: ["*.review.ts"] }, - }), - ).toEqual([]) + const relevance = { "agent:reviewer": { filename: ["*.review.ts"] } } + expect(filterItems(items, metadata, "warehouse", "all", [], [], {}, true, relevance)).toEqual([]) + expect(hasRelevantItems(items, relevance)).toBe(true) + expect(hasRelevantItems(items, {})).toBe(false) }) }) diff --git a/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx index 1d5cabc7496..4735d7c6b16 100644 --- a/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx @@ -12,7 +12,7 @@ import type { MarketplaceRelevanceMetadata, } from "../../types/marketplace" import { useLanguage } from "../../context/language" -import { filterItems, retain } from "./utils" +import { filterItems, hasRelevantItems, retain } from "./utils" import { ItemCard } from "./ItemCard" import { MarketplaceContribute } from "./MarketplaceContribute" @@ -171,7 +171,9 @@ export const MarketplaceListView = (props: Props) => { fallback={
- {relevant() ? props.relevantEmptyMessage : props.emptyMessage} + {relevant() && !hasRelevantItems(props.items, props.relevance) + ? props.relevantEmptyMessage + : props.emptyMessage}
diff --git a/packages/kilo-vscode/webview-ui/src/components/marketplace/utils.ts b/packages/kilo-vscode/webview-ui/src/components/marketplace/utils.ts index 85ca9042e93..e8f63e82225 100644 --- a/packages/kilo-vscode/webview-ui/src/components/marketplace/utils.ts +++ b/packages/kilo-vscode/webview-ui/src/components/marketplace/utils.ts @@ -4,6 +4,10 @@ import type { MarketplaceRelevanceMetadata, } from "../../types/marketplace" +export function hasRelevantItems(items: MarketplaceItem[], relevance: MarketplaceRelevanceMetadata): boolean { + return items.some((item) => !!relevance[`${item.type}:${item.id}`]) +} + export function retain(selected: T[], available: T[]): T[] { const values = new Set(available) const next = selected.filter((value) => values.has(value))