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

3 hours ago

Features

  • lossless: factor shared directory prefix in the grep search fold (#2547) (7dc9a97)
  • metrics: record per-extension token savings (#2371) (02eb90f)
  • opencode: ship the transport plugin in pip installs (#2601) (f54f04f)
  • opencode: support Copilot subscription backend for headroom models (#2441) (#2445) (9089e7f)
  • proxy/hooks: run fold-only (stream-safe) turn hooks on streaming OpenAI chat (#2549) (a6d4921)
  • proxy/savings: aggregate tool-schema savings into Metrics + all reporting sinks (#2546) (9f1ffef)
  • proxy: label GitHub Copilot traffic as "copilot" in the outcome… (#2377) (d7a8cdb)
  • proxy: make /v1/compress usable as a gateway/Kong sidecar (#2458) (1329ed7)
  • proxy: model-aware cold-prefix hook — reasoning compaction (Kimi/GLM) + cold recompaction (CC) (#2555) (cb8f4b6)
  • proxy: route selected external compressors through the content router (#2388) (e3c7964)
  • proxy: select built-in compressors via --compressor + registry inventory (#2373) (56c7d4a)
  • rust: add structured prose offload plumbing (#334) (#2378) (9e07785)
  • rust: port CodeCompressor AST compressor to Rust (parity-only) (#1154) (e530de5)
  • rust: port Kompress ML prose compressor to Rust (parity-only) (#1153) (83e27e5)
  • telemetry: record provider cache read/write/uncached tokens per request (#2450) (bec4cce)
  • transforms: add compressed signal + dispatch code_aware/html/diff via registry (#2400) (7ebda67)
  • transforms: add pluggable compressor registry + headroom.compressor entry point (#2370) (a02073e)
  • transforms: dispatch kompress/text via the compressor registry + forward question (#2411) (446ec26)
  • transforms: dispatch smart_crusher via the compressor registry (defer kompress/text ML boundary) (#2404) (7c7bf43)
  • transforms: make built-in compressors real Compressor implementations (adapters) (#2391) (981616c)
  • wrap: boost Serena — symbol-first guidance, wrap-time pre-index, repo-language scoping (#2425) (fd0e1a8)
  • wrap: default code-memory to Serena (dashboard browser off) behind unified --code-memory (#2413) (6e4425a)
  • wrap: reduce-at-source — SAFE quiet-CLI env defaults for the launched agent (#2548) (c990cfb)

Bug Fixes

  • backends/litellm: guard None completion_tokens in usage mapping (#2322) (44a174f)
  • backends: don't crash the OpenAI->Anthropic converter on empty choices (#2484) (43a7b57)
  • cache: preserve cache_control ttl when re-anchoring a breakpoint (#2651) (e0d2cd0)
  • cache: preserve client cache_control ttl when consolidating breakpoints (#2382) (8906d3a)
  • ccr: guard empty/malformed OpenAI choices in _extract_assistant_message (#2389) (89319fb)
  • ccr: sliding idle-window TTL with max-lifetime ceiling in the Rust core backends (#2604) (#2631) (e825588)
  • ci: align Ruff tooling versions (#2406) (2bb14d1)
  • cli: warn when Headroom proxy URL leaks into the shell after unwrap claude (#2238) (#2571) (904bc67)
  • codex: detect keyring-backed ChatGPT auth (#2478) (46293f4)
  • compression: report source-line span in CCR compression marker (#2597) (18e1c3c)
  • copilot: derive GHE credential host from API URL (#800) (#2511) (4a8157f)
  • copilot: normalize subscription API routing (#2441) (#2455) (2eca5ee)
  • copilot: preserve /v1 for the Anthropic /v1/messages endpoint (#2409) (#2414) (c400f90)
  • deps: bump mcp to 1.28.1 to clear 3 high-severity CVEs (#2348) (a90be94)
  • grok: preserve business-seat auth while routing only inference (#2514) (e4076bb)
  • image: reuse image models instead of rebuilding them per request (#2513) (#2536) (2a63ec7)
  • install: carry upstream-routing env overrides into supervised deployments (#2429) (170b04a)
  • install: default to cache mode, matching headroom proxy (#1893 follow-up) (#2563) (b121223)
  • install: migrate deployments off the retired chopratejas image repo (#2427) (17ff13c)
  • install: use CREATE_NO_WINDOW instead of DETACHED_PROCESS on Windows (#2527) (045f3df)
  • kompress: raise the default execution-slot wait (#2456) (5bd2266)
  • learn: detect the active OpenCode database (#2587) (f74d874)
  • learn: keep traceback tail in tool-error digest preview (#2596) (85e8699)
  • learn: treat unreadable candidate paths as absent in project decode (#2446) (a09ba6c)
  • mcp: pin mcp dependency to <2.0.0 to prevent server startup crash (#2642) (b3f016b)
  • proxy/cost: count Gemini thinking tokens in output usage (#2639) (22b707f)
  • proxy/cost: record each request's savings exactly once (drop 3 double-counts) (#2545) (0845b26)
  • proxy/cost: warn once per model when pricing lookup fails (#2504) (#2535) (fa47637)
  • proxy/gemini: None-guard token counts from usageMetadata (#2347) (f64aac9)
  • proxy/gemini: tolerate malformed parts on the compression path (#2486) (07cf547)
  • proxy/metrics: move the savings-ledger append off the event loop (#2439) (4aac068)
  • proxy/openai: cache under looked-up messages (#2420) (7052d52)
  • proxy/openai: don't record Codex WS savings without input accounting (#2493) (2195ba7)
  • proxy/openai: feed chat/completions traffic into the traffic learner (#2333) (6cdfd3f)
  • proxy/openai: None-guard usage token counts on the chat path (#2431) (313c290)
  • proxy/openai: replay incremental events in buffered Responses SSE (#2410) (#2415) (0cbc0e8)
  • proxy/output-shaping: tolerate a non-string system block text in steering (#2435) (3e97671)
  • proxy/perf: count turn-hook message folds in token accounting (#2520) (c371d5a)
  • proxy/perf: tokenizer-consistent token accounting + surface tool-schema savings (#2542) (1cc53c9)
  • proxy/streaming: tolerate malformed content in _response_to_sse (#2481) (77b26c0)
  • proxy: keep buffered CCR streams alive (#2479) (a2e42fb)
  • proxy: keep core tools and the client's ToolSearch resident for PascalCase clients (#2647) (1d29738)
  • proxy: offload OpenAI and Gemini tokenizer counting off the event loop (#2498) (806d2e4)
  • proxy: promote Kompress health after runtime load (#2402) (54526bc)
  • proxy: reassemble server_tool_use.input from streamed partial_json (#2449) (8c8fae0)
  • proxy: report deferred Kompress status and promote health from cache (#2564) (d50cfab)
  • proxy: skip max_tokens rename for backend-routed openai chat (#2401) (d6a1af4)
  • release: publish Windows wheel + sdist (disable PyPI attestations, #112) (#2405) (f9cbdd6)
  • release: sync generated version metadata on the release branch (#2659) (5383c6b)
  • rust: port CJK-aware relevance-query matching to CodeCompressor (#2634) (e86c639)
  • security: exclude compromised ast-grep-cli 0.44.1 (supply-chain trojan) (#2342) (494fb5a)
  • tokenizers: price Claude against a real BPE (tiktoken o200k) not a char estimate (#2543) (285176b)
  • transforms/cross-turn-dedup: don't renumber-fold zero-padded line prefixes (#2369) (f4070c4)
  • transforms/kompress-remote: keep compress fail-open on malformed 200 (#2320) (b759990)
  • wrap: emit bare dotted keys for Codex --config overrides (#2383) (f57e959)
  • wrap: make RTK opt-in (off by default) across wrap subcommands (#2344) (44136ed)
  • wrap: skip Serena project setup outside real project roots (#2574) (0994ea0)
  • wrap: stop same-port persistent routing during claude unwrap (#2340) (#2350) (cf5fa64)

Performance Improvements

  • content_router: dedupe content detection (#2419) (9b016f2)

Dependencies

  • bump the cargo-minor-patch group with 10 updates (#2284) (3266ed7)
  • bump the npm-minor-patch group across 3 directories with 7 updates (#2276) (961866b)

Code Refactoring

  • transforms: dispatch simple built-in strategies via the compressor registry (#2399) (fc9c63f)
  • wrap: retire tokensave; Serena is the code-memory MCP (#2499) (5d23a0a)

Don't miss a new headroom release

NewReleases is sending notifications on new releases.