/** * Search Quality Metrics Service * Tracks and reports precision, recall, and F1 scores for semantic search * * Since we don't have ground truth labels, we use Claude's file reads as a proxy: * - If Claude reads a file we suggested → it was relevant (true positive) * - If Claude doesn't read a suggested file → potentially not relevant (may be false positive) * - If Claude reads a file we didn't suggest → we missed it (false negative) * * This gives us an approximation of search quality that improves over time. */ export interface SearchSession { query: string; timestamp: Date; suggestedFiles: string[]; claudeReadFiles: string[]; claudeModifiedFiles: string[]; } export interface QualityMetrics { precision: number; recall: number; f1Score: number; truePositives: number; falsePositives: number; falseNegatives: number; suggestionCoverage: number; suggestionUtilization: number; } export interface AggregateMetrics extends QualityMetrics { sessionCount: number; avgSuggestionsPerQuery: number; avgClaudeReadsPerQuery: number; } export declare class SearchQualityMetrics { private logger; private sessions; private maxSessions; /** * Record a new search session with suggested files */ startSession(query: string, suggestedFiles: string[]): string; /** * Record files that Claude read during the session */ recordClaudeReads(readFiles: string[]): void; /** * Record files that Claude modified during the session */ recordClaudeModifications(modifiedFiles: string[]): void; /** * Calculate metrics for a single session */ calculateSessionMetrics(session: SearchSession): QualityMetrics; /** * Get metrics for the most recent session */ getLatestSessionMetrics(): QualityMetrics | null; /** * Get aggregate metrics across all recent sessions */ getAggregateMetrics(): AggregateMetrics | null; /** * Format metrics for verbose output display */ formatMetricsForDisplay(metrics: QualityMetrics, includeAggregate?: boolean): string; /** * Get a brief one-line summary for non-verbose output */ getBriefSummary(metrics: QualityMetrics): string; /** * Normalize file paths for comparison */ private normalizePath; /** * Clear all session data */ clear(): void; /** * Get session count */ getSessionCount(): number; } export declare function getSearchQualityMetrics(): SearchQualityMetrics; export declare function resetSearchQualityMetrics(): void; //# sourceMappingURL=search-quality-metrics.d.ts.map