88 lines
3.6 KiB
TypeScript
88 lines
3.6 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 readState: (typeof import("../src/lib/boss-data"))["readState"];
|
|
let getMasterAgentPromptPolicy: (typeof import("../src/lib/boss-data"))["getMasterAgentPromptPolicy"];
|
|
let updateMasterAgentPromptPolicy: (typeof import("../src/lib/boss-data"))["updateMasterAgentPromptPolicy"];
|
|
let getUserMasterPrompt: (typeof import("../src/lib/boss-data"))["getUserMasterPrompt"];
|
|
let updateUserMasterPrompt: (typeof import("../src/lib/boss-data"))["updateUserMasterPrompt"];
|
|
let listUserMasterMemories: (typeof import("../src/lib/boss-data"))["listUserMasterMemories"];
|
|
let createUserMasterMemory: (typeof import("../src/lib/boss-data"))["createUserMasterMemory"];
|
|
let updateUserMasterMemory: (typeof import("../src/lib/boss-data"))["updateUserMasterMemory"];
|
|
let archiveUserMasterMemory: (typeof import("../src/lib/boss-data"))["archiveUserMasterMemory"];
|
|
|
|
async function setup() {
|
|
if (runtimeRoot) return;
|
|
|
|
runtimeRoot = await mkdtemp(path.join(os.tmpdir(), "boss-master-agent-prompts-memory-"));
|
|
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");
|
|
readState = data.readState;
|
|
getMasterAgentPromptPolicy = data.getMasterAgentPromptPolicy;
|
|
updateMasterAgentPromptPolicy = data.updateMasterAgentPromptPolicy;
|
|
getUserMasterPrompt = data.getUserMasterPrompt;
|
|
updateUserMasterPrompt = data.updateUserMasterPrompt;
|
|
listUserMasterMemories = data.listUserMasterMemories;
|
|
createUserMasterMemory = data.createUserMasterMemory;
|
|
updateUserMasterMemory = data.updateUserMasterMemory;
|
|
archiveUserMasterMemory = data.archiveUserMasterMemory;
|
|
}
|
|
|
|
test.after(async () => {
|
|
if (runtimeRoot) {
|
|
await rm(runtimeRoot, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
test("主 Agent 提示词与用户记忆可读写", async () => {
|
|
await setup();
|
|
|
|
await updateMasterAgentPromptPolicy({
|
|
globalPrompt: "全局主提示词",
|
|
updatedBy: "17600003315",
|
|
});
|
|
await updateUserMasterPrompt("17600003315", "用户私有主提示词");
|
|
|
|
const created = await createUserMasterMemory({
|
|
account: "17600003315",
|
|
scope: "project",
|
|
projectId: "master-agent",
|
|
title: "项目进度",
|
|
content: "当前主链优先打通聊天闭环。",
|
|
memoryType: "project_progress",
|
|
tags: ["聊天", "主链"],
|
|
});
|
|
|
|
await updateUserMasterMemory(created.memoryId, "17600003315", {
|
|
content: "当前主链优先打通主 Agent 聊天闭环。",
|
|
tags: ["聊天", "主Agent"],
|
|
});
|
|
|
|
const policy = await getMasterAgentPromptPolicy();
|
|
const userPrompt = await getUserMasterPrompt("17600003315");
|
|
const memories = await listUserMasterMemories("17600003315", {
|
|
includeArchived: false,
|
|
});
|
|
|
|
assert.equal(policy?.globalPrompt, "全局主提示词");
|
|
assert.equal(userPrompt?.content, "用户私有主提示词");
|
|
assert.equal(memories.length, 1);
|
|
assert.equal(memories[0]?.content, "当前主链优先打通主 Agent 聊天闭环。");
|
|
assert.deepEqual(memories[0]?.tags, ["聊天", "主Agent"]);
|
|
|
|
await archiveUserMasterMemory(created.memoryId, "17600003315");
|
|
const visible = await listUserMasterMemories("17600003315", { includeArchived: false });
|
|
const all = await listUserMasterMemories("17600003315", { includeArchived: true });
|
|
const archived = all.find((item) => item.memoryId === created.memoryId);
|
|
|
|
assert.equal(visible.length, 0);
|
|
assert.equal(archived?.archived, true);
|
|
assert.equal((await readState()).masterAgentMemories.length, 1);
|
|
});
|