multica/src/agent/session/session-manager.display.test.ts
Jiang Bohan 5380b146b3 chore(deps): upgrade pi-ai and pi-agent-core to 0.52.9
Upgrade @mariozechner/pi-ai and @mariozechner/pi-agent-core from 0.50.3
to 0.52.9 to support latest models (claude-opus-4-6, o3, o3-mini).

Breaking type changes addressed:
- exactOptionalPropertyTypes: use conditional spread or `| undefined`
- TOOL_PROFILES removed: strip all profile references from CLI
- AgentMessage union requires timestamp: cast test fixtures
- AsyncAgent.id → sessionId
- Add explicit callback parameter types for SDK event handlers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 19:13:38 +08:00

96 lines
3.3 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { existsSync, mkdirSync, rmSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { SessionManager } from "./session-manager.js";
import { readEntries, writeEntries } from "./storage.js";
import type { SessionEntry } from "./types.js";
describe("SessionManager display content view", () => {
const testBaseDir = join(tmpdir(), `multica-session-display-${Date.now()}`);
beforeEach(() => {
if (existsSync(testBaseDir)) {
rmSync(testBaseDir, { recursive: true });
}
mkdirSync(testBaseDir, { recursive: true });
});
afterEach(() => {
if (existsSync(testBaseDir)) {
rmSync(testBaseDir, { recursive: true });
}
});
it("uses displayContent for user messages in display view", async () => {
const sessionId = "display-view";
const session = new SessionManager({ sessionId, baseDir: testBaseDir });
const entries: SessionEntry[] = [
{
type: "message",
message: { role: "user", content: "[Mon 2026-02-09 14:37 GMT+8] hi" } as any,
displayContent: "hi",
timestamp: 1,
},
{
type: "message",
message: { role: "assistant", content: "hello there" } as any,
timestamp: 2,
},
];
await writeEntries(sessionId, entries, { baseDir: testBaseDir });
const raw = session.loadMessages();
const display = session.loadMessagesForDisplay();
expect((raw[0] as any)?.content).toBe("[Mon 2026-02-09 14:37 GMT+8] hi");
expect((display[0] as any)?.content).toBe("hi");
expect((display[1] as any)?.content).toBe("hello there");
});
it("keeps internal filtering behavior in display view", async () => {
const sessionId = "display-internal";
const session = new SessionManager({ sessionId, baseDir: testBaseDir });
const entries: SessionEntry[] = [
{
type: "message",
message: { role: "user", content: "[Mon 2026-02-09 14:37 GMT+8] hidden" } as any,
displayContent: "hidden",
internal: true,
timestamp: 1,
},
{
type: "message",
message: { role: "user", content: "[Mon 2026-02-09 14:38 GMT+8] visible" } as any,
displayContent: "visible",
timestamp: 2,
},
];
await writeEntries(sessionId, entries, { baseDir: testBaseDir });
const defaultView = session.loadMessagesForDisplay();
const includeInternalView = session.loadMessagesForDisplay({ includeInternal: true });
expect(defaultView).toHaveLength(1);
expect((defaultView[0] as any)?.content).toBe("visible");
expect(includeInternalView).toHaveLength(2);
expect((includeInternalView[0] as any)?.content).toBe("hidden");
});
it("persists displayContent on saveMessage", async () => {
const sessionId = "display-save";
const session = new SessionManager({ sessionId, baseDir: testBaseDir });
session.saveMessage(
{ role: "user", content: "[Mon 2026-02-09 14:39 GMT+8] save me" } as any,
{ displayContent: "save me" },
);
await session.flush();
const entries = readEntries(sessionId, { baseDir: testBaseDir }) as Array<
Extract<SessionEntry, { type: "message" }>
>;
expect(entries).toHaveLength(1);
expect(entries[0]?.displayContent).toBe("save me");
});
});