| import { describe, expect, it } from "vitest"; |
| import { countToolResults, extractToolCallNames, hasToolCall } from "./transcript-tools.js"; |
|
|
| describe("transcript-tools", () => { |
| describe("extractToolCallNames", () => { |
| it("extracts tool name from message.toolName/tool_name", () => { |
| expect(extractToolCallNames({ toolName: " weather " })).toEqual(["weather"]); |
| expect(extractToolCallNames({ tool_name: "notes" })).toEqual(["notes"]); |
| }); |
|
|
| it("extracts tool call names from content blocks (tool_use/toolcall/tool_call)", () => { |
| const names = extractToolCallNames({ |
| content: [ |
| { type: "text", text: "hi" }, |
| { type: "tool_use", name: "read" }, |
| { type: "toolcall", name: "exec" }, |
| { type: "tool_call", name: "write" }, |
| ], |
| }); |
| expect(new Set(names)).toEqual(new Set(["read", "exec", "write"])); |
| }); |
|
|
| it("normalizes type and trims names; de-dupes", () => { |
| const names = extractToolCallNames({ |
| content: [ |
| { type: " TOOL_CALL ", name: " read " }, |
| { type: "tool_call", name: "read" }, |
| { type: "tool_call", name: "" }, |
| ], |
| toolName: "read", |
| }); |
| expect(names).toEqual(["read"]); |
| }); |
| }); |
|
|
| describe("hasToolCall", () => { |
| it("returns true when tool call names exist", () => { |
| expect(hasToolCall({ toolName: "weather" })).toBe(true); |
| expect(hasToolCall({ content: [{ type: "tool_use", name: "read" }] })).toBe(true); |
| }); |
|
|
| it("returns false when no tool calls exist", () => { |
| expect(hasToolCall({})).toBe(false); |
| expect(hasToolCall({ content: [{ type: "text", text: "hi" }] })).toBe(false); |
| }); |
| }); |
|
|
| describe("countToolResults", () => { |
| it("counts tool_result blocks and tool_result_error blocks; tracks errors via is_error", () => { |
| expect( |
| countToolResults({ |
| content: [ |
| { type: "tool_result" }, |
| { type: "tool_result", is_error: true }, |
| { type: "tool_result_error" }, |
| { type: "text", text: "ignore" }, |
| ], |
| }), |
| ).toEqual({ total: 3, errors: 1 }); |
| }); |
|
|
| it("handles non-array content", () => { |
| expect(countToolResults({ content: "nope" })).toEqual({ total: 0, errors: 0 }); |
| }); |
| }); |
| }); |
|
|