6324122168
Closes #519 The ACP protocol's tool_call updates only carry a display title (not a structured tool name) and omit rawInput for polished tools, making the reconstructed messages unusable for step read/show. Changes: - hermes.ts: storePromptResult reads ~/.hermes/sessions/session_{id}.json via loadHermesSession() instead of using ACP-reconstructed messages - acp-client.ts: strip message/tool-call collection logic, keep only text chunk accumulation for final response extraction - step.ts: TurnData gains role + toolCalls fields; formatTurnBody renders them in step read markdown output - README: document sessions.write_json_snapshots requirement
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it } from "bun:test";
|
|
|
|
import { HermesAcpClient } from "../src/acp-client.js";
|
|
|
|
describe("handleSessionUpdate — text extraction", () => {
|
|
let client: HermesAcpClient;
|
|
|
|
beforeEach(() => {
|
|
client = new HermesAcpClient();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await client.close();
|
|
});
|
|
|
|
it("agent_message_chunk accumulates text in messageChunks", () => {
|
|
(
|
|
client as unknown as { handleSessionUpdate: (u: Record<string, unknown>) => void }
|
|
).handleSessionUpdate({
|
|
sessionUpdate: "agent_message_chunk",
|
|
content: { type: "text", text: "hello" },
|
|
});
|
|
(
|
|
client as unknown as { handleSessionUpdate: (u: Record<string, unknown>) => void }
|
|
).handleSessionUpdate({
|
|
sessionUpdate: "agent_message_chunk",
|
|
content: { type: "text", text: " world" },
|
|
});
|
|
expect((client as unknown as { messageChunks: string[] }).messageChunks).toEqual([
|
|
"hello",
|
|
" world",
|
|
]);
|
|
});
|
|
|
|
it("non-text chunks and other update types are ignored", () => {
|
|
(
|
|
client as unknown as { handleSessionUpdate: (u: Record<string, unknown>) => void }
|
|
).handleSessionUpdate({
|
|
sessionUpdate: "agent_message_chunk",
|
|
content: { type: "image", text: "ignored" },
|
|
});
|
|
(
|
|
client as unknown as { handleSessionUpdate: (u: Record<string, unknown>) => void }
|
|
).handleSessionUpdate({
|
|
sessionUpdate: "tool_call",
|
|
title: "Bash",
|
|
toolCallId: "tc-1",
|
|
});
|
|
(
|
|
client as unknown as { handleSessionUpdate: (u: Record<string, unknown>) => void }
|
|
).handleSessionUpdate({ sessionUpdate: "unknown_type", data: {} });
|
|
expect((client as unknown as { messageChunks: string[] }).messageChunks).toHaveLength(0);
|
|
});
|
|
});
|