feat(compression): implement strategy selector logic

Add selectCompressionStrategy(), getEffectiveMode(), checkComboOverride(), shouldAutoTrigger(), applyCompression(). Priority chain: combo override > auto-trigger > default mode > off. Dispatches to lite compression for Phase 1; standard/aggressive/ultra return unchanged body.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
oyi77
2026-04-27 03:52:39 +07:00
parent cb89abc53a
commit 29c92c38fb

View File

@@ -0,0 +1,51 @@
import type { CompressionConfig, CompressionMode, CompressionResult } from "./types";
import { applyLiteCompression } from "./lite";
export function checkComboOverride(
config: CompressionConfig,
comboId: string | null
): CompressionMode | null {
if (!comboId || !config.comboOverrides) return null;
return config.comboOverrides[comboId] ?? null;
}
export function shouldAutoTrigger(config: CompressionConfig, estimatedTokens: number): boolean {
return config.autoTriggerTokens > 0 && estimatedTokens >= config.autoTriggerTokens;
}
export function getEffectiveMode(
config: CompressionConfig,
comboId: string | null,
estimatedTokens: number
): CompressionMode {
if (!config.enabled) return "off";
const comboMode = checkComboOverride(config, comboId);
if (comboMode) return comboMode;
if (shouldAutoTrigger(config, estimatedTokens)) return "lite";
return config.defaultMode;
}
export function selectCompressionStrategy(
config: CompressionConfig,
comboId: string | null,
estimatedTokens: number
): CompressionMode {
return getEffectiveMode(config, comboId, estimatedTokens);
}
export function applyCompression(
body: Record<string, unknown>,
mode: CompressionMode,
options?: { model?: string }
): CompressionResult {
if (mode === "off") {
return { body, compressed: false, stats: null };
}
if (mode === "lite") {
return applyLiteCompression(body, options);
}
return { body, compressed: false, stats: null };
}