import { afterEach, describe, expect, it } from "vitest"; import type { ExtensionAPI } from "../../../src/index.ts"; import { createHarness, type Harness } from "../harness.ts"; describe("regression #5996: session names do not contain newlines", () => { const harnesses: Harness[] = []; afterEach(() => { while (harnesses.length > 0) { harnesses.pop()?.cleanup(); } }); it("filters newlines when AgentSession.setSessionName is called", async () => { const harness = await createHarness(); harnesses.push(harness); harness.session.setSessionName("hello\nworld\r\nagain"); expect(harness.sessionManager.getSessionName()).toBe("hello world again"); expect(harness.eventsOfType("session_info_changed").map((event) => event.name)).toEqual(["hello world again"]); }); it("filters newlines when an extension calls pi.setSessionName", async () => { let api: ExtensionAPI | undefined; const harness = await createHarness({ extensionFactories: [ (pi) => { api = pi; }, ], }); harnesses.push(harness); api?.setSessionName("from\nextension"); expect(harness.sessionManager.getSessionName()).toBe("from extension"); expect(harness.eventsOfType("session_info_changed").map((event) => event.name)).toEqual(["from extension"]); }); });