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;
        };
    }>;
}
