fix: guard session tool results
This commit is contained in:
42
src/agents/pi-embedded-runner.guard.test.ts
Normal file
42
src/agents/pi-embedded-runner.guard.test.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import type { AgentMessage } from "@mariozechner/pi-agent-core";
|
||||
import { SessionManager } from "@mariozechner/pi-coding-agent";
|
||||
|
||||
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"]);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user