/** * MemoryStorageLayer - IStorageLayer implementation for multi-directory memory scanning. * * Memories use pure YAML across a multi-directory layout: * system/ — System-provided memories * adapters/ — Adapter-specific memories * YYYY-MM-DD/ — User-created date-folder memories * (root) — Legacy root-level memories * * Reuses the same internal components as ElementStorageLayer (MetadataIndex, * StorageManifest, FileStorageBackend) but with fundamentally different scan * logic: multi-directory enumeration + _index.json cold-start persistence. */ import type { IStorageLayer } from './IStorageLayer.js'; import type { IStorageBackend } from './IStorageBackend.js'; import type { ElementIndexEntry, ManifestDiffResult } from './types.js'; import type { FileOperationsService } from '../services/FileOperationsService.js'; export interface MemoryStorageLayerOptions { /** Absolute path to the memories directory */ memoriesDir: string; /** Minimum milliseconds between full scans (default: 1000) */ scanCooldownMs?: number; /** Override the storage backend (useful for testing) */ storageBackend?: IStorageBackend; /** Debounce interval for _index.json writes (default: 2000) */ indexDebounceMs?: number; /** File filter predicate (e.g., exclude backup files) */ fileFilter?: (filename: string) => boolean; } export declare class MemoryStorageLayer implements IStorageLayer { private readonly fileOps; private readonly backend; private readonly manifest; private readonly index; private readonly indexFile; private readonly memoriesDir; private readonly scanCooldownMs; private readonly fileFilter?; private lastScanTimestamp; private scanInProgress; private coldStartDone; constructor(fileOps: FileOperationsService, options: MemoryStorageLayerOptions); scan(): Promise; listSummaries(): Promise; getIndexedPaths(): Promise; /** * Deduplicate index entries by normalized name. * When the same memory appears in multiple date folders, keep the one * with the highest mtimeMs (most recently modified). * * Issue #654: Same memory files duplicated across ~150 date folders * inflated counts from ~750 unique to ~3,100+ loaded memories. */ private deduplicateByName; getPathByName(name: string): string | undefined; hasCompletedScan(): boolean; notifySaved(relativePath: string, absolutePath: string): Promise; notifyDeleted(relativePath: string): void; invalidate(): void; clear(): void; /** * Return index entries where autoLoad === true, sorted by priority ascending. * Pure in-memory — does NOT trigger a scan. */ getAutoLoadEntries(): ElementIndexEntry[]; /** * Full disk scan of all subdirectories + write _index.json. */ rebuildIndex(): Promise; /** * Flush pending _index.json write and release resources. */ dispose(): Promise; /** * Cold start: try to restore from _index.json, then run incremental scan. * Falls back to full rebuild if index is missing/corrupt. */ private coldStart; /** * Discover all subdirectories to scan. * Returns ['system', 'adapters', ...dateFolders, ''] where '' = root. */ private discoverSubdirectories; /** * Perform a full incremental scan across all subdirectories. */ private performScan; } //# sourceMappingURL=MemoryStorageLayer.d.ts.map