60 lines
2.3 KiB
TypeScript
60 lines
2.3 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { mkdtemp, rm } from "node:fs/promises";
|
|
|
|
let runtimeRoot = "";
|
|
let queueMasterAgentTask: (typeof import("../src/lib/boss-data"))["queueMasterAgentTask"];
|
|
let completeMasterAgentTask: (typeof import("../src/lib/boss-data"))["completeMasterAgentTask"];
|
|
let listUserMasterMemories: (typeof import("../src/lib/boss-data"))["listUserMasterMemories"];
|
|
|
|
async function setup() {
|
|
if (runtimeRoot) return;
|
|
|
|
runtimeRoot = await mkdtemp(path.join(os.tmpdir(), "boss-master-agent-memory-ingestion-"));
|
|
process.env.BOSS_RUNTIME_ROOT = runtimeRoot;
|
|
process.env.BOSS_STATE_FILE = path.join(runtimeRoot, "boss-state.json");
|
|
|
|
const data = await import("../src/lib/boss-data.ts");
|
|
queueMasterAgentTask = data.queueMasterAgentTask;
|
|
completeMasterAgentTask = data.completeMasterAgentTask;
|
|
listUserMasterMemories = data.listUserMasterMemories;
|
|
}
|
|
|
|
test.after(async () => {
|
|
if (runtimeRoot) {
|
|
await rm(runtimeRoot, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
test("主 Agent 完成对话后会自动沉淀用户偏好和项目记忆", async () => {
|
|
await setup();
|
|
|
|
const task = await queueMasterAgentTask({
|
|
projectId: "master-agent",
|
|
requestMessageId: "msg-user-1",
|
|
requestText: "boss 项目后续都按微信式交互来做,并且默认中文回复。",
|
|
executionPrompt: "prompt",
|
|
requestedBy: "17600003315",
|
|
requestedByAccount: "17600003315",
|
|
deviceId: "master-agent-openai",
|
|
});
|
|
|
|
await completeMasterAgentTask({
|
|
taskId: task.taskId,
|
|
deviceId: "master-agent-openai",
|
|
status: "completed",
|
|
replyBody: "boss 项目当前进度已更新:会话页会继续按微信式交互推进。",
|
|
});
|
|
|
|
const memories = await listUserMasterMemories("17600003315", { includeArchived: false });
|
|
const globalMemory = memories.find((memory) => memory.scope === "global");
|
|
const projectMemory = memories.find((memory) => memory.scope === "project" && memory.projectId === "boss-console");
|
|
|
|
assert.ok(globalMemory, "expected a global user memory");
|
|
assert.ok(projectMemory, "expected a project-scoped memory");
|
|
assert.match(globalMemory?.content ?? "", /微信式交互|中文回复/);
|
|
assert.match(projectMemory?.content ?? "", /boss 项目当前进度已更新/);
|
|
});
|