@knath2000/codebase-indexing-mcp
Version:
MCP server for codebase indexing with Voyage AI embeddings and Qdrant vector storage
142 lines (141 loc) • 4.55 kB
TypeScript
import { WorkspaceManager } from './workspace-manager.js';
import { Config, SearchQuery, SearchResult, ChunkType, CodeChunk, CodeReference, SearchStats, HealthStatus } from '../types.js';
export declare class SearchService {
private voyageClient;
private qdrantClient;
private config;
private llmReranker;
private hybridSearch;
private contextManager;
private searchCache;
private workspaceManager;
private currentWorkspace;
private searchStats;
constructor(config: Config, workspaceManager?: WorkspaceManager);
/**
* Helper to build SearchQuery objects with optional properties handled correctly
*/
buildSearchQuery(args: {
query: string;
language?: string;
chunkType?: ChunkType;
filePath?: string;
limit?: number;
threshold?: number;
enableHybrid?: boolean;
enableReranking?: boolean;
llmRerankerTimeoutMs?: number;
maxFilesPerType?: number;
preferFunctions?: boolean;
preferClasses?: boolean;
preferImplementation?: boolean;
}): SearchQuery;
/**
* Initialize the search service with workspace detection
*/
initialize(): Promise<void>;
/**
* Update Qdrant client for workspace-specific collection
*/
private updateQdrantClientForWorkspace;
/**
* Enhanced search with caching, hybrid retrieval, and LLM re-ranking (Cursor-style @codebase functionality)
*/
search(query: SearchQuery): Promise<SearchResult[]>;
/**
* Search for functions by name or description
*/
searchFunctions(query: SearchQuery): Promise<SearchResult[]>;
/**
* Search for classes by name or description
*/
searchClasses(query: SearchQuery): Promise<SearchResult[]>;
/**
* Search for interfaces by name or description
*/
searchInterfaces(query: SearchQuery): Promise<SearchResult[]>;
/**
* Search within a specific file
*/
searchInFile(query: SearchQuery): Promise<SearchResult[]>;
/**
* Search for code by programming language
*/
searchByLanguage(query: SearchQuery): Promise<SearchResult[]>;
/**
* Find similar code chunks to a given chunk
*/
findSimilar(query: SearchQuery): Promise<SearchResult[]>;
/**
* Get suggestions for code completion or exploration
*/
getSuggestions(query: SearchQuery, type?: 'function' | 'class' | 'variable' | 'any'): Promise<SearchResult[]>;
/**
* Search for code patterns or implementation examples
*/
searchPatterns(query: SearchQuery): Promise<SearchResult[]>;
/**
* Advanced search with multiple criteria
*/
advancedSearch(query: SearchQuery): Promise<SearchResult[]>;
/**
* Get code chunk by ID
*/
getChunkById(chunkId: string): Promise<CodeChunk | null>;
/**
* Get code context around a chunk
*/
getCodeContext(chunkId: string, contextLines?: number): Promise<{
chunk: CodeChunk;
context: string;
} | null>;
/**
* Get embeddings for a text (utility function)
*/
getEmbedding(text: string): Promise<number[]>;
/**
* Get comprehensive search statistics (enhanced for Cursor-like codebase insights)
*/
getSearchStats(): Promise<SearchStats>;
/**
* Get comprehensive health status of all services (enhanced for Cursor-like codebase insights)
*/
getHealthStatus(): Promise<HealthStatus>;
/**
* Get enhanced search statistics (enhanced for Cursor-like codebase insights)
*/
getEnhancedSearchStats(): SearchStats;
invalidateFileCache(filePath: string): void;
clearCaches(): void;
/**
* Boost implementation code results over documentation
*/
private boostImplementationResults;
/**
* Post-process search results
*/
private postProcessResults;
/**
* Enhance snippet with query highlighting
*/
private enhanceSnippet;
/**
* Generate context description for a chunk
*/
private generateContext;
/**
* Search and return Cursor-style code references with token budgeting
*/
searchForCodeReferences(query: SearchQuery, maxTokens?: number): Promise<{
references: CodeReference[];
truncated: boolean;
summary?: string;
metadata: {
totalResults: number;
searchTime: number;
cacheHit: boolean;
hybridUsed: boolean;
reranked: boolean;
};
}>;
}