Files
writing-agent/tests/persona-store.test.ts
T
chenmoranzhi 9dc927282f 预设兼容:按真实抓包对齐装配与包装层,补上声明式工具与预设正则。
- 装配只认 prompt_order.enabled;squash_system_messages 只合并相邻 system(新增 system 档,连接符按酒馆用单换行)
- 包装层:new_chat_prompt、示例对话(new_example_chat_prompt + <START> 切段 + name)、角色卡三块与 personality_format/scenario_format、{{user}}/{{char}} 取值、任务契约并进预设条目
- 工具协议:按 ToolBindings / 伪工具协议数据声明真 tools(presetToolPolicy=preset),工具描述用到的条目不再重复作为消息发出
- 正则:promptOnly 作用于对话历史(含 depth 过滤)、写入时脚本改写回复;{{//}} 注释按配平扫描
- tools/st-request-diff:真假上游抓包对比工具、三份预设的机制结论与实测报告
2026-10-23 00:13:08 +08:00

75 lines
2.4 KiB
TypeScript

import { describe, expect, it, beforeEach } from "vitest";
import { mkdtempSync } from "node:fs";
import { tmpdir } from "node:os";
import path from "node:path";
describe("persona store", () => {
beforeEach(() => {
process.env.WRITING_AGENT_DATA_DIR = mkdtempSync(
path.join(tmpdir(), "wa-persona-"),
);
});
it("seeds a creation-default @玩家 alongside the play persona", async () => {
const {
CREATION_PLACEHOLDER_NAME,
getActivePersona,
getCreationDefaultPersona,
listPersonas,
personaForLifecycle,
} = await import("../src/persona/store.js");
const list = listPersonas();
expect(list.map((p) => p.name)).toEqual(["User", CREATION_PLACEHOLDER_NAME]);
expect(getActivePersona()?.name).toBe("User");
expect(getCreationDefaultPersona()?.name).toBe(CREATION_PLACEHOLDER_NAME);
expect(personaForLifecycle("design")?.name).toBe(CREATION_PLACEHOLDER_NAME);
expect(personaForLifecycle("play")?.name).toBe("User");
});
it("creation default is exclusive and used only in design", async () => {
const {
CREATION_PLACEHOLDER_NAME,
createPersona,
personaForLifecycle,
setActivePersonaId,
updatePersona,
} = await import("../src/persona/store.js");
const play = createPersona({
name: "林晚",
description: "冷静的调查员",
activate: true,
});
expect(personaForLifecycle("play")?.name).toBe("林晚");
expect(personaForLifecycle("design")?.name).toBe(CREATION_PLACEHOLDER_NAME);
updatePersona(play.id, { creationDefault: true });
expect(personaForLifecycle("design")).toEqual({
name: "林晚",
description: "冷静的调查员",
});
expect(personaForLifecycle("play")?.name).toBe("林晚");
setActivePersonaId(play.id);
updatePersona(play.id, { creationDefault: false });
expect(personaForLifecycle("design")?.name).toBe(CREATION_PLACEHOLDER_NAME);
});
it("falls back to @玩家 when no creation default is set", async () => {
const {
CREATION_PLACEHOLDER_NAME,
getCreationDefaultPersona,
personaForLifecycle,
setCreationDefaultPersonaId,
} = await import("../src/persona/store.js");
setCreationDefaultPersonaId(null);
expect(getCreationDefaultPersona()).toBeNull();
expect(personaForLifecycle("design")).toEqual({
name: CREATION_PLACEHOLDER_NAME,
description: "",
});
});
});