clanker-agent/packages/coding-agent/test/gateway-session-state.test.mjs
2026-03-08 22:12:03 -07:00

163 lines
3.7 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import {
buildGatewaySessionStateMessages,
messageContentToHistoryParts,
} from "../src/core/gateway/session-state.ts";
test("messageContentToHistoryParts converts assistant text, reasoning, and tool calls", () => {
const parts = messageContentToHistoryParts({
role: "assistant",
timestamp: 123,
content: [
{ type: "text", text: "hello" },
{ type: "thinking", thinking: "working" },
{
type: "toolCall",
id: "tool-1",
name: "bash",
arguments: { cmd: "pwd" },
},
],
});
assert.deepEqual(parts, [
{ type: "text", text: "hello" },
{ type: "reasoning", text: "working" },
{
type: "tool-invocation",
toolCallId: "tool-1",
toolName: "bash",
args: { cmd: "pwd" },
state: "call",
},
]);
});
test("buildGatewaySessionStateMessages includes the active assistant draft while a run is still processing", () => {
const messages = buildGatewaySessionStateMessages({
sessionKey: "agent:test:chat",
rawMessages: [
{
role: "user",
timestamp: 100,
content: "build a todo app",
},
],
activeAssistantMessage: {
role: "assistant",
timestamp: 200,
content: [
{ type: "text", text: "Working on it" },
{
type: "toolCall",
id: "tool-1",
name: "write",
arguments: { filePath: "app.tsx" },
},
],
},
pendingToolResults: [],
});
assert.deepEqual(messages, [
{
id: "100-user-0",
role: "user",
parts: [{ type: "text", text: "build a todo app" }],
timestamp: 100,
},
{
id: "draft:agent:test:chat:200",
role: "assistant",
parts: [
{ type: "text", text: "Working on it" },
{
type: "tool-invocation",
toolCallId: "tool-1",
toolName: "write",
args: { filePath: "app.tsx" },
state: "call",
},
],
timestamp: 200,
},
]);
});
test("buildGatewaySessionStateMessages keeps transient tool results until persisted history catches up", () => {
const messages = buildGatewaySessionStateMessages({
sessionKey: "agent:test:chat",
rawMessages: [
{
role: "user",
timestamp: 100,
content: "ship it",
},
{
role: "toolResult",
timestamp: 210,
toolCallId: "tool-1",
toolName: "bash",
content: [{ type: "text", text: "done" }],
isError: false,
},
],
activeAssistantMessage: null,
pendingToolResults: [
{
toolCallId: "tool-1",
toolName: "bash",
result: { stdout: "done" },
isError: false,
timestamp: 220,
},
{
toolCallId: "tool-2",
toolName: "write",
result: { path: "README.md" },
isError: false,
timestamp: 240,
},
],
});
assert.deepEqual(messages, [
{
id: "100-user-0",
role: "user",
parts: [{ type: "text", text: "ship it" }],
timestamp: 100,
},
{
id: "210-toolResult-1",
role: "toolResult",
parts: [
{
type: "tool-invocation",
toolCallId: "tool-1",
toolName: "bash",
args: undefined,
state: "result",
result: "done",
},
],
timestamp: 210,
},
{
id: "draft-tool:agent:test:chat:tool-2",
role: "toolResult",
parts: [
{
type: "tool-invocation",
toolCallId: "tool-2",
toolName: "write",
args: undefined,
state: "result",
result: { path: "README.md" },
},
],
timestamp: 240,
},
]);
});