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); });