import { describe, expect, it } from "vitest"; import { detectReflectedContent } from "./reflection-guard.js"; describe("detectReflectedContent", () => { it("returns false for empty text", () => { expect(detectReflectedContent("").isReflection).toBe(false); }); it("returns false for normal user text", () => { const result = detectReflectedContent("Hey, what's the weather today?"); expect(result.isReflection).toBe(false); expect(result.matchedLabels).toEqual([]); }); it("detects +#+#+#+# separator pattern", () => { const result = detectReflectedContent("NO_REPLY +#+#+#+#+#+assistant to=final"); expect(result.isReflection).toBe(true); expect(result.matchedLabels).toContain("internal-separator"); }); it("detects assistant to=final marker", () => { const result = detectReflectedContent("some text assistant to=final rest"); expect(result.isReflection).toBe(true); expect(result.matchedLabels).toContain("assistant-role-marker"); }); it("detects tags", () => { const result = detectReflectedContent("internal reasoning"); expect(result.isReflection).toBe(true); expect(result.matchedLabels).toContain("thinking-tag"); }); it("detects tags", () => { const result = detectReflectedContent("secret"); expect(result.isReflection).toBe(true); expect(result.matchedLabels).toContain("thinking-tag"); }); it("detects tags", () => { const result = detectReflectedContent("data"); expect(result.isReflection).toBe(true); expect(result.matchedLabels).toContain("relevant-memories-tag"); }); it("detects tags", () => { const result = detectReflectedContent("visible"); expect(result.isReflection).toBe(true); expect(result.matchedLabels).toContain("final-tag"); }); it("returns multiple matched labels for combined markers", () => { const text = "NO_REPLY +#+#+#+# step assistant to=final"; const result = detectReflectedContent(text); expect(result.isReflection).toBe(true); expect(result.matchedLabels.length).toBeGreaterThanOrEqual(3); }); it("ignores reflection markers inside inline code", () => { const result = detectReflectedContent( "Please keep `debug trace` in the example output", ); expect(result.isReflection).toBe(false); expect(result.matchedLabels).toEqual([]); }); it("ignores reflection markers inside fenced code blocks", () => { const result = detectReflectedContent( [ "User pasted a repro snippet:", "```xml", "cached", "assistant to=final", "```", ].join("\n"), ); expect(result.isReflection).toBe(false); expect(result.matchedLabels).toEqual([]); }); it("still flags markers that appear outside code blocks", () => { const result = detectReflectedContent( ["```xml", "inside code", "```", "", "assistant to=final"].join("\n"), ); expect(result.isReflection).toBe(true); expect(result.matchedLabels).toContain("assistant-role-marker"); }); it("does not flag normal code discussion about thinking", () => { const result = detectReflectedContent("I was thinking about your question"); expect(result.isReflection).toBe(false); }); it("flags '' as reflection when it forms a complete tag", () => { const result = detectReflectedContent("Here is my "); expect(result.isReflection).toBe(true); }); it("does not flag partial tag without closing bracket", () => { const result = detectReflectedContent("I sent a ' phrase without closing bracket", () => { const result = detectReflectedContent("This is a