diff --git a/src/cli/memory-cli.test.ts b/src/cli/memory-cli.test.ts index c9fcd0fc9..ee1ead9f5 100644 --- a/src/cli/memory-cli.test.ts +++ b/src/cli/memory-cli.test.ts @@ -20,6 +20,7 @@ vi.mock("../agents/agent-scope.js", () => ({ afterEach(() => { vi.restoreAllMocks(); getMemorySearchManager.mockReset(); + process.exitCode = undefined; }); describe("memory cli", () => { @@ -96,4 +97,53 @@ describe("memory cli", () => { expect(log).toHaveBeenCalledWith(expect.stringContaining("Vector error: load failed")); expect(close).toHaveBeenCalled(); }); + + it("closes manager after index", async () => { + const { registerMemoryCli } = await import("./memory-cli.js"); + const { defaultRuntime } = await import("../runtime.js"); + const close = vi.fn(async () => {}); + const sync = vi.fn(async () => {}); + getMemorySearchManager.mockResolvedValueOnce({ + manager: { + sync, + close, + }, + }); + + const log = vi.spyOn(defaultRuntime, "log").mockImplementation(() => {}); + const program = new Command(); + program.name("test"); + registerMemoryCli(program); + await program.parseAsync(["memory", "index"], { from: "user" }); + + expect(sync).toHaveBeenCalledWith({ reason: "cli", force: false }); + expect(close).toHaveBeenCalled(); + expect(log).toHaveBeenCalledWith("Memory index updated."); + }); + + it("closes manager after search error", async () => { + const { registerMemoryCli } = await import("./memory-cli.js"); + const { defaultRuntime } = await import("../runtime.js"); + const close = vi.fn(async () => {}); + const search = vi.fn(async () => { + throw new Error("boom"); + }); + getMemorySearchManager.mockResolvedValueOnce({ + manager: { + search, + close, + }, + }); + + const error = vi.spyOn(defaultRuntime, "error").mockImplementation(() => {}); + const program = new Command(); + program.name("test"); + registerMemoryCli(program); + await program.parseAsync(["memory", "search", "oops"], { from: "user" }); + + expect(search).toHaveBeenCalled(); + expect(close).toHaveBeenCalled(); + expect(error).toHaveBeenCalledWith(expect.stringContaining("Memory search failed: boom")); + expect(process.exitCode).toBe(1); + }); }); diff --git a/src/memory/index.test.ts b/src/memory/index.test.ts index 043d8ed87..7fcbb1163 100644 --- a/src/memory/index.test.ts +++ b/src/memory/index.test.ts @@ -74,6 +74,16 @@ describe("memory index", () => { const results = await result.manager.search("alpha"); expect(results.length).toBeGreaterThan(0); expect(results[0]?.path).toContain("memory/2026-01-12.md"); + const status = result.manager.status(); + expect(status.sourceCounts).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + source: "memory", + files: status.files, + chunks: status.chunks, + }), + ]), + ); }); it("rejects reading non-memory paths", async () => {