import type { SKYKOIConfig } from "../config/config.js"; import type { MemoryEmbeddingProbeResult, MemoryProviderStatus, MemorySearchManager, MemorySearchResult, MemorySyncProgressUpdate } from "./types.js"; import type { ResolvedMemoryBackendConfig } from "./backend-config.js"; export declare class QmdMemoryManager implements MemorySearchManager { static create(params: { cfg: SKYKOIConfig; koiId: string; resolved: ResolvedMemoryBackendConfig; }): Promise; private readonly cfg; private readonly koiId; private readonly qmd; private readonly workspaceDir; private readonly stateDir; private readonly koiStateDir; private readonly qmdDir; private readonly xdgConfigHome; private readonly xdgCacheHome; private readonly indexPath; private readonly env; private readonly collectionRoots; private readonly sources; private readonly docPathCache; private readonly sessionExporter; private updateTimer; private pendingUpdate; private queuedForcedUpdate; private queuedForcedRuns; private closed; private db; private lastUpdateAt; private lastEmbedAt; private constructor(); private initialize; private bootstrapCollections; private ensureCollections; search(query: string, opts?: { maxResults?: number; minScore?: number; sessionKey?: string; }): Promise; sync(params?: { reason?: string; force?: boolean; progress?: (update: MemorySyncProgressUpdate) => void; }): Promise; readFile(params: { relPath: string; from?: number; lines?: number; }): Promise<{ text: string; path: string; }>; status(): MemoryProviderStatus; probeEmbeddingAvailability(): Promise; probeVectorAvailability(): Promise; close(): Promise; private runUpdate; private enqueueForcedUpdate; private drainForcedUpdates; private runQmd; private ensureDb; private exportSessions; private renderSessionMarkdown; private pickSessionCollectionName; private resolveDocLocation; private extractSnippetLines; private readCounts; private isScopeAllowed; private deriveChannelFromKey; private deriveChatTypeFromKey; private normalizeSessionKey; private toDocLocation; private buildSearchPath; private isInsideWorkspace; private resolveReadPath; private isWithinWorkspace; private isWithinRoot; private clampResultsByInjectedChars; private shouldSkipUpdate; private isSqliteBusyError; private createQmdBusyError; private waitForPendingUpdateBeforeSearch; }