import type { AgentMessage } from "@mariozechner/pi-agent-core"; import { SessionManager } from "@mariozechner/pi-coding-agent"; import { describe, expect, it } from "vitest"; import { guardSessionManager } from "./session-tool-result-guard-wrapper.js"; import { sanitizeToolUseResultPairing } from "./session-transcript-repair.js"; function assistantToolCall(id: string): AgentMessage { return { role: "assistant", content: [{ type: "toolCall", id, name: "n", arguments: {} }], } as AgentMessage; } describe("guardSessionManager integration", () => { it("persists synthetic toolResult before subsequent assistant message", () => { const sm = guardSessionManager(SessionManager.inMemory()); sm.appendMessage(assistantToolCall("call_1")); sm.appendMessage({ role: "assistant", content: [{ type: "text", text: "followup" }], } as AgentMessage); const messages = sm .getEntries() .filter((e) => e.type === "message") .map((e) => (e as { message: AgentMessage }).message); expect(messages.map((m) => m.role)).toEqual(["assistant", "toolResult", "assistant"]); expect((messages[1] as { toolCallId?: string }).toolCallId).toBe("call_1"); expect(sanitizeToolUseResultPairing(messages).map((m) => m.role)).toEqual([ "assistant", "toolResult", "assistant", ]); }); });