Skip to content

Release v0.31.0

Latest

Choose a tag to compare

@chopratejas chopratejas released this 09 Jul 15:19
55efb1c

What's Changed

  • fix(dashboard): price proxy savings without litellm by @rodboev in #1728
  • fix(proxy): surface codex websocket loop failures in livez by @rodboev in #1727
  • fix(savings): guard non-finite numeric coercion by @inix-x in #1769
  • feat(content-router): accept any real compression (remove min-savings floor) by @chopratejas in #1771
  • fix(content-router): token-measure lossless folds at the acceptance gate by @chopratejas in #1772
  • fix(opencode): expose headroom/* models in injected provider config by @Parideboy in #1716
  • Wire OpenAI Responses output shaping by @amcfague in #1438
  • perf(proxy): cap compression workers to CPU count by @rodboev in #1803
  • fix(proxy): bound Codex WS compression fallback latency by @rodboev in #1802
  • fix(transforms): normalize diff compressor context by @rodboev in #1801
  • feat(proxy): add provider-only HTTP proxy by @amcfague in #1807
  • perf(savings): batch tracker persistence off the request hot path by @inix-x in #1817
  • fix(dashboard): deduplicate repeated savings metrics by @rodboev in #1804
  • fix(opencode): use local MCP config by @rudironsoni in #1383
  • fix(copilot): normalize subscription routing host by @rodboev in #1836
  • fix(proxy): cancel retry backoff on shutdown by @rodboev in #1834
  • feat(content-router): lossless-first dispatch, cross-turn dedup, and A7 lossy-after-fold by @chopratejas in #1818
  • fix(proxy): strip 1m model suffix before upstream forwarding by @aivinay in #1840
  • fix(docker): persist headroom workspace in compose by @aivinay in #1839
  • fix: detect and clear stale ANTHROPIC_BASE_URL from crashed wrap sessions (#1768) by @Parideboy in #1837
  • fix(proxy): freeze must forward cached (compressed) prefix byte-identical — stop token-mode cache busting by @chopratejas in #1850
  • fix(build): enable Intel macOS pip installs via ort-load-dynamic by @2rob in #1538
  • fix(proxy): retry passthrough on transient upstream connection close by @gaurav0107 in #1513
  • fix(proxy): keep cache_control bounded + stable so the freeze overlay stops busting by @chopratejas in #1852
  • fix(proxy/openai): thread savings-profile kwargs into chat completions by @abhay-codes07 in #1606
  • fix(proxy): retry HTTP/2 stream resets instead of 502ing by @tenderdeve in #1645
  • fix(codex): OpenCode Zen telemetry attribution by @aivinay in #1648
  • fix(proxy): persist lifetime cache-read savings across restarts by @inix-x in #1665
  • fix: correct Go AST compression bugs and CODE_AWARE token accounting by @shekharcharles in #1668
  • fix(install): persist --no-http2 override through install apply by @rodboev in #1676
  • fix(wrap): replace stale-proxy detection with Vite-style port fallback by @lennney in #1406
  • fix(proxy): stop rtk stat failures from corrupting session baseline by @inix-x in #1693
  • fix(rtk): link managed rtk onto PATH instead of mutating the hook by @tenderdeve in #1698
  • fix(install): pass sc.exe create as raw command line so binPath= quoting survives (#1654) by @Parideboy in #1702
  • docs: add pipeline-extension recipe and x-headroom-base-url routing docs by @Parideboy in #1712
  • fix(transforms): pass through ragged tables instead of misaligning columns by @Parideboy in #1713
  • fix(proxy): bound HF tokenizer load and offload token counting off event loop by @Parideboy in #1738
  • fix(content-detector): detect and compress space-separated JSON objects by @rohanprichard in #1742
  • fix(code-compressor): CJK-aware relevance-query symbol matching by @lifeodyssey in #1747
  • docs(readme): correct lean-ctx comparison row by @ketpatil77 in #1754
  • [codex] docs: remove retired IntelligentContext copy by @ketpatil77 in #1756
  • [codex] docs: add Codex install note by @ketpatil77 in #1757
  • docs(readme): update lean-ctx comparison row by @Parideboy in #1711
  • [codex] docs: add pipeline extension recipe by @ketpatil77 in #1758
  • fix(proxy/openai): translate max_tokens -> max_completion_tokens on chat path by @chopratejas in #1774
  • fix(ccr): make expired retrieve misses terminal by @rodboev in #1781
  • fix(toin): publish skip compression recommendations by @rodboev in #1782
  • fix(proxy): preserve streaming passthrough beta headers by @rodboev in #1783
  • fix(mcp): surface dead proxy state by @rodboev in #1786
  • fix(proxy): subtract cache write premiums from net savings by @rodboev in #1800
  • fix(streaming): preserve server_tool_use sse blocks by @rodboev in #1826
  • fix(cache): avoid fallback session collisions by @rodboev in #1827
  • Install using uv tool globally by @burkestar in #1829
  • agent_savings: don't crash the proxy on an unknown savings profile by @gglucass in #1830
  • fix: use rtk native Cursor hook instead of injecting .cursorrules (#756) by @Parideboy in #1846
  • fix(proxy): serve /favicon.ico locally instead of tunneling upstream (#1787) by @Parideboy in #1847
  • fix(proxy): release _active_streams session lock on setup-phase errors by @orty in #1864
  • fix(router): honor MCP aliases in excluded tools (#1822) by @aivinay in #1863
  • fix(learn): decode Windows drive-style project dirs with dotted usernames by @Parideboy in #1855
  • docs(orchestration): guide repeated agent wakes with CCR by @rodboev in #1871
  • docs: retire IntelligentContext from README and installation guide by @bhavyachopra99 in #1445
  • fix(proxy): fsync savings dir after atomic rename by @inix-x in #1764
  • fix(copilot): route mixed-model requests per model by @rodboev in #1785
  • fix(docker): report source build version by @aivinay in #1862
  • feat(cache): provider-agnostic cache-mode delta + cc-agnostic prefix comparison by @chopratejas in #1868
  • Tejas/tool search deferral by @chopratejas in #1885
  • fix(proxy): route Foundry Anthropic messages by @aivinay in #1878
  • fix(proxy): compress Anthropic user text blocks when enabled by @julienguarino in #1875
  • fix(codex): discover updated Codex state stores by @rodboev in #1889
  • fix(mcp): isolate ClaudeRegistrar CLI config env by @rodboev in #1888
  • fix(memory): resolve Trae cwd metadata from user reminders (#1737) by @rodboev in #1887
  • feat(proxy): add turn-hook extension point for buffered model turns by @chopratejas in #1891
  • fix(dashboard): distinguish unavailable RTK from zero stats in Docker by @rodboev in #1900
  • fix(ccr): preserve thinking blocks in buffered stream re-synthesis by @rodboev in #1897
  • fix(ccr): preserve Anthropic re-stream shape by @eggrollofchaos in #1854
  • fix(evals): default unparseable judge scores below pass threshold by @rodboev in #1892
  • deps: bump the cargo-minor-patch group across 1 directory with 7 updates by @dependabot[bot] in #1909
  • deps: bump the npm-minor-patch group across 4 directories with 18 updates by @dependabot[bot] in #1907
  • fix(dashboard): distinguish unavailable RTK from zero stats in Docker by @rodboev in #1901
  • feat(compression): add audit-safe mode with protected pattern matching by @rodboev in #1899
  • fix(cli/proxy): preserve explicit HEADROOM_MIN_TOKENS=0 / MAX_ITEMS=0 by @abhay-codes07 in #1886
  • feat(ccr): wire retrieve-tool interception into OpenAI Responses handler by @rodboev in #1898
  • chore: sync version state to released 0.30.0 to unblock release-please by @chopratejas in #1916
  • ci(devcontainers): free runner disk on the default variant too by @chopratejas in #1917
  • chore: release main by @github-actions[bot] in #1918
  • Tejas/turn hooks extension by @chopratejas in #1903
  • feat: ship the coding profile as Headroom's out-of-box default posture by @chopratejas in #1893
  • fix(proxy): keep OpenAI tool observations mutable in cache mode by @JerrettDavis in #1884

New Contributors

Full Changelog: v0.30.0...v0.31.0