diff --git a/packages/dashboard/src/components/SearchBar.tsx b/packages/dashboard/src/components/SearchBar.tsx index 5cad510..44ac7a0 100644 --- a/packages/dashboard/src/components/SearchBar.tsx +++ b/packages/dashboard/src/components/SearchBar.tsx @@ -15,6 +15,8 @@ export default function SearchBar() { const graph = useDashboardStore((s) => s.graph); const setSearchQuery = useDashboardStore((s) => s.setSearchQuery); const selectNode = useDashboardStore((s) => s.selectNode); + const searchMode = useDashboardStore((s) => s.searchMode); + const setSearchMode = useDashboardStore((s) => s.setSearchMode); const [dropdownOpen, setDropdownOpen] = useState(false); const containerRef = useRef(null); @@ -94,10 +96,32 @@ export default function SearchBar() { placeholder="Search nodes by name, summary, or tags..." className="flex-1 bg-gray-700 text-white text-sm rounded px-3 py-1.5 border border-gray-600 focus:outline-none focus:border-blue-500 placeholder-gray-400" /> +
+ + +
{searchQuery.trim() && ( {searchResults.length} result{searchResults.length !== 1 ? "s" : ""}{" "} - (fuzzy) + ({searchMode}) )} diff --git a/packages/dashboard/src/store.ts b/packages/dashboard/src/store.ts index 65a8d54..6b931c0 100644 --- a/packages/dashboard/src/store.ts +++ b/packages/dashboard/src/store.ts @@ -20,6 +20,8 @@ interface DashboardStore { searchQuery: string; searchResults: SearchResult[]; searchEngine: SearchEngine | null; + searchMode: "fuzzy" | "semantic"; + setSearchMode: (mode: "fuzzy" | "semantic") => void; apiKey: string; chatMessages: ChatMessage[]; @@ -135,6 +137,7 @@ export const useDashboardStore = create()((set, get) => ({ searchQuery: "", searchResults: [], searchEngine: null, + searchMode: "fuzzy", apiKey: "", chatMessages: [], @@ -159,12 +162,17 @@ export const useDashboardStore = create()((set, get) => ({ set({ graph, searchEngine, searchResults }); }, selectNode: (nodeId) => set({ selectedNodeId: nodeId, nodeExplanation: null }), + setSearchMode: (mode) => set({ searchMode: mode }), setSearchQuery: (query) => { const engine = get().searchEngine; + const mode = get().searchMode; if (!engine || !query.trim()) { set({ searchQuery: query, searchResults: [] }); return; } + // Currently both modes use the same fuzzy engine + // When embeddings are available, "semantic" mode will use SemanticSearchEngine + void mode; const searchResults = engine.search(query); set({ searchQuery: query, searchResults }); },