github headroomlabs-ai/headroom v0.42.0
Release v0.42.0

4 hours ago

0.42.0 (2026-10-26)

Features

  • pipeline: put per-request saved tokens on OutcomeSnapshot (#4231) (8cedf7b)
  • proxy: let turn hooks rewrite OpenAI Responses requests on HTTP and WebSocket (#4232) (fbf7bc3)
  • proxy: report the same tool savings on gateway /v1/compress as the proxy path (#4467) (a904210)
  • savings: add the per-request counterfactual savings record (#4236) (2912b7b)

Bug Fixes

  • batch: preserve live contexts during capacity cleanup (#4210) (2cbdd22)
  • batch: preserve native Gemini continuation tools (#4211) (8757458)
  • cache: bound the router's compression cache, keep the rest in SQLite (#4357) (b196424)
  • cache: keep indented lines intact in OpenAI whitespace normalization (#4343) (2480100)
  • cache: keep prefix-tracker state across a graceful proxy restart (#4299) (62b3bed)
  • ccr: recognize client-owned MCP retrieval aliases (#4165) (89545fb)
  • ccr: stream the buffered CCR upstream request so idle-killing networks cannot cut it (#4206) (ca6ba34)
  • ci: pin checkout in release notification smoke workflow (#4399) (70273db)
  • copilot: detect COPILOT_API_URL in cli-main.js for Copilot CLI >= 1.0.93 (#4450) (043fe09)
  • copilot: preserve native inline OAuth identity (#4144) (ad62166)
  • deps: bump rustls to 0.23.46 for RUSTSEC-2026-0346..0349 (#4222) (132dbc7)
  • deps: patch OpenClaw Undici and narrow E2E audit exceptions (#4453) (1be699f)
  • deps: require hf-xet>=1.6.0 so a Hub download can't crash Python at exit (#4192) (9e5dac7)
  • deps: require mcp>=1.30.0 for CVE-2026-59951 (#4239) (2f7a83a)
  • gateway: keep input_includes_cache when re-drive usage is merged (#4423) (3f94144)
  • gemini: keep snake_case inline_data and function parts when compressing (#4290) (4bf1bf5)
  • image: clear last_result before each compress() call (#4341) (19c91a8)
  • image: flatten transparent images onto white before re-encoding as JPEG (#4296) (9f5cfcf)
  • install: keep the HuggingFace cache on a writable mount in Docker presets (#4207) (#4209) (7b6cb77)
  • kompress: skip the local model download when a remote endpoint is set (#4234) (ff36931)
  • kompress: time each model-load stage and stop false not-ready warnings during warm-up (#4195) (89b229c)
  • learn: anchor the managed block on its last start marker, append when no end marker (#4342) (45dacc1)
  • learn: keep the digest's loop section inside its budget (#4269) (506ba16)
  • logs: count omitted levels from dropped lines (#4141) (023dd1b)
  • mcp: accept the JSONC opencode config that wrap and install already accept (#4297) (9202948)
  • memory: bound retrieval queries before embedding (#4244) (8c07cf4)
  • memory: ignore incidental cwd prose (#4166) (3765439)
  • memory: log storage and SQLite failures that currently make retrieval miss silently (#4111) (4e6e955)
  • memory: resolve partial IDs beyond the first 1000 records (#4389) (c4ea31b)
  • memory: treat a cwd with no UTF-8 form as unresolved instead of raising (#4167) (760c05e)
  • openai: read Responses cache_write_tokens instead of inferring writes (#4237) (4630602)
  • openai: recompress cached Responses units whose CCR entries expired (#4146) (8f7b419)
  • opencode: do not rewrite an OpenCode config that fails to parse (#4424) (0fe0a59)
  • opencode: restore process env keys on transport dispose (#4430) (d17bac8)
  • pricing: suppress litellm's Provider List banner that corrupts perf JSON (#4197) (e01ad35)
  • proxy: accept HEADROOM_MEMORY_INJECTION_MODE=tool (#4395) (f89c928)
  • proxy: bound per-model state keyed by the client model string (#4407) (33e5f67)
  • proxy: copy cached tool compaction results (hardening) (#4410) (a256231)
  • proxy: count output tokens from CRLF-framed SSE streams too (#4298) (755293d)
  • proxy: do not rebuild a failed turn-hook re-drive as HTTP 200 (#4398) (f59c8ff)
  • proxy: drop web_search_call history from a Responses request with no web_search tool (#4202) (2a70d12)
  • proxy: honor bypass header and license gate in Anthropic batch create (#4411) (4fd9cdd)
  • proxy: import Response at runtime in the Bedrock handler (#4397) (51e4ae3)
  • proxy: judge NAT64 upstream addresses by their embedded IPv4 (#4179) (486afaa)
  • proxy: keep in-period costs in the budget ledger when the entry cap is reached (#4448) (41c15b3)
  • proxy: keep negative compression savings across restart (#4406) (bebe24c)
  • proxy: keep tool deferral for GitHub Copilot upstream (#4356) (217b658)
  • proxy: let HEADROOM_LOG_LEVEL=debug turn on Headroom's own debug logs (#4137) (00093ce)
  • proxy: make handler failures debuggable from the logs (#4127) (7dc20b6)
  • proxy: net tools a turn hook adds against the saving it books (#4057) (85520c2)
  • proxy: record a stream the client closes after its terminal event as completed (#4286) (762a337)
  • proxy: record outcome when a passthrough stream ends mid-character (#4429) (75cfbba)
  • proxy: report disabled Kompress at startup (#4217) (430ea4f)
  • proxy: report read maturation as inert in cache mode (#4198) (ba82453)
  • proxy: show turn-hook savings in /stats extension_savings, incl. Codex WS (#4233) (1d112cd)
  • proxy: snapshot the original messages when a turn hook can edit them (#4241) (df11f27)
  • relevance: load the default embedder from one pinned snapshot (#4152) (f380692)
  • savings: key a Responses conversation on its thread, not the shared session (#4440) (11f743d)
  • sdk: preserve Vercel AI SDK file and image parts through compression (#4048) (1668a6c)
  • security: restrict the Windows runtime log via NTFS ACL, not just warn (#4135) (125a703)
  • smart-crusher: match audit-safe protected_patterns against unescaped text (#4294) (e11afdb)
  • storage: normalize timezone-aware JSONL time filters (#4063) (bf34ccf)
  • tabular: pass tables with repeated header names through verbatim (#4278) (ed3195b)
  • telemetry: give empty-item compressions a stable tool signature (#4396) (a79def4)
  • telemetry: let HEADROOM_TELEMETRY=off stop the anonymous beacon (#4235) (1a40b3c)
  • transforms: keep the fences of a code block passed through for a protected tag (#4292) (02958c6)
  • transforms: log the compression failures that silently become "no savings" (#4092) (580cc83)
  • zcode: skip providers that point at the Headroom proxy itself (#4413) (9ac1b52)

Dependencies

  • Bump base64 from 0.22.1 to 0.23.1 (#4029) (8d468d4)
  • Bump ruff from 0.16.8 to 0.17.0 in the pip-minor-patch group across 1 directory (#4026) (de3f639)
  • Bump the cargo-minor-patch group across 1 directory with 12 updates (#4186) (683c9a6)
  • Bump the npm-minor-patch group across 2 directories with 16 updates (#4218) (07c8bbf)
  • Bump the npm-minor-patch group across 3 directories with 12 updates (#4219) (1f71cb3)
  • Update huggingface-hub requirement from <2.0,>=1.5.0 to >=1.5.0,<3.0 (#4027) (fcf3db8)

Code Refactoring

  • integrations: share the local/cloud compress backend of asgi and litellm_callback (#4124) (58caafb)
  • transforms: share one CCR persist helper for the Rust-backed compressors (#4094) (ea947ca)

Headroom for Teams: 3 months of Headroom Enterprise free with a 12-month plan. Claim the perk →

Don't miss a new headroom release

NewReleases is sending notifications on new releases.