import { describe, expect, it } from "vitest"; import { stripAssistantInternalScaffolding } from "./assistant-visible-text.js"; describe("stripAssistantInternalScaffolding", () => { it("strips reasoning tags", () => { const input = ["", "secret", "", "Visible"].join("\n"); expect(stripAssistantInternalScaffolding(input)).toBe("Visible"); }); it("strips relevant-memories scaffolding blocks", () => { const input = [ "", "The following memories may be relevant to this conversation:", "- Internal memory note", "", "", "User-visible answer", ].join("\n"); expect(stripAssistantInternalScaffolding(input)).toBe("User-visible answer"); }); it("supports relevant_memories tag variants", () => { const input = [ "", "Internal memory note", "", "Visible", ].join("\n"); expect(stripAssistantInternalScaffolding(input)).toBe("Visible"); }); it("keeps relevant-memories tags inside fenced code", () => { const input = [ "```xml", "", "sample", "", "```", "", "Visible text", ].join("\n"); expect(stripAssistantInternalScaffolding(input)).toBe(input); }); it("keeps relevant-memories tags inside inline code", () => { const input = "Use `example` literally."; expect(stripAssistantInternalScaffolding(input)).toBe(input); }); it("hides unfinished relevant-memories blocks", () => { const input = ["Hello", "", "internal-only"].join("\n"); expect(stripAssistantInternalScaffolding(input)).toBe("Hello\n"); }); it("trims leading whitespace after stripping scaffolding", () => { const input = [ "", "secret", "", " ", "", "internal note", "", " Visible", ].join("\n"); expect(stripAssistantInternalScaffolding(input)).toBe("Visible"); }); it("preserves unfinished reasoning text while still stripping memory blocks", () => { const input = [ "Before", "", "secret", "", "internal note", "", "After", ].join("\n"); expect(stripAssistantInternalScaffolding(input)).toBe("Before\n\nsecret\n\nAfter"); }); });