重建会话记录逻辑
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import { afterEach, beforeEach, describe, expect, it } from "bun:test";
|
||||
import { mkdtemp, rm } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
|
||||
import { MemoryStore } from "../../src/memory/store.js";
|
||||
|
||||
describe("MemoryStore", () => {
|
||||
let tempDir: string;
|
||||
let backupDir: string;
|
||||
let store: MemoryStore;
|
||||
|
||||
beforeEach(async () => {
|
||||
tempDir = await mkdtemp(join(tmpdir(), "tjwater-memory-"));
|
||||
backupDir = await mkdtemp(join(tmpdir(), "tjwater-memory-backup-"));
|
||||
store = new MemoryStore(tempDir, backupDir);
|
||||
await store.initialize();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await rm(tempDir, { force: true, recursive: true });
|
||||
await rm(backupDir, { force: true, recursive: true });
|
||||
});
|
||||
|
||||
it("dedupes exact duplicate memories", async () => {
|
||||
const first = await store.upsert("workspace", "project-1", {
|
||||
content: "DMA-2 nightly leakage analysis should compare against adjacent zones first.",
|
||||
source: "tool",
|
||||
});
|
||||
const second = await store.upsert("workspace", "project-1", {
|
||||
content: "DMA-2 nightly leakage analysis should compare against adjacent zones first.",
|
||||
source: "tool",
|
||||
});
|
||||
|
||||
expect(first.changed).toBe(true);
|
||||
expect(second.changed).toBe(false);
|
||||
expect(second.detail).toBe("memory already existed");
|
||||
});
|
||||
|
||||
it("rejects rewritten memories that are too similar to an existing one", async () => {
|
||||
await store.upsert("workspace", "project-1", {
|
||||
content: "保存记忆前先查看当前 workspace memory,避免重复写入相同约束。",
|
||||
source: "tool",
|
||||
});
|
||||
|
||||
const result = await store.upsert("workspace", "project-1", {
|
||||
content: "写入前先看一遍当前 workspace 记忆,避免把同样的约束重复保存进去。",
|
||||
source: "tool",
|
||||
});
|
||||
|
||||
expect(result.changed).toBe(false);
|
||||
expect(result.detail).toBe("similar memory already exists");
|
||||
expect(result.entry?.content).toBe("保存记忆前先查看当前 workspace memory,避免重复写入相同约束。");
|
||||
});
|
||||
|
||||
it("rejects replace when the new content overlaps a similar existing memory", async () => {
|
||||
const first = await store.upsert("user", "actor-1", {
|
||||
content: "回答时默认使用中文,并保持结论先行。",
|
||||
source: "tool",
|
||||
});
|
||||
const second = await store.upsert("user", "actor-1", {
|
||||
content: "回答要包含必要的文件路径引用。",
|
||||
source: "tool",
|
||||
});
|
||||
|
||||
const result = await store.replace("user", "actor-1", second.entry?.id ?? "", {
|
||||
content: "默认使用中文回答,结论放在最前面。",
|
||||
source: "tool",
|
||||
});
|
||||
|
||||
expect(first.changed).toBe(true);
|
||||
expect(second.changed).toBe(true);
|
||||
expect(result.changed).toBe(false);
|
||||
expect(result.detail).toBe("replacement would overlap with a similar existing memory");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user