forked from farhoodlabs/paperclip
84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { parseCodexStdoutLine } from "./parse-stdout.js";
|
|
|
|
describe("parseCodexStdoutLine", () => {
|
|
it("marks completed tool_use items as resolved tool results", () => {
|
|
const started = parseCodexStdoutLine(JSON.stringify({
|
|
type: "item.started",
|
|
item: {
|
|
id: "tool-1",
|
|
type: "tool_use",
|
|
name: "search",
|
|
input: { query: "paperclip" },
|
|
},
|
|
}), "2026-04-08T12:00:00.000Z");
|
|
|
|
const completed = parseCodexStdoutLine(JSON.stringify({
|
|
type: "item.completed",
|
|
item: {
|
|
id: "tool-1",
|
|
type: "tool_use",
|
|
name: "search",
|
|
status: "completed",
|
|
},
|
|
}), "2026-04-08T12:00:01.000Z");
|
|
|
|
expect(started).toEqual([{
|
|
kind: "tool_call",
|
|
ts: "2026-04-08T12:00:00.000Z",
|
|
name: "search",
|
|
toolUseId: "tool-1",
|
|
input: { query: "paperclip" },
|
|
}]);
|
|
expect(completed).toEqual([{
|
|
kind: "tool_result",
|
|
ts: "2026-04-08T12:00:01.000Z",
|
|
toolUseId: "tool-1",
|
|
content: "search completed",
|
|
isError: false,
|
|
}]);
|
|
});
|
|
|
|
it("keeps explicit tool_result payloads authoritative after tool_use completion", () => {
|
|
const completed = parseCodexStdoutLine(JSON.stringify({
|
|
type: "item.completed",
|
|
item: {
|
|
id: "tool-2",
|
|
type: "tool_result",
|
|
tool_use_id: "tool-1",
|
|
content: "final payload",
|
|
status: "completed",
|
|
},
|
|
}), "2026-04-08T12:00:02.000Z");
|
|
|
|
expect(completed).toEqual([{
|
|
kind: "tool_result",
|
|
ts: "2026-04-08T12:00:02.000Z",
|
|
toolUseId: "tool-1",
|
|
content: "final payload",
|
|
isError: false,
|
|
}]);
|
|
});
|
|
|
|
it("marks failed completed tool_use items as error results", () => {
|
|
const completed = parseCodexStdoutLine(JSON.stringify({
|
|
type: "item.completed",
|
|
item: {
|
|
id: "tool-3",
|
|
type: "tool_use",
|
|
name: "write_file",
|
|
status: "error",
|
|
error: { message: "permission denied" },
|
|
},
|
|
}), "2026-04-08T12:00:03.000Z");
|
|
|
|
expect(completed).toEqual([{
|
|
kind: "tool_result",
|
|
ts: "2026-04-08T12:00:03.000Z",
|
|
toolUseId: "tool-3",
|
|
content: "permission denied",
|
|
isError: true,
|
|
}]);
|
|
});
|
|
});
|