Files
openclaw/extensions/acpx/src/runtime-internals/events.test.ts

82 lines
2.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { parsePromptEventLine } from "./events.js";
describe("parsePromptEventLine", () => {
it("parses raw ACP session/update agent_message_chunk lines", () => {
const line = JSON.stringify({
jsonrpc: "2.0",
method: "session/update",
params: {
sessionId: "s1",
update: {
sessionUpdate: "agent_message_chunk",
content: { type: "text", text: "hello" },
},
},
});
expect(parsePromptEventLine(line)).toEqual({
type: "text_delta",
text: "hello",
stream: "output",
tag: "agent_message_chunk",
});
});
it("parses usage_update with stable metadata", () => {
const line = JSON.stringify({
jsonrpc: "2.0",
method: "session/update",
params: {
sessionId: "s1",
update: {
sessionUpdate: "usage_update",
used: 12,
size: 500,
},
},
});
expect(parsePromptEventLine(line)).toEqual({
type: "status",
text: "usage updated: 12/500",
tag: "usage_update",
used: 12,
size: 500,
});
});
it("parses tool_call_update without using call ids as primary fallback label", () => {
const line = JSON.stringify({
jsonrpc: "2.0",
method: "session/update",
params: {
sessionId: "s1",
update: {
sessionUpdate: "tool_call_update",
toolCallId: "call_ABC123",
status: "in_progress",
},
},
});
expect(parsePromptEventLine(line)).toEqual({
type: "tool_call",
text: "tool call (in_progress)",
tag: "tool_call_update",
toolCallId: "call_ABC123",
status: "in_progress",
title: "tool call",
});
});
it("keeps compatibility with simplified text/done lines", () => {
expect(parsePromptEventLine(JSON.stringify({ type: "text", content: "alpha" }))).toEqual({
type: "text_delta",
text: "alpha",
stream: "output",
});
expect(parsePromptEventLine(JSON.stringify({ type: "done", stopReason: "end_turn" }))).toEqual({
type: "done",
stopReason: "end_turn",
});
});
});