/** * tests/unit/compression/context-editing-telemetry.test.ts * * TDD for F4.1 — extractContextEditingTelemetry: pulls the server-side context * editing receipt (`applied_edits[].cleared_input_tokens` / `cleared_tool_uses`) * out of a Claude (Anthropic Messages) response body. Defensive over the exact * response shape: the array may live at `context_management.applied_edits` * (top-level) or nested under `usage` — we tolerate both rather than hardcode a * single guess (the spec's Task-1 caution). * * Run: node --import tsx/esm --test tests/unit/compression/context-editing-telemetry.test.ts */ import { describe, it } from "node:test"; import assert from "node:assert/strict"; import { extractContextEditingTelemetry } from "../../../open-sse/config/contextEditing.ts"; describe("extractContextEditingTelemetry", () => { it("returns null for null/undefined/non-object bodies", () => { assert.equal(extractContextEditingTelemetry(null), null); assert.equal(extractContextEditingTelemetry(undefined), null); assert.equal(extractContextEditingTelemetry("nope"), null); assert.equal(extractContextEditingTelemetry(42), null); }); it("returns null when there is no context_management / applied_edits", () => { assert.equal(extractContextEditingTelemetry({ usage: { input_tokens: 10 } }), null); assert.equal(extractContextEditingTelemetry({ context_management: {} }), null); assert.equal( extractContextEditingTelemetry({ context_management: { applied_edits: [] } }), null ); }); it("reads applied_edits from the top-level context_management object", () => { const body = { context_management: { applied_edits: [ { type: "clear_tool_uses_20250919", cleared_tool_uses: 8, cleared_input_tokens: 50000 }, ], }, }; const out = extractContextEditingTelemetry(body); assert.ok(out); assert.equal(out.editCount, 1); assert.equal(out.clearedInputTokens, 50000); assert.equal(out.clearedToolUses, 8); }); it("reads applied_edits nested under usage.context_management (alt shape)", () => { const body = { usage: { input_tokens: 120000, context_management: { applied_edits: [{ type: "clear_tool_uses_20250919", cleared_input_tokens: 30000 }], }, }, }; const out = extractContextEditingTelemetry(body); assert.ok(out); assert.equal(out.clearedInputTokens, 30000); }); it("reads applied_edits directly under usage.applied_edits (alt shape)", () => { const body = { usage: { applied_edits: [{ type: "clear_tool_uses_20250919", cleared_input_tokens: 12345 }], }, }; const out = extractContextEditingTelemetry(body); assert.ok(out); assert.equal(out.clearedInputTokens, 12345); }); it("sums cleared tokens/tool_uses across multiple edits", () => { const body = { context_management: { applied_edits: [ { type: "clear_thinking_20251015", cleared_input_tokens: 4000, cleared_tool_uses: 0 }, { type: "clear_tool_uses_20250919", cleared_input_tokens: 6000, cleared_tool_uses: 5 }, ], }, }; const out = extractContextEditingTelemetry(body); assert.ok(out); assert.equal(out.editCount, 2); assert.equal(out.clearedInputTokens, 10000); assert.equal(out.clearedToolUses, 5); }); it("falls back to camelCase field names if present", () => { const body = { context_management: { applied_edits: [ { type: "clear_tool_uses_20250919", clearedInputTokens: 777, clearedToolUses: 2 }, ], }, }; const out = extractContextEditingTelemetry(body); assert.ok(out); assert.equal(out.clearedInputTokens, 777); assert.equal(out.clearedToolUses, 2); }); it("returns null when edits exist but cleared nothing (no real telemetry)", () => { const body = { context_management: { applied_edits: [ { type: "clear_tool_uses_20250919", cleared_input_tokens: 0, cleared_tool_uses: 0 }, ], }, }; assert.equal(extractContextEditingTelemetry(body), null); }); it("skips malformed (non-object) edit entries and still sums the valid ones", () => { const body = { context_management: { applied_edits: [ null, "garbage", { type: "clear_tool_uses_20250919", cleared_input_tokens: 999 }, ], }, }; const out = extractContextEditingTelemetry(body); assert.ok(out); assert.equal(out.clearedInputTokens, 999); }); it("coerces numeric strings and ignores non-numeric junk", () => { const body = { context_management: { applied_edits: [ { type: "clear_tool_uses_20250919", cleared_input_tokens: "1500", cleared_tool_uses: "x", }, ], }, }; const out = extractContextEditingTelemetry(body); assert.ok(out); assert.equal(out.clearedInputTokens, 1500); assert.equal(out.clearedToolUses, 0); }); });