fix(memory): tighten runtime and backend coverage

This commit is contained in:
DarkPhilosophy
2026-06-08 20:12:44 +03:00
committed by can1357
parent 001c16eaa0
commit b98aea5043
6 changed files with 99 additions and 12 deletions
@@ -525,6 +525,84 @@ describe("Mnemopi backend lifecycle", () => {
registeredMnemopiState = undefined;
});
it("exposes direct mnemopi runtime status and search/save results", async () => {
const config = makeMnemopiConfig({
scoping: "per-project-tagged",
bank: "project-alpha",
globalBank: "default",
retainBank: "project-alpha",
recallBanks: ["project-alpha", "default"],
});
const state = registerMnemopiState(config, { cwd: "/work/project-alpha" });
const session = state.session;
setMnemopiSessionState(session, state);
const save = await mnemopiBackend.save!(
{ agentDir: path.dirname(config.dbPath), cwd: "/work/project-alpha", session },
{
content: "the user prefers dark mode in their editor",
source: "test-source",
context: "editor preferences",
importance: 0.8,
},
);
expect(save).toMatchObject({ backend: "mnemopi", stored: 1, ids: [expect.any(String)] });
const status = await mnemopiBackend.status!({
agentDir: path.dirname(config.dbPath),
cwd: "/work/project-alpha",
session,
});
expect(status).toMatchObject({
backend: "mnemopi",
active: true,
writable: true,
searchable: true,
retainBank: "project-alpha",
});
expect(status.recallBanks).toEqual(expect.arrayContaining(["project-alpha", "default"]));
const search = await mnemopiBackend.search!(
{ agentDir: path.dirname(config.dbPath), cwd: "/work/project-alpha", session },
"dark mode",
);
expect(search.backend).toBe("mnemopi");
expect(search.count).toBeGreaterThan(0);
expect(search.items[0]).toMatchObject({
content: expect.stringContaining("dark mode"),
source: "test-source",
score: expect.any(Number),
});
});
it("reports aborted searches and save-without-id failures", async () => {
const state = registerMnemopiState();
const session = state.session;
setMnemopiSessionState(session, state);
const controller = new AbortController();
controller.abort();
await expect(
mnemopiBackend.search!({ agentDir: "/tmp/agent", cwd: "/tmp", session }, "anything", {
signal: controller.signal,
}),
).resolves.toMatchObject({
backend: "mnemopi",
count: 0,
message: "Search aborted.",
});
const rememberSpy = vi.spyOn(state, "rememberScoped").mockReturnValue(undefined);
await expect(
mnemopiBackend.save!({ agentDir: "/tmp/agent", cwd: "/tmp", session }, { content: "memory without id" }),
).resolves.toMatchObject({
backend: "mnemopi",
stored: 0,
message: "Mnemopi did not return a stored memory id.",
});
rememberSpy.mockRestore();
});
it("derives valid project banks from the absolute project root", async () => {
const root = path.join(tmpdir(), `mnemopi-bank-${Date.now()}`);
const alphaCwd = path.join(root, "a", "api");