From eb4779be000a9f22ce75f555991df381f99dd4ef Mon Sep 17 00:00:00 2001 From: Rodrigo Uroz Date: Thu, 12 Mar 2026 19:56:12 +0000 Subject: [PATCH] Memory Sync: fix targeted session sync helpers --- src/memory/manager-sync-ops.ts | 49 ++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/src/memory/manager-sync-ops.ts b/src/memory/manager-sync-ops.ts index b51387de9d4..a402a0fd1fe 100644 --- a/src/memory/manager-sync-ops.ts +++ b/src/memory/manager-sync-ops.ts @@ -613,17 +613,32 @@ export abstract class MemoryManagerSyncOps { return resolvedFile.startsWith(`${resolvedDir}${path.sep}`); } - private normalizeTargetSessionFile(sessionFile?: string): string | undefined { - const trimmed = sessionFile?.trim(); - if (!trimmed) { - return undefined; + private normalizeTargetSessionFiles(sessionFiles?: string[]): Set | null { + if (!sessionFiles || sessionFiles.length === 0) { + return null; } - const resolved = path.resolve(trimmed); - return this.isSessionFileForAgent(resolved) ? resolved : undefined; + const normalized = new Set(); + for (const sessionFile of sessionFiles) { + const trimmed = sessionFile.trim(); + if (!trimmed) { + continue; + } + const resolved = path.resolve(trimmed); + if (this.isSessionFileForAgent(resolved)) { + normalized.add(resolved); + } + } + return normalized.size > 0 ? normalized : null; } - private clearSyncedSessionFile(targetSessionFile: string) { - this.sessionsDirtyFiles.delete(targetSessionFile); + private clearSyncedSessionFiles(targetSessionFiles?: Iterable | null) { + if (!targetSessionFiles) { + this.sessionsDirtyFiles.clear(); + } else { + for (const targetSessionFile of targetSessionFiles) { + this.sessionsDirtyFiles.delete(targetSessionFile); + } + } this.sessionsDirty = this.sessionsDirtyFiles.size > 0; } @@ -771,7 +786,7 @@ export abstract class MemoryManagerSyncOps { private async syncSessionFiles(params: { needsFullReindex: boolean; - targetSessionFile?: string; + targetSessionFiles?: string[]; progress?: MemorySyncProgressState; }) { // FTS-only mode: skip embedding sync (no provider) @@ -780,22 +795,22 @@ export abstract class MemoryManagerSyncOps { return; } - const targetSessionFile = params.needsFullReindex - ? undefined - : this.normalizeTargetSessionFile(params.targetSessionFile); - const files = targetSessionFile - ? [targetSessionFile] + const targetSessionFiles = params.needsFullReindex + ? null + : this.normalizeTargetSessionFiles(params.targetSessionFiles); + const files = targetSessionFiles + ? Array.from(targetSessionFiles) : await listSessionFilesForAgent(this.agentId); - const activePaths = targetSessionFile + const activePaths = targetSessionFiles ? null : new Set(files.map((file) => sessionPathForFile(file))); const indexAll = - params.needsFullReindex || Boolean(targetSessionFile) || this.sessionsDirtyFiles.size === 0; + params.needsFullReindex || Boolean(targetSessionFiles) || this.sessionsDirtyFiles.size === 0; log.debug("memory sync: indexing session files", { files: files.length, indexAll, dirtyFiles: this.sessionsDirtyFiles.size, - targetedFiles: targetSessionFile ? 1 : 0, + targetedFiles: targetSessionFiles?.size ?? 0, batch: this.batch.enabled, concurrency: this.getIndexConcurrency(), });