Files
reverse-engineering-anything/tests/boundary/cli/cliFullOutputTokenCount.test.ts
T
a02202aba2 fix(cli): count the full-output envelope for TOON/YAML token counts
With --token-count --full-output, TOON and YAML results were delegated
to Incur before the envelope-aware count branch, so Incur counted only
the selected data (13) instead of the emitted full document (31).
Keep that combination on the REA output boundary so the count covers
the envelope and metadata, matching the docs/cli.md contract. Bare
counts stay delegated to Incur and are unchanged.

Fixes #7271
Supersedes #7278

Co-authored-by: Saim Shafique <128062316+sx4im@users.noreply.github.com>
Co-Authored-By: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-11-14 14:16:39 +01:00

66 lines
1.9 KiB
TypeScript

import { Writable } from "node:stream";
import { Formatter } from "incur";
import { estimateTokenCount } from "tokenx";
import { describe, expect, it } from "vitest";
import { parseCliOutputArguments } from "../../../src/cliOutput.js";
import { createCliResultOutput } from "../../../src/cli/cliResultOutput.js";
const countFor = async (
value: unknown,
format: "toon" | "yaml",
): Promise<{ readonly handled: boolean; readonly text: string }> => {
const chunks: Buffer[] = [];
const destination = new Writable({
write(chunk: Buffer, _encoding, callback) {
chunks.push(chunk);
callback();
},
});
const output = createCliResultOutput(
parseCliOutputArguments([
"fixture",
"--format",
format,
"--full-output",
"--token-count",
]),
destination,
);
if (output === undefined) throw new Error("Missing output surface");
const handled = await output.write(value, {
command: "fixture",
duration: "0ms",
format,
});
return { handled, text: Buffer.concat(chunks).toString("utf8") };
};
describe("full-output token counts for delegated formats", () => {
it.each(["toon", "yaml"] as const)(
"counts the emitted envelope, not just the selected data (%s)",
async (format) => {
const value = { imported: 0, unknowns_added: 0, total: 0 };
const counted = await countFor(value, format);
expect(counted.handled).toBe(true);
expect(counted.text).toBe(
`${estimateTokenCount(
Formatter.format(
{
ok: true,
data: value,
meta: { command: "fixture", duration: "0ms" },
},
format,
),
)}\n`,
);
},
);
// Bare counts stay delegated to Incur and are covered by the CLI replay
// (bare toon/yaml report the selected result before and after this fix);
// this boundary owns only the full-output envelope count.
});