mirror of
https://github.com/morluto/rea.git
synced 2026-11-14 18:52:48 +00:00
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>
66 lines
1.9 KiB
TypeScript
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.
|
|
});
|