65 lines
2.7 KiB
TypeScript
65 lines
2.7 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { containsSybilMention, filterAgentAsideMessages } from "../src/agent-mention.js";
|
|
|
|
test("recognizes literal case-insensitive Sybil tokens outside email, code, and quoted content", () => {
|
|
for (const value of ["@sybil help", "Please, @SyBiL!", "(@sybil)", "@sybil.", "🙂 @sybil help"]) {
|
|
assert.equal(containsSybilMention(value), true, value);
|
|
}
|
|
|
|
for (const value of [
|
|
"name@sybil.com",
|
|
"name@sybil",
|
|
"`@sybil`",
|
|
"Use ``@sybil`` here",
|
|
"```text\n@sybil\n```",
|
|
"~~~swift\n@sybil\n~~~",
|
|
" @sybil",
|
|
"> @sybil please",
|
|
"Quoted:\n> @sybil please",
|
|
"Quoted:\n> pasted text\ncontinued @sybil",
|
|
"\\@sybil",
|
|
]) {
|
|
assert.equal(containsSybilMention(value), false, value);
|
|
}
|
|
});
|
|
|
|
test("filters only server-marked Agent asides from ordinary provider context", () => {
|
|
const stored = [
|
|
{ id: "u1", role: "user", content: "before", metadata: null },
|
|
{ id: "u2", role: "user", content: "@sybil look at this", metadata: { agentAside: true } },
|
|
{ id: "a2", role: "assistant", content: "Agent reply", metadata: { agentAside: true } },
|
|
{ id: "u3", role: "user", content: "after", metadata: null },
|
|
];
|
|
const incoming = stored.map(({ id, role, content }) => ({ id, role, content }));
|
|
const filtered = filterAgentAsideMessages(incoming, stored, (left, right) =>
|
|
left.role === right.role && left.content === right.content);
|
|
|
|
assert.deepEqual(filtered.map(message => message.id), ["u1", "u3"]);
|
|
assert.equal(stored.length, 4, "filtering leaves visible persisted transcript rows intact");
|
|
});
|
|
|
|
test("only canonical stored metadata marks an aside", () => {
|
|
const stored = [
|
|
{ id: "normal", role: "user", content: "@sybil is quoted text", metadata: null },
|
|
{ id: "aside", role: "assistant", content: "Agent reply", metadata: { agentAside: true } },
|
|
];
|
|
const incoming = [
|
|
{ id: "normal", role: "user", content: "@sybil is quoted text", metadata: { agentAside: true } },
|
|
{ id: "aside", role: "assistant", content: "Agent reply", metadata: { agentAside: false } },
|
|
];
|
|
const filtered = filterAgentAsideMessages(incoming, stored, (left, right) =>
|
|
left.role === right.role && left.content === right.content);
|
|
|
|
assert.deepEqual(filtered.map(message => message.id), ["normal"]);
|
|
});
|
|
|
|
test("keeps messages whose IDs do not identify a matching canonical row", () => {
|
|
const stored = [{ id: "aside", role: "user", content: "@sybil", metadata: { agentAside: true } }];
|
|
const incoming = [{ id: "aside", role: "user", content: "ordinary text" }];
|
|
const filtered = filterAgentAsideMessages(incoming, stored, (left, right) =>
|
|
left.role === right.role && left.content === right.content);
|
|
|
|
assert.deepEqual(filtered, incoming);
|
|
});
|