UNPKG

@dollhousemcp/mcp-server

Version:

DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.

58 lines 2.2 kB
/** * MemoryIndexFile - Persistent _index.json manager with debounced writes. * * On server restart the MemoryStorageLayer can load cached metadata from * _index.json instead of re-scanning every memory file on disk. This class * handles reading, writing (with validation), and debounced scheduling of * index persistence to avoid excessive I/O during rapid mutations. */ import type { FileOperationsService } from '../services/FileOperationsService.js'; import type { ElementIndexEntry } from './types.js'; export interface MemoryIndexData { version: 1; generatedAt: string; entryCount: number; entries: Record<string, ElementIndexEntry>; } export interface MemoryIndexFileOptions { debounceMs?: number; } export declare class MemoryIndexFile { private readonly indexPath; private readonly fileOps; private readonly debounceMs; private pendingEntries; private debounceTimer; constructor(indexPath: string, fileOps: FileOperationsService, options?: MemoryIndexFileOptions); /** * Read the index from disk. * Returns null when the file is missing, corrupt, has a version mismatch, * or the entryCount doesn't match the actual number of entries. */ read(): Promise<MemoryIndexData | null>; /** * Handle a corrupt or malformed index file: log a warning and delete it * so the next scan builds a clean index from disk. */ private handleCorruptIndex; /** * Write the index to disk immediately. * Converts the entries array to a Record keyed by `entry.filePath`. * Catches ENOSPC gracefully (logs warning, does not throw). */ write(entries: ElementIndexEntry[]): Promise<void>; /** * Schedule a debounced write. Multiple calls within the debounce window * coalesce into a single write using the most recent entries. */ scheduleWrite(entries: ElementIndexEntry[]): void; /** * If there are pending entries, write immediately and clear the timer. */ flush(): Promise<void>; /** * Cancel any pending timer. Does NOT flush (fire-and-forget cleanup). */ dispose(): void; } //# sourceMappingURL=MemoryIndexFile.d.ts.map