/** * Redis File Change Sync Service * * Detects file changes and triggers automatic reindexing across all databases: * - PostgreSQL: files, chunks, FTS, vectors (semantic_search_embeddings) * - Neo4j: triads/relationships (File, Class, Function nodes) * - Redis: hash tracking, query cache invalidation * * Also provides query result caching with optional vector-based similarity detection. */ import { DatabaseConnections } from '../config/database-config'; export interface FileChangeInfo { filePath: string; absolutePath: string; changeType: 'new' | 'modified' | 'deleted'; oldHash?: string; newHash?: string; lastModified: number; size: number; } export interface SyncStatus { projectId: string; lastSyncTime: number; filesChecked: number; changesDetected: number; reindexedPostgres: number; reindexedNeo4j: number; cacheInvalidated: number; duration: number; } export interface QueryCacheEntry { query: string; queryVector?: number[]; results: any[]; cachedAt: number; hitCount: number; projectId: string; } export interface ReindexOptions { updateEmbeddings?: boolean; updateNeo4j?: boolean; invalidateCache?: boolean; batchSize?: number; } export declare class RedisFileChangeSyncService { private redis; private logger; private dbConnections; private embeddingService; private readonly FILE_HASH_PREFIX; private readonly QUERY_CACHE_PREFIX; private readonly SYNC_META_PREFIX; private readonly PENDING_CHANGES_PREFIX; private readonly QUERY_CACHE_TTL; private readonly FILE_HASH_TTL; private readonly SIMILARITY_THRESHOLD; constructor(dbConnections?: DatabaseConnections); private getRedis; /** * Detect all file changes for a project */ detectFileChanges(projectId: string, projectPath: string, fileExtensions?: string[]): Promise; /** * Scan project files and compute hashes */ private scanProjectFiles; /** * Get stored file hashes from Redis */ private getStoredFileHashes; /** * Update file hash in Redis after successful reindex */ private updateFileHash; /** * Remove file hash from Redis (for deleted files) */ private removeFileHash; /** * Main sync method - detect changes and reindex */ syncProject(projectId: string, projectPath: string, options?: ReindexOptions): Promise; /** * Reindex files in PostgreSQL */ private reindexPostgres; /** * Reindex files in Neo4j */ private reindexNeo4j; /** * Handle deleted files - remove from all databases */ private handleDeletedFiles; /** * Get cached query result */ getCachedQueryResult(projectId: string, query: string, queryVector?: number[]): Promise; /** * Cache query result */ cacheQueryResult(projectId: string, query: string, results: any[], queryVector?: number[]): Promise; /** * Find similar cached query using vector similarity */ private findSimilarCachedQuery; /** * Invalidate query cache for a project */ invalidateQueryCache(projectId: string): Promise; /** * Generate embedding for query (for similarity caching) */ generateQueryVector(query: string): Promise; private updateSyncMetadata; getSyncMetadata(projectId: string): Promise>; private hashQuery; private cosineSimilarity; private extractClasses; private extractFunctions; private extractImports; private determineFileType; cleanup(): Promise; } export default RedisFileChangeSyncService; //# sourceMappingURL=redis-file-change-sync.d.ts.map