import test from "node:test"; import assert from "node:assert/strict"; import { DEFAULT_CONFIG, normalizeConfig } from "../src/config.ts"; test("normalizes a full pi-compaction config", () => { const config = normalizeConfig({ enabled: false, masking: { enabled: false, triggerTokens: 150_000, triggerRatio: 0.5, targetTokens: 60_000, targetRatio: 0.2, minClearTokens: 30_000, keepRecentTurns: 5, minEntryTokens: 512, excludeTools: ["bash", "read"], }, summary: { triggerTokens: 300_000, triggerRatio: 0.8, thinking: "medium" }, native: { enabled: false }, }); assert.equal(config.enabled, false); assert.deepEqual(config.masking, { enabled: false, triggerTokens: 150_000, triggerRatio: 0.5, targetTokens: 60_000, targetRatio: 0.2, minClearTokens: 30_000, keepRecentTurns: 5, minEntryTokens: 512, excludeTools: ["bash", "read"], }); assert.equal(config.summary.triggerTokens, 300_000); assert.equal(config.summary.triggerRatio, 0.8); assert.equal(config.summary.thinking, "medium"); assert.equal(config.native.enabled, false); }); test("invalid fields fail safe to bounded defaults", () => { const config = normalizeConfig({ enabled: "yes", masking: { triggerTokens: -1, triggerRatio: 2, targetTokens: "a lot", targetRatio: 0, minClearTokens: 0, keepRecentTurns: 500, minEntryTokens: -3, excludeTools: "read", }, summary: { triggerTokens: Number.NaN, triggerRatio: 1.5, thinking: "insane" }, native: { enabled: 1 }, }); assert.equal(config.enabled, DEFAULT_CONFIG.enabled); assert.deepEqual(config.masking, DEFAULT_CONFIG.masking); assert.equal(config.summary.triggerTokens, DEFAULT_CONFIG.summary.triggerTokens); assert.equal(config.summary.triggerRatio, DEFAULT_CONFIG.summary.triggerRatio); assert.equal(config.summary.thinking, DEFAULT_CONFIG.summary.thinking); assert.equal(config.native.enabled, DEFAULT_CONFIG.native.enabled); }); test("masking target is corrected below trigger and summary above masking", () => { const config = normalizeConfig({ masking: { triggerTokens: 80_000, triggerRatio: 0.5, targetTokens: 120_000, targetRatio: 0.9 }, summary: { triggerTokens: 50_000, triggerRatio: 0.4 }, }); assert.equal(config.masking.targetTokens, 40_000); assert.equal(config.masking.targetRatio, 0.25); assert.equal(config.summary.triggerTokens, 160_000); assert.ok(config.summary.triggerRatio > config.masking.triggerRatio); }); test("minClearTokens and excludeTools accept valid overrides", () => { const config = normalizeConfig({ masking: { minClearTokens: 1, keepRecentTurns: 1, minEntryTokens: 0, excludeTools: [] }, }); assert.equal(config.masking.minClearTokens, 1); assert.equal(config.masking.keepRecentTurns, 1); assert.equal(config.masking.minEntryTokens, 0); assert.deepEqual(config.masking.excludeTools, []); });