services/loop/compression
Context compression — preemptive and reactive summarization of middle messages. Moved from core/loop/compression.gleam (Stage 3). Uses service bundles instead of the monolithic LoopContext.
Values
pub fn do_compress(
compression: types.CompressionService,
chat_fn: fn(
client.Client,
List(message.Message),
List(tool_def.ToolDefinition),
) -> Result(response.ChatResponse, client.ClientError),
client: client.Client,
logger: types.LoggerBundle,
messages: List(message.Message),
cooldown_state: hooks.CooldownState,
protect_head: Int,
protect_tail: Int,
) -> #(List(message.Message), hooks.CooldownState)
Attempt to compress middle messages. Checks cooldown first; if cooling down, returns messages unchanged. On success, records success and returns compressed messages. On failure, records failure and returns original messages.