From 29c92c38fbdf94560332cdfc03843540b241e842 Mon Sep 17 00:00:00 2001 From: oyi77 Date: Mon, 27 Apr 2026 03:52:39 +0700 Subject: [PATCH] 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 --- .../services/compression/strategySelector.ts | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 open-sse/services/compression/strategySelector.ts diff --git a/open-sse/services/compression/strategySelector.ts b/open-sse/services/compression/strategySelector.ts new file mode 100644 index 0000000000..0b89a32651 --- /dev/null +++ b/open-sse/services/compression/strategySelector.ts @@ -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, + 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 }; +}