diff --git a/packages/kilo-vscode/src/services/telemetry/types.ts b/packages/kilo-vscode/src/services/telemetry/types.ts index 5c7e106fd52..3e2b8c2302a 100644 --- a/packages/kilo-vscode/src/services/telemetry/types.ts +++ b/packages/kilo-vscode/src/services/telemetry/types.ts @@ -32,6 +32,7 @@ export enum TelemetryEventName { PROMPT_ENHANCED = "Prompt Enhanced", // Marketplace + MARKETPLACE_INSTALL_BUTTON_CLICKED = "Marketplace Install Button Clicked", MARKETPLACE_ITEM_INSTALLED = "Marketplace Item Installed", MARKETPLACE_ITEM_REMOVED = "Marketplace Item Removed", diff --git a/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceView.tsx b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceView.tsx index d51f382202c..01975d34839 100644 --- a/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceView.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceView.tsx @@ -31,6 +31,7 @@ export const MarketplaceView = () => { const [fetching, setFetching] = createSignal(true) const [errors, setErrors] = createSignal([]) const [tab, setTab] = createSignal("mcp") + const [pending, setPending] = createSignal<{ item: MarketplaceItem; scope: "project" | "global" } | null>(null) const skills = createMemo(() => items().filter((i): i is SkillMarketplaceItem => i.type === "skill")) const mcps = createMemo(() => items().filter((i): i is McpMarketplaceItem => i.type === "mcp")) @@ -51,7 +52,17 @@ export const MarketplaceView = () => { setFetching(false) } if (msg.type === "marketplaceRemoveResult") { + const removed = pending() + setPending(null) if (msg.success) { + if (removed) { + telemetry("Marketplace Item Removed", { + itemId: removed.item.id, + itemType: removed.item.type, + itemName: removed.item.name, + target: removed.scope, + }) + } fetchData() } else { setErrors((prev) => [...prev, msg.error ?? t("marketplace.remove.failed", { name: msg.slug })]) @@ -72,16 +83,22 @@ export const MarketplaceView = () => { } const handleInstall = (item: MarketplaceItem) => { + telemetry("Marketplace Install Button Clicked", { + itemId: item.id, + itemType: item.type, + itemName: item.name, + }) dialog.show(() => ( dialog.close()} onInstallResult={(success, scope) => { if (success) { - telemetry("marketplace_item_installed", { - id: item.id, - type: item.type, - scope, + telemetry("Marketplace Item Installed", { + itemId: item.id, + itemType: item.type, + itemName: item.name, + target: scope, }) dialog.close() fetchData() @@ -98,16 +115,12 @@ export const MarketplaceView = () => { scope={scope} onClose={() => dialog.close()} onConfirm={() => { + setPending({ item, scope }) vscode.postMessage({ type: "removeInstalledMarketplaceItem", mpItem: item, mpInstallOptions: { target: scope }, }) - telemetry("marketplace_item_removed", { - id: item.id, - type: item.type, - scope, - }) dialog.close() }} />