diff --git a/apps/web/app/(app)/page.tsx b/apps/web/app/(app)/page.tsx index c8eb58bd..02ba09ab 100644 --- a/apps/web/app/(app)/page.tsx +++ b/apps/web/app/(app)/page.tsx @@ -60,6 +60,7 @@ import { type IntegrationParamValue, } from "@/lib/search-params" import { getChatSpaceDisplayLabel } from "@/lib/chat-space-label" +import { getToolDocumentSpace } from "@/lib/plugin-space" type DocumentsResponse = z.infer type DocumentWithMemories = DocumentsResponse["documents"][0] @@ -409,11 +410,8 @@ export default function NewPage() { ) const handleOpenToolDocument = useCallback( - (document: DocumentWithMemories) => { - const documentSpace = - (document as { containerTags?: string[] }).containerTags?.[0] ?? - document.memoryEntries.find((entry) => entry.spaceContainerTag) - ?.spaceContainerTag + (document: DocumentWithMemories, pluginClientId: string) => { + const documentSpace = getToolDocumentSpace(document, pluginClientId) if (documentSpace) { setSelectedProject(documentSpace) } diff --git a/apps/web/components/dashboard-view.tsx b/apps/web/components/dashboard-view.tsx index 5b0af846..f2e823b3 100644 --- a/apps/web/components/dashboard-view.tsx +++ b/apps/web/components/dashboard-view.tsx @@ -39,6 +39,7 @@ import { usePersonalization, type Profession, } from "@/hooks/use-personalization" +import { normalizePluginClientId } from "@/lib/plugin-catalog" type DocumentsResponse = z.infer type DocumentWithMemories = DocumentsResponse["documents"][0] @@ -438,7 +439,7 @@ function getPluginClientFromDocument( : typeof metadata.sm_internal_mcp_client_name === "string" ? metadata.sm_internal_mcp_client_name : null - if (metadataClient) return metadataClient.toLowerCase() + if (metadataClient) return normalizePluginClientId(metadataClient) if (metadata.sm_source === "claude-code-plugin") return "claude_code" } @@ -529,8 +530,9 @@ function parseToolUsage( // Plugin keys if (smType === "plugin_auth" && smClient) { - const catalog = PLUGIN_DISPLAY_CATALOG[smClient] - const existingItem = toolMap.get(`plugin_${smClient}`) + const normalizedClient = normalizePluginClientId(smClient) + const catalog = PLUGIN_DISPLAY_CATALOG[normalizedClient] + const existingItem = toolMap.get(`plugin_${normalizedClient}`) const lastUsed = toValidDate(key.lastRequest) ?? toValidDate(key.createdAt) const existingLastUsed = existingItem?.lastUsedAt @@ -542,8 +544,8 @@ function parseToolUsage( (!existingLastUsed || lastUsed.getTime() > existingLastUsed.getTime())) ) { - toolMap.set(`plugin_${smClient}`, { - id: `plugin_${smClient}`, + toolMap.set(`plugin_${normalizedClient}`, { + id: `plugin_${normalizedClient}`, name: catalog?.name ?? smClient, type: "Plugin", icon: catalog?.icon ?? null, @@ -721,15 +723,20 @@ function ToolUsageRecentRow({ }: { item: ToolUsageItem onOpenPlugins: () => void - onOpenToolDocument: (document: DocumentWithMemories) => void + onOpenToolDocument: ( + document: DocumentWithMemories, + pluginClientId: string, + ) => void }) { + const pluginClientId = item.id.replace(/^plugin_/, "") + return (