test(agents): centralize AgentMessage fixtures and remove unsafe casts

This commit is contained in:
Peter Steinberger
2026-03-03 02:13:43 +00:00
parent 15a0455d04
commit 70db52de71
14 changed files with 216 additions and 139 deletions

View File

@@ -1,12 +1,13 @@
import type { AgentMessage } from "@mariozechner/pi-agent-core";
import { describe, expect, it } from "vitest";
import { castAgentMessages } from "./test-helpers/agent-message-fixtures.js";
import {
isValidCloudCodeAssistToolId,
sanitizeToolCallIdsForCloudCodeAssist,
} from "./tool-call-id.js";
const buildDuplicateIdCollisionInput = () =>
[
castAgentMessages([
{
role: "assistant",
content: [
@@ -26,7 +27,7 @@ const buildDuplicateIdCollisionInput = () =>
toolName: "read",
content: [{ type: "text", text: "two" }],
},
] as unknown as AgentMessage[];
]);
function expectCollisionIdsRemainDistinct(
out: AgentMessage[],
@@ -65,7 +66,7 @@ function expectSingleToolCallRewrite(
describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
describe("strict mode (default)", () => {
it("is a no-op for already-valid non-colliding IDs", () => {
const input = [
const input = castAgentMessages([
{
role: "assistant",
content: [{ type: "toolCall", id: "call1", name: "read", arguments: {} }],
@@ -76,14 +77,14 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
toolName: "read",
content: [{ type: "text", text: "ok" }],
},
] as unknown as AgentMessage[];
]);
const out = sanitizeToolCallIdsForCloudCodeAssist(input);
expect(out).toBe(input);
});
it("strips non-alphanumeric characters from tool call IDs", () => {
const input = [
const input = castAgentMessages([
{
role: "assistant",
content: [{ type: "toolCall", id: "call|item:123", name: "read", arguments: {} }],
@@ -94,7 +95,7 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
toolName: "read",
content: [{ type: "text", text: "ok" }],
},
] as unknown as AgentMessage[];
]);
const out = sanitizeToolCallIdsForCloudCodeAssist(input);
expect(out).not.toBe(input);
@@ -113,7 +114,7 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
it("caps tool call IDs at 40 chars while preserving uniqueness", () => {
const longA = `call_${"a".repeat(60)}`;
const longB = `call_${"a".repeat(59)}b`;
const input = [
const input = castAgentMessages([
{
role: "assistant",
content: [
@@ -133,7 +134,7 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
toolName: "read",
content: [{ type: "text", text: "two" }],
},
] as unknown as AgentMessage[];
]);
const out = sanitizeToolCallIdsForCloudCodeAssist(input);
const { aId, bId } = expectCollisionIdsRemainDistinct(out, "strict");
@@ -144,7 +145,7 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
describe("strict mode (alphanumeric only)", () => {
it("strips underscores and hyphens from tool call IDs", () => {
const input = [
const input = castAgentMessages([
{
role: "assistant",
content: [
@@ -162,7 +163,7 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
toolName: "login",
content: [{ type: "text", text: "ok" }],
},
] as unknown as AgentMessage[];
]);
const out = sanitizeToolCallIdsForCloudCodeAssist(input, "strict");
expect(out).not.toBe(input);
@@ -184,7 +185,7 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
describe("strict9 mode (Mistral tool call IDs)", () => {
it("is a no-op for already-valid 9-char alphanumeric IDs", () => {
const input = [
const input = castAgentMessages([
{
role: "assistant",
content: [{ type: "toolCall", id: "abc123XYZ", name: "read", arguments: {} }],
@@ -195,14 +196,14 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
toolName: "read",
content: [{ type: "text", text: "ok" }],
},
] as unknown as AgentMessage[];
]);
const out = sanitizeToolCallIdsForCloudCodeAssist(input, "strict9");
expect(out).toBe(input);
});
it("enforces alphanumeric IDs with length 9", () => {
const input = [
const input = castAgentMessages([
{
role: "assistant",
content: [
@@ -222,7 +223,7 @@ describe("sanitizeToolCallIdsForCloudCodeAssist", () => {
toolName: "read",
content: [{ type: "text", text: "two" }],
},
] as unknown as AgentMessage[];
]);
const out = sanitizeToolCallIdsForCloudCodeAssist(input, "strict9");
expect(out).not.toBe(input);