test(agents): dedupe agent and cron test scaffolds

This commit is contained in:
Peter Steinberger
2026-03-02 06:40:42 +00:00
parent 281494ae52
commit 7e29d604ba
38 changed files with 3114 additions and 4486 deletions

View File

@@ -74,6 +74,54 @@ describe("sanitizeSessionHistory", () => {
},
] as unknown as AgentMessage[];
const makeUsage = (input: number, output: number, totalTokens: number) => ({
input,
output,
cacheRead: 0,
cacheWrite: 0,
totalTokens,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
});
const makeAssistantUsageMessage = (params: {
text: string;
usage: ReturnType<typeof makeUsage>;
timestamp?: number;
}) =>
({
role: "assistant",
content: [{ type: "text", text: params.text }],
stopReason: "stop",
...(typeof params.timestamp === "number" ? { timestamp: params.timestamp } : {}),
usage: params.usage,
}) as unknown as AgentMessage;
const makeCompactionSummaryMessage = (tokensBefore: number, timestamp: string) =>
({
role: "compactionSummary",
summary: "compressed",
tokensBefore,
timestamp,
}) as unknown as AgentMessage;
const sanitizeOpenAIHistory = async (
messages: AgentMessage[],
overrides: Partial<Parameters<SanitizeSessionHistoryFn>[0]> = {},
) =>
sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
...overrides,
});
const getAssistantMessages = (messages: AgentMessage[]) =>
messages.filter((message) => message.role === "assistant") as Array<
AgentMessage & { usage?: unknown; content?: unknown }
>;
beforeEach(async () => {
sanitizeSessionHistory = await loadSanitizeSessionHistoryWithCleanMocks();
});
@@ -178,34 +226,14 @@ describe("sanitizeSessionHistory", () => {
const messages = [
{ role: "user", content: "old context" },
{
role: "assistant",
content: [{ type: "text", text: "old answer" }],
stopReason: "stop",
usage: {
input: 191_919,
output: 2_000,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 193_919,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
{
role: "compactionSummary",
summary: "compressed",
tokensBefore: 191_919,
timestamp: new Date().toISOString(),
},
makeAssistantUsageMessage({
text: "old answer",
usage: makeUsage(191_919, 2_000, 193_919),
}),
makeCompactionSummaryMessage(191_919, new Date().toISOString()),
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
});
const result = await sanitizeOpenAIHistory(messages);
const staleAssistant = result.find((message) => message.role === "assistant") as
| (AgentMessage & { usage?: unknown })
@@ -218,52 +246,21 @@ describe("sanitizeSessionHistory", () => {
vi.mocked(helpers.isGoogleModelApi).mockReturnValue(false);
const messages = [
{
role: "assistant",
content: [{ type: "text", text: "pre-compaction answer" }],
stopReason: "stop",
usage: {
input: 120_000,
output: 3_000,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 123_000,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
{
role: "compactionSummary",
summary: "compressed",
tokensBefore: 123_000,
timestamp: new Date().toISOString(),
},
makeAssistantUsageMessage({
text: "pre-compaction answer",
usage: makeUsage(120_000, 3_000, 123_000),
}),
makeCompactionSummaryMessage(123_000, new Date().toISOString()),
{ role: "user", content: "new question" },
{
role: "assistant",
content: [{ type: "text", text: "fresh answer" }],
stopReason: "stop",
usage: {
input: 1_000,
output: 250,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 1_250,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
makeAssistantUsageMessage({
text: "fresh answer",
usage: makeUsage(1_000, 250, 1_250),
}),
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
});
const result = await sanitizeOpenAIHistory(messages);
const assistants = result.filter((message) => message.role === "assistant") as Array<
AgentMessage & { usage?: unknown }
>;
const assistants = getAssistantMessages(result);
expect(assistants).toHaveLength(2);
expect(assistants[0]?.usage).toEqual(makeZeroUsageSnapshot());
expect(assistants[1]?.usage).toBeDefined();
@@ -274,35 +271,15 @@ describe("sanitizeSessionHistory", () => {
const compactionTs = Date.parse("2026-02-26T12:00:00.000Z");
const messages = [
{
role: "compactionSummary",
summary: "compressed",
tokensBefore: 191_919,
timestamp: new Date(compactionTs).toISOString(),
},
{
role: "assistant",
content: [{ type: "text", text: "kept pre-compaction answer" }],
stopReason: "stop",
makeCompactionSummaryMessage(191_919, new Date(compactionTs).toISOString()),
makeAssistantUsageMessage({
text: "kept pre-compaction answer",
timestamp: compactionTs - 1_000,
usage: {
input: 191_919,
output: 2_000,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 193_919,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
usage: makeUsage(191_919, 2_000, 193_919),
}),
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
});
const result = await sanitizeOpenAIHistory(messages);
const assistant = result.find((message) => message.role === "assistant") as
| (AgentMessage & { usage?: unknown })
@@ -315,54 +292,23 @@ describe("sanitizeSessionHistory", () => {
const compactionTs = Date.parse("2026-02-26T12:00:00.000Z");
const messages = [
{
role: "compactionSummary",
summary: "compressed",
tokensBefore: 123_000,
timestamp: new Date(compactionTs).toISOString(),
},
{
role: "assistant",
content: [{ type: "text", text: "kept pre-compaction answer" }],
stopReason: "stop",
makeCompactionSummaryMessage(123_000, new Date(compactionTs).toISOString()),
makeAssistantUsageMessage({
text: "kept pre-compaction answer",
timestamp: compactionTs - 2_000,
usage: {
input: 120_000,
output: 3_000,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 123_000,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
usage: makeUsage(120_000, 3_000, 123_000),
}),
{ role: "user", content: "new question", timestamp: compactionTs + 1_000 },
{
role: "assistant",
content: [{ type: "text", text: "fresh answer" }],
stopReason: "stop",
makeAssistantUsageMessage({
text: "fresh answer",
timestamp: compactionTs + 2_000,
usage: {
input: 1_000,
output: 250,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 1_250,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
},
usage: makeUsage(1_000, 250, 1_250),
}),
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
});
const result = await sanitizeOpenAIHistory(messages);
const assistants = result.filter((message) => message.role === "assistant") as Array<
AgentMessage & { usage?: unknown; content?: unknown }
>;
const assistants = getAssistantMessages(result);
const keptAssistant = assistants.find((message) =>
JSON.stringify(message.content).includes("kept pre-compaction answer"),
);
@@ -411,13 +357,7 @@ describe("sanitizeSessionHistory", () => {
},
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
});
const result = await sanitizeOpenAIHistory(messages);
// repairToolUseResultPairing now runs for all providers (including OpenAI)
// to fix orphaned function_call_output items that OpenAI would reject.
@@ -435,13 +375,7 @@ describe("sanitizeSessionHistory", () => {
{ role: "user", content: "hello" },
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: "test-session",
});
const result = await sanitizeOpenAIHistory(messages, { sessionId: "test-session" });
expect(result.map((msg) => msg.role)).toEqual(["user"]);
});
@@ -463,13 +397,7 @@ describe("sanitizeSessionHistory", () => {
{ role: "user", content: "hello" },
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
});
const result = await sanitizeOpenAIHistory(messages);
expect(result.map((msg) => msg.role)).toEqual(["user"]);
});
@@ -482,13 +410,8 @@ describe("sanitizeSessionHistory", () => {
},
] as unknown as AgentMessage[];
const result = await sanitizeSessionHistory({
messages,
modelApi: "openai-responses",
provider: "openai",
const result = await sanitizeOpenAIHistory(messages, {
allowedToolNames: ["read"],
sessionManager: mockSessionManager,
sessionId: TEST_SESSION_ID,
});
expect(result).toEqual([]);