diff --git a/src/memory/index.test.ts b/src/memory/index.test.ts index 44fcea59954..950346bd3e4 100644 --- a/src/memory/index.test.ts +++ b/src/memory/index.test.ts @@ -432,6 +432,30 @@ describe("memory index", () => { await statusManager.close?.(); }); + it("does not cache builtin status-only managers across repeated requests", async () => { + const cfg = createCfg({ + storePath: path.join(workspaceDir, `index-status-${randomUUID()}.sqlite`), + }); + + const first = await getMemorySearchManager({ + cfg, + agentId: "main", + purpose: "status", + }); + const second = await getMemorySearchManager({ + cfg, + agentId: "main", + purpose: "status", + }); + + const firstManager = requireManager(first, "first status manager missing"); + const secondManager = requireManager(second, "second status manager missing"); + expect(secondManager).not.toBe(firstManager); + + await firstManager.close?.(); + await secondManager.close?.(); + }); + it("reindexes sessions when source config adds sessions to an existing index", async () => { const stateDir = sourceChangeStateDir; const sessionDir = path.join(stateDir, "agents", "main", "sessions"); diff --git a/src/memory/manager.ts b/src/memory/manager.ts index 26bdb64eaeb..5d14c7b968c 100644 --- a/src/memory/manager.ts +++ b/src/memory/manager.ts @@ -174,16 +174,8 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem const purpose = params.purpose === "status" ? "status" : "default"; const key = `${agentId}:${workspaceDir}:${JSON.stringify(settings)}:${purpose}`; const statusOnly = params.purpose === "status"; - const existing = INDEX_CACHE.get(key); - if (existing) { - return existing; - } - const pending = INDEX_CACHE_PENDING.get(key); - if (pending) { - return pending; - } if (statusOnly) { - const manager = new MemoryIndexManager({ + return new MemoryIndexManager({ cacheKey: key, cfg, agentId, @@ -191,8 +183,14 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem settings, purpose: params.purpose, }); - INDEX_CACHE.set(key, manager); - return manager; + } + const existing = INDEX_CACHE.get(key); + if (existing) { + return existing; + } + const pending = INDEX_CACHE_PENDING.get(key); + if (pending) { + return pending; } const createPromise = (async () => { const providerResult = await MemoryIndexManager.loadProviderResult({