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 项目当前进度已更新/); }); test("主 Agent 不会把低价值短句和瞬时安排自动写入记忆", async () => { await setup(); const task = await queueMasterAgentTask({ projectId: "master-agent", requestMessageId: "msg-user-2", requestText: "好的,先这样,稍后我再看。", executionPrompt: "prompt", requestedBy: "17600003315", requestedByAccount: "17600003315", deviceId: "master-agent-openai", }); await completeMasterAgentTask({ taskId: task.taskId, deviceId: "master-agent-openai", status: "completed", replyBody: "好的,稍后继续。", }); const memories = await listUserMasterMemories("17600003315", { includeArchived: false }); const noisyMemory = memories.find( (memory) => (memory.content ?? "").includes("先这样") || (memory.content ?? "").includes("稍后继续"), ); assert.equal(noisyMemory, undefined); });