export interface ProgrammaticCachedTool { name: string; description?: string; } export interface ProgrammaticServerCacheEntry { tools: ProgrammaticCachedTool[]; cachedAt: number; } export interface ProgrammaticToolCache { version: number; /** Keyed by qualifiedServerKey (`programmatic:`). */ servers: Record; } export declare function getProgrammaticCachePath(): string; export declare function loadProgrammaticCache(): ProgrammaticToolCache | null; /** * Full replace, not the classic cache's additive merge: the caller passes the * complete live inventory, so entries for sources that no longer exist are * pruned. Two racing sessions can clobber each other's fresh entries; the * cost is a re-warm on next use, which discovery tolerates. */ export declare function saveProgrammaticCache(cache: ProgrammaticToolCache): void;