/** * GitMem Cache Service * * File-based cache for GitMem MCP operations. * Caches search results to avoid repeated ww-mcp calls. * * Design: docs/systems/gitmem-caching.md * */ declare const TTL: { readonly SCAR_SEARCH: number; readonly DECISIONS: number; readonly WINS: number; readonly SESSIONS: number; readonly SCAR_USAGE: number; }; /** * Cache statistics */ export interface CacheStats { resultCount: number; resultBytes: number; oldestEntry: Date | null; hitRate?: number; } /** * CacheService class * * Provides file-based caching for GitMem operations. * Designed for graceful degradation - cache failures never block operations. */ export declare class CacheService { private cacheDir; private resultsDir; private enabled; private hits; private misses; constructor(cacheDir?: string); /** * Initialize cache directories */ private init; /** * Check if cache is enabled and working */ isEnabled(): boolean; /** * Disable cache (for testing or on errors) */ disable(): void; /** * Generate cache key for scar search */ scarSearchKey(query: string, project: string, matchCount: number): string; /** * Generate cache key for decisions */ decisionsKey(project: string, limit: number): string; /** * Generate cache key for wins */ winsKey(project: string, limit: number): string; /** * Get cached result */ getResult(key: string): Promise<{ data: T; age_ms: number; } | null>; /** * Set cached result */ setResult(key: string, data: T, ttlMs: number): Promise; /** * Convenience method: get or fetch scar search results */ getOrFetchScarSearch(query: string, project: string, matchCount: number, fetcher: () => Promise): Promise<{ data: T; cache_hit: boolean; cache_age_ms?: number; }>; /** * Convenience method: get or fetch decisions */ getOrFetchDecisions(project: string, limit: number, fetcher: () => Promise): Promise<{ data: T; cache_hit: boolean; cache_age_ms?: number; }>; /** * Convenience method: get or fetch wins */ getOrFetchWins(project: string, limit: number, fetcher: () => Promise): Promise<{ data: T; cache_hit: boolean; cache_age_ms?: number; }>; /** * Generate cache key for sessions (analytics) */ sessionsKey(project: string, days: number, agent?: string): string; /** * Generate cache key for scar usage (analytics) */ scarUsageKey(project: string, days: number, agent?: string): string; /** * Convenience method: get or fetch sessions */ getOrFetchSessions(project: string, days: number, agent: string | undefined, fetcher: () => Promise): Promise<{ data: T; cache_hit: boolean; cache_age_ms?: number; }>; /** * Convenience method: get or fetch scar usage */ getOrFetchScarUsage(project: string, days: number, agent: string | undefined, fetcher: () => Promise): Promise<{ data: T; cache_hit: boolean; cache_age_ms?: number; }>; /** * Clean up expired entries */ cleanup(): Promise; /** * Clear all cached data */ clear(): Promise; /** * Get cache statistics */ getStats(): Promise; /** * Convert cache key to safe filename */ private keyToFilename; } /** * Get the cache service singleton */ export declare function getCache(): CacheService; /** * Reset cache instance (for testing) */ export declare function resetCache(): void; export { TTL }; //# sourceMappingURL=cache.d.ts.map