Files
dev/packages/coding-agent/test/suite/regressions/7911-json-stream-usage.test.ts
alexion 67b361f0e9 Squashed 'third_party/pi/' content from commit d981de122
git-subtree-dir: third_party/pi
git-subtree-split: d981de1229ef899957bbe968bc8dcda02a21f477
2026-09-14 10:40:08 -04:00

33 lines
1.2 KiB
TypeScript

import { fauxAssistantMessage } from "@earendil-works/pi-ai";
import { afterEach, describe, expect, it } from "vitest";
import { toJsonEvent } from "../../../src/modes/json-event.ts";
import { createHarness, type Harness } from "../harness.ts";
describe("regression #7911: JSON message updates retain usage", () => {
let harness: Harness | undefined;
afterEach(() => {
harness?.cleanup();
});
it("includes cumulative usage without cumulative message snapshots", async () => {
harness = await createHarness();
harness.setResponses([fauxAssistantMessage("hello")]);
await harness.session.prompt("respond");
// #7290's delta-only wire projection dropped this fixed-size metadata with the snapshots.
const update = harness
.eventsOfType("message_update")
.find((event) => event.message.role === "assistant" && event.message.usage.totalTokens > 0);
if (!update || update.message.role !== "assistant") {
throw new Error("Expected an assistant update with populated usage");
}
const wireUpdate = toJsonEvent(update);
expect(wireUpdate.usage).toEqual(update.message.usage);
expect(wireUpdate).not.toHaveProperty("message");
expect(wireUpdate.assistantMessageEvent).not.toHaveProperty("partial");
});
});