diff --git a/ui/web/src/pages/memory/kg-entities-tab.tsx b/ui/web/src/pages/memory/kg-entities-tab.tsx index 472637b0..e565082b 100644 --- a/ui/web/src/pages/memory/kg-entities-tab.tsx +++ b/ui/web/src/pages/memory/kg-entities-tab.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useMemo } from "react"; import { Network, Trash2, Search, GitFork, Sparkles, RefreshCw, LayoutGrid, Share2, Merge } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; @@ -42,6 +42,24 @@ export function KGEntitiesTab({ agentId, userId }: KGEntitiesTabProps) { const graphData = useKGGraph(agentId, userId); const showSkeleton = useDeferredLoading(loading && entities.length === 0); + // Filter graph data by search query (client-side) + const filteredGraphData = useMemo(() => { + if (!appliedQuery) return graphData; + const q = appliedQuery.toLowerCase(); + const matchedIds = new Set(); + const matched = graphData.entities.filter((e) => { + const hit = e.name.toLowerCase().includes(q) + || e.entity_type.toLowerCase().includes(q) + || (e.description ?? "").toLowerCase().includes(q); + if (hit) matchedIds.add(e.id); + return hit; + }); + const relations = graphData.relations.filter( + (r) => matchedIds.has(r.source_entity_id) && matchedIds.has(r.target_entity_id), + ); + return { entities: matched, relations }; + }, [graphData, appliedQuery]); + const handleSearch = () => setAppliedQuery(searchQuery.trim()); const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") handleSearch(); @@ -130,8 +148,8 @@ export function KGEntitiesTab({ agentId, userId }: KGEntitiesTabProps) {
{viewMode === "graph" ? ( ) : showSkeleton ? (