fix(memory): tighten runtime and backend coverage
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user