github tombii/better-ccflare v3.5.0
Stable Release v3.5.0

5 hours ago

🎉 Stable Release v3.5.0

Multi-Architecture Binaries

Download the appropriate binary for your platform:

  • Linux x86_64: better-ccflare-linux-amd64
  • Linux ARM64 (Raspberry Pi 3/4/5, Oracle Cloud ARM, AWS Graviton): better-ccflare-linux-arm64
  • macOS Intel: better-ccflare-macos-x86_64
  • macOS Apple Silicon: better-ccflare-macos-arm64
  • Windows x86_64: better-ccflare-windows-x64.exe

Installation

# Linux x86_64
wget https://github.com/tombii/better-ccflare/releases/download/v3.5.0/better-ccflare-linux-amd64
chmod +x better-ccflare-linux-amd64
./better-ccflare-linux-amd64

# macOS Apple Silicon (ARM64)
curl -L -o better-ccflare-macos-arm64 https://github.com/tombii/better-ccflare/releases/download/v3.5.0/better-ccflare-macos-arm64
chmod +x better-ccflare-macos-arm64
xattr -d com.apple.quarantine better-ccflare-macos-arm64  # Required for unsigned binaries
./better-ccflare-macos-arm64

macOS Users: The xattr command is required to bypass Gatekeeper for unsigned binaries. If you prefer not to run unsigned binaries, install from source instead.

Or install via npm: npm install -g better-ccflare@v3.5.0


What's Changed

⚠️ Breaking Changes

Empty pool now returns 503 from proxy instead of forwarding unauthenticated to Anthropic (misleading 401). Clients expecting old behavior can set CCFLARE_PASSTHROUGH_ON_EMPTY_POOL=1.- fix: YAML syntax error in release workflow breaking change section [skip-version] (eddf513)

🚀 Features

  • feat: gate ?detail=1 behind HEALTH_DETAIL_ENABLED setting (default: off) (016389a)
  • feat: doctor command + integrity telemetry (#179) (141f6e3)
  • feat: add 2s TTL cache to /health endpoint (#185) (35e2b5a)
  • feat: report pool status in /health endpoint with three-state logic (4ade5e3)
  • feat: add configurable usage throttling (preserve peakHoursPause) (4bf9b5c)
  • feat: return 503 when proxy pool is exhausted (#175) (8436a9d)
  • feat: return 503 for degraded/unhealthy status, add HTTP status tests (89f3359)
  • feat: port reasoning effort + count_tokens + non-streaming (PR #172) (fcc01e8)

🐛 Bug Fixes

  • fix: add SQL-level race guard to peak-hours pause UPDATE (05a1682)
  • fix: pass through unknown Codex model names (0b054bf)
  • fix: add rate limit audit trail (issue #178) (0b17a32)
  • fix: remove verbose JSDoc, assert rate_limited_until null for available accounts in test (0ce906e)
  • fix: null rate_limited_until for paused accounts in detail mode, fix test description (0dfb7c5)
  • fix: backup db on schema migrations, skip invalid paths [skip-version] (0e4ad75)
  • fix: sync PostgreSQL migrations with SQLite schema (issue #189) (1bddbe9)
  • fix: add Claude Opus 4.7 model ID [skip-version] (215baed)
  • fix: use actual calendar month duration for monthly pacing (264fcf9)
  • fix: use nullish coalescing for rate_limited_until (2862e91)
  • fix: revert count_tokens acceptance in Codex and remove redundant normalizeUsage (2bb0d55)
  • fix: stream SSE incrementally in transformSseResponseToJson, fix downgrade label (304a4df)
  • fix: expose Codex context window in streaming responses (3941c3a)
  • fix: address Greptile round-2 — warn level, source model excluded, ?? operator (407e2c5)
  • fix: narrow payload fetch catch to 404-only, import HttpError from http-common [skip-version] (4533e17)
  • fix: use union type for AccountDetail.status (4e8caa2)
  • fix: address PR #183 review feedback — type safety and consistency (5ddc762)
  • fix: skip premature content_block_stop when function-call block is still open (60da65a)
  • fix: preserve content block order in transformSseResponseToJson (6398a26)
  • fix: address PR #183 review — log timing, safe reason validation, formatter (663e212)
  • fix: restore peak_hours_pause_enabled in SELECT and fix AnyUsageData cast (6f102be)
  • fix: cast closure-assigned payloads to suppress TS never narrowing (7354ed1)
  • fix: address Greptile review — leak, dead var, dedup, source model fallback (83775ed)
  • fix: address PR #177 review feedback (86185d7)
  • fix: return full health response when detail=1 but HEALTH_DETAIL_ENABLED is off (95faf3e)
  • fix: narrow AccountDetail.rate_limited_reason to RateLimitReason union type (a4c6551)
  • fix: eliminate double filter in computePoolStatus, clear expired rate_limited_until in detail mode (b4c11a3)
  • fix: replace remaining sanitizeProxyHeaders calls with sanitizeResponseHeaders (be1d2e2)
  • fix: add missing getActiveComboForFamily mock to throttling test (c313017)
  • fix: add -- to printf calls to prevent format-as-option error [skip-version] (c6e2079)
  • fix: restore log message, thread actual model from response.created (c7a9fe8)
  • fix: align client monthly window calculation with server UTC math (d17a600)
  • fix: refetch request payload in details modal when missing (d43c52f)
  • fix: inject stream-intent headers into response, fix swept-entry fallback (d7d4c5c)
  • fix: sync in-memory Account cooldown state with async DB writes (#184) (d869e06)
  • fix: strip internal proxy headers from Codex responses and use null sentinel for delta usage (d989676)
  • fix: derive Codex context window from model metadata (db73829)
  • fix: drop unused role var, clarify intentional stream:true hardcode (dccc285)
  • fix: correct monthly window calculation and scheduler race condition (eb03294)
  • fix: YAML syntax error in release workflow breaking change section [skip-version] (eddf513)
  • fix: use >= now boundary to match isAccountAvailable semantics (f9031c4)
  • fix: ensureMessageStart before content_block_start, document sourceModel intent (f926c3f)
  • fix: fix audit trail test mocks in proxy-operations-failover (fd55dba)
  • fix: OpenAI converter compatibility fixes (#173) (fd67a93)
  • fix: call runtime health functions once to prevent contradictory status/runtime fields (ffe5ed9)

🔧 Improvements

  • refactor: extract throttle utilities to shared package (3862593)
  • improve: add breaking change detection and conditional version bumps [skip-version] (567ca2e)
  • improve: apply biome formatting fixes across multiple files [skip-version] (8e5d586)

Full Changelog

📋 Compare with previous version

Don't miss a new better-ccflare release

NewReleases is sending notifications on new releases.