diff --git a/.github/release-please-manifest.json b/.github/release-please-manifest.json index c41415c5ec..4d625b2f88 100644 --- a/.github/release-please-manifest.json +++ b/.github/release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.23.0" + ".": "1.24.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index ade8935ba1..6440fed74c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,96 @@ # Changelog +## [1.24.0](https://github.com/Soju06/codex-lb/compare/v1.23.0...v1.24.0) (2026-08-18) + + +### Features + +* **api-keys:** allow per-key reasoning effort policies ([#1642](https://github.com/Soju06/codex-lb/issues/1642)) ([ed31b7d](https://github.com/Soju06/codex-lb/commit/ed31b7da3d225aac30fc42c7c0d128f10955b58e)) +* **db:** report SQLite write transactions that outlive the busy timeout ([#1752](https://github.com/Soju06/codex-lb/issues/1752)) ([6464e96](https://github.com/Soju06/codex-lb/commit/6464e96f78bdc62c643d9285143b72152e9a0742)) +* **model-sources:** advertise operator-declared reasoning efforts ([#1661](https://github.com/Soju06/codex-lb/issues/1661)) ([f1c8d5c](https://github.com/Soju06/codex-lb/commit/f1c8d5cd19947d76191fea8da8c07a69df493f83)) +* **proxy:** report websocket cleanup phase ([#1726](https://github.com/Soju06/codex-lb/issues/1726)) ([0c8d921](https://github.com/Soju06/codex-lb/commit/0c8d921906735352ef60c0a445be455daa35249d)) +* **proxy:** support Ultrafast service tier ([#1734](https://github.com/Soju06/codex-lb/issues/1734)) ([d522a4d](https://github.com/Soju06/codex-lb/commit/d522a4de0740b530b22775ed6d2fe3959e3ca178)) +* **reports:** Add API Key Filtering to Reports Dashboard ([#1728](https://github.com/Soju06/codex-lb/issues/1728)) ([1f65f80](https://github.com/Soju06/codex-lb/commit/1f65f8093458d551979bd237d8304ed70b50c390)) +* **reset-credits:** add refresh scheduler enable toggle ([#1701](https://github.com/Soju06/codex-lb/issues/1701)) ([6509dd0](https://github.com/Soju06/codex-lb/commit/6509dd0d4a577908e5940f35ba4c5ab6d66f23bc)) +* **telemetry:** anonymous usage telemetry with informed opt-out consent ([#1618](https://github.com/Soju06/codex-lb/issues/1618)) ([debd7cf](https://github.com/Soju06/codex-lb/commit/debd7cf63c173e1e7b2982ff171bf1564c150c5a)) +* **ui:** customize dashboard request-log columns ([#1503](https://github.com/Soju06/codex-lb/issues/1503)) ([138aa9f](https://github.com/Soju06/codex-lb/commit/138aa9f15c6ebea998335afae06475d8834fe7d6)) +* **ui:** surface reasoning token usage ([#1801](https://github.com/Soju06/codex-lb/issues/1801)) ([8e7589e](https://github.com/Soju06/codex-lb/commit/8e7589e4286869b9030eb1b19726297c63852ed3)) + + +### Bug Fixes + +* **accounts:** recover Free accounts after reset ([#1700](https://github.com/Soju06/codex-lb/issues/1700)) ([b43d0c8](https://github.com/Soju06/codex-lb/commit/b43d0c8bb3101932436dc9ff6fadb9034b4d3b03)) +* **auth:** guard the refresh singleflight negative cache by successor ownership ([#1652](https://github.com/Soju06/codex-lb/issues/1652)) ([4ace71e](https://github.com/Soju06/codex-lb/commit/4ace71e8044e5180905f7a53f2d00d010cd43233)) +* **cache:** keep an aborted invalidation bump queued ([#1748](https://github.com/Soju06/codex-lb/issues/1748)) ([7148810](https://github.com/Soju06/codex-lb/commit/71488100f71b5b132ed9c86b8cddbb63991842a9)) +* **chat:** omit unset tools on mapped Responses payloads ([#1725](https://github.com/Soju06/codex-lb/issues/1725)) ([db5776c](https://github.com/Soju06/codex-lb/commit/db5776c288b5c709d665c1dcaa9298ae8c390e6a)) +* **compact:** omit oversized non-state tool tail ([#1235](https://github.com/Soju06/codex-lb/issues/1235)) ([edb3734](https://github.com/Soju06/codex-lb/commit/edb37348f19a5015c3b90e0509ed92179e3716da)) +* **compact:** recover previous-response-pinned compaction from quota-excluded owners ([#1780](https://github.com/Soju06/codex-lb/issues/1780)) ([120af75](https://github.com/Soju06/codex-lb/commit/120af7520cae7d51fb66c731d9d4578e416ce93f)) +* **dashboard:** distinguish first-run empty states from filter mismatch ([#1729](https://github.com/Soju06/codex-lb/issues/1729)) ([e439043](https://github.com/Soju06/codex-lb/commit/e439043d4ad2869ca992d3d9bbb632b814406013)) +* **dashboard:** exclude cancelled/client_disconnected from error rate ([#1696](https://github.com/Soju06/codex-lb/issues/1696)) ([8a7d956](https://github.com/Soju06/codex-lb/commit/8a7d9560571478a435f66f082b7656a6e9313f14)) +* **dashboard:** pin web asset MIME types against poisoned OS registries ([#1709](https://github.com/Soju06/codex-lb/issues/1709)) ([2164b8c](https://github.com/Soju06/codex-lb/commit/2164b8c0656b3a8539ccdf8a4a8655a788af9ae8)), closes [#1698](https://github.com/Soju06/codex-lb/issues/1698) +* **dashboard:** preserve cancelled request count ([#1766](https://github.com/Soju06/codex-lb/issues/1766)) ([ef9c68e](https://github.com/Soju06/codex-lb/commit/ef9c68e0fbc553ff83c374e4dcb7a3c079b163a9)) +* **dashboard:** separate quota and purchased credits ([#1670](https://github.com/Soju06/codex-lb/issues/1670)) ([4a08d96](https://github.com/Soju06/codex-lb/commit/4a08d968f34aeec423892c02775769335590619f)) +* **dashboard:** show cancellation totals in reports ([#1772](https://github.com/Soju06/codex-lb/issues/1772)) ([5d27f7f](https://github.com/Soju06/codex-lb/commit/5d27f7f0cc2fea37ce2e3786ea08660f008dd694)) +* **dashboard:** show cancelled request logs ([#1769](https://github.com/Soju06/codex-lb/issues/1769)) ([5f2f726](https://github.com/Soju06/codex-lb/commit/5f2f7266163f93b8fe5df6295fae6342bc51945b)) +* **dashboard:** surface upstream route metadata ([#1767](https://github.com/Soju06/codex-lb/issues/1767)) ([e359d49](https://github.com/Soju06/codex-lb/commit/e359d490befc87d27f198b528a67685ee7a8503e)) +* **db:** add postgres shm_size and raise default pool headroom ([#1791](https://github.com/Soju06/codex-lb/issues/1791)) ([539cf93](https://github.com/Soju06/codex-lb/commit/539cf934ea654efbc915bad17ea84a87c07afa4d)) +* **db:** bound wedged SQLite session teardown and reclaim the connection ([#1778](https://github.com/Soju06/codex-lb/issues/1778)) ([9eedb2c](https://github.com/Soju06/codex-lb/commit/9eedb2c8f4aa809715484e1c7607e6f0219b4ccf)) +* **docker:** upgrade util-linux family in runtime image for CVE-2026-53615 ([#1796](https://github.com/Soju06/codex-lb/issues/1796)) ([0a4c0a1](https://github.com/Soju06/codex-lb/commit/0a4c0a1071cfe2e91357d8dc34b433cb511b1aec)) +* **http-bridge:** dedupe retry circuit failures per send ([#1743](https://github.com/Soju06/codex-lb/issues/1743)) ([5780a27](https://github.com/Soju06/codex-lb/commit/5780a27f8c77f033ece2d144cb25ff89fb9db679)) +* **http-bridge:** keep idle retirements out of retry circuit ([#1677](https://github.com/Soju06/codex-lb/issues/1677)) ([7c46719](https://github.com/Soju06/codex-lb/commit/7c4671980094135b9094278d2ebb374c7cb22655)) +* **http-bridge:** preserve goal-restart recovery across reconnects ([#1680](https://github.com/Soju06/codex-lb/issues/1680)) ([5dc6081](https://github.com/Soju06/codex-lb/commit/5dc6081e41b7abe8670ea4565758246ef9f173b9)) +* **http-bridge:** refuse foreign claims on live DRAINING leases ([#1722](https://github.com/Soju06/codex-lb/issues/1722)) ([b50cb86](https://github.com/Soju06/codex-lb/commit/b50cb86659f0cebdc4abd8e200556a54e62e17da)) +* **models:** correct GPT-5.6 context windows ([#1691](https://github.com/Soju06/codex-lb/issues/1691)) ([8488bc4](https://github.com/Soju06/codex-lb/commit/8488bc462a46be07ae70f805ff6bf351f0ba4d97)) +* **proxy:** abandon unavailable owner on thread-scoped goal restart ([#1764](https://github.com/Soju06/codex-lb/issues/1764)) ([17ae866](https://github.com/Soju06/codex-lb/commit/17ae866e2f6fd3d2daa1f1c4a0b2a8d0a5d2f25b)) +* **proxy:** add explicit Daybreak capability routing ([#1742](https://github.com/Soju06/codex-lb/issues/1742)) ([0031e3d](https://github.com/Soju06/codex-lb/commit/0031e3d468747d63d8573139eabcaa0594891aef)) +* **proxy:** close non-stream chat collect and map error status ([#1712](https://github.com/Soju06/codex-lb/issues/1712)) ([a85f71d](https://github.com/Soju06/codex-lb/commit/a85f71dbec6f56d417bd663c3e63e7431267554e)) +* **proxy:** compact transport switch + trigger canonicalization (supersedes [#1749](https://github.com/Soju06/codex-lb/issues/1749)) ([#1809](https://github.com/Soju06/codex-lb/issues/1809)) ([0481ed9](https://github.com/Soju06/codex-lb/commit/0481ed996ab128ae67ff311a9c69699e98890d7b)) +* **proxy:** complete disconnect cleanup — pool leak, charged reservation, mutable terminal reason ([#1645](https://github.com/Soju06/codex-lb/issues/1645)) ([6cf7e61](https://github.com/Soju06/codex-lb/commit/6cf7e61d7719654a62fb3132a21ae5f19ad8dba1)) +* **proxy:** do not rewrite thread locality for a file-pin owner ([#1765](https://github.com/Soju06/codex-lb/issues/1765)) ([34ef7b2](https://github.com/Soju06/codex-lb/commit/34ef7b262ecabc597be0c7dd73978dc24973ee82)) +* **proxy:** durably recover hard HTTP bridge operations ([#1657](https://github.com/Soju06/codex-lb/issues/1657)) ([7a0b671](https://github.com/Soju06/codex-lb/commit/7a0b67192140ab307b911719189c52f4fa87033d)) +* **proxy:** fence successor bridge claims against the retiring predecessor ([#1751](https://github.com/Soju06/codex-lb/issues/1751)) ([2c0dc5b](https://github.com/Soju06/codex-lb/commit/2c0dc5b8eec16d3e8c413f144cd62c583f43847d)) +* **proxy:** hold fenced hard turns through cooldown ([#1739](https://github.com/Soju06/codex-lb/issues/1739)) ([6ff51cd](https://github.com/Soju06/codex-lb/commit/6ff51cd69c564499e4371ee755eecab8d80b262d)) +* **proxy:** keep abrupt eventless websocket drops account-neutral ([#1777](https://github.com/Soju06/codex-lb/issues/1777)) ([6c97ad6](https://github.com/Soju06/codex-lb/commit/6c97ad6265100c4ac3489e15a247d73ab45866fb)) +* **proxy:** keep file-pin owner on soft 1011 reconnect ([#1761](https://github.com/Soju06/codex-lb/issues/1761)) ([f694c44](https://github.com/Soju06/codex-lb/commit/f694c449479dd1b204e93ee27bf599f9a5c6b86c)) +* **proxy:** keep stream idle timeouts account-neutral ([#1718](https://github.com/Soju06/codex-lb/issues/1718)) ([64da340](https://github.com/Soju06/codex-lb/commit/64da340ab72580d8762ba9cda8a1fed9c9bb30be)) +* **proxy:** normalize single-account warmup failures ([#1774](https://github.com/Soju06/codex-lb/issues/1774)) ([f92bc90](https://github.com/Soju06/codex-lb/commit/f92bc906ee06079e307866cff548b75435b46c49)) +* **proxy:** persist file ownership across replicas ([#1521](https://github.com/Soju06/codex-lb/issues/1521)) ([2cd52e4](https://github.com/Soju06/codex-lb/commit/2cd52e44b4136bdc76b425cca1bd767335f43754)) +* **proxy:** release the API-key reservation on all exits of the models endpoints ([#1653](https://github.com/Soju06/codex-lb/issues/1653)) ([7007885](https://github.com/Soju06/codex-lb/commit/7007885dad6572e2332739f808528c5b8b4a0857)) +* **proxy:** route source-owned models off the WebSocket transport ([#1659](https://github.com/Soju06/codex-lb/issues/1659)) ([08b84a9](https://github.com/Soju06/codex-lb/commit/08b84a95ad5d4de88b3ac4ebb37185781a603f81)) +* **proxy:** scope backend Codex affinity by thread identity ([#1703](https://github.com/Soju06/codex-lb/issues/1703)) ([35bbb00](https://github.com/Soju06/codex-lb/commit/35bbb006bc2ec76a43273f08f5a29ea150f11f4c)) +* **proxy:** separate websocket scope cleanup budget ([#1723](https://github.com/Soju06/codex-lb/issues/1723)) ([fd97cb8](https://github.com/Soju06/codex-lb/commit/fd97cb856970e46a5e6e4265e0064fca4f24fb02)) +* **proxy:** settle compact failover before account health ([#1717](https://github.com/Soju06/codex-lb/issues/1717)) ([3093203](https://github.com/Soju06/codex-lb/commit/30932034c3188efbddb33a68e0c438bd5db87db3)) +* **proxy:** settle terminal spool append failures ([#1775](https://github.com/Soju06/codex-lb/issues/1775)) ([4e48f35](https://github.com/Soju06/codex-lb/commit/4e48f355b519fb20e16e89a5e5c6b2375bb08161)) +* **proxy:** stop abandoning an unresolved inflight session-creation future ([#1644](https://github.com/Soju06/codex-lb/issues/1644)) ([57618c8](https://github.com/Soju06/codex-lb/commit/57618c87528aaaac4fecc4c6ad57dd07fbfa108b)) +* **proxy:** sweep idle bridge sessions without request traffic ([#1747](https://github.com/Soju06/codex-lb/issues/1747)) ([3159ebe](https://github.com/Soju06/codex-lb/commit/3159ebedfc48789ee6b9c678c4f48e842a2a3555)) +* **quota-planner:** compare warmup reset epochs in UTC ([#1623](https://github.com/Soju06/codex-lb/issues/1623)) ([e4fa3f2](https://github.com/Soju06/codex-lb/commit/e4fa3f273f45ac9eaeafc28047005584c954ef3c)) +* **review:** keep Codex review sessions resumable ([#1678](https://github.com/Soju06/codex-lb/issues/1678)) ([e34db2d](https://github.com/Soju06/codex-lb/commit/e34db2d218925f7764e57b0571dcf736d33084da)) +* **server:** serve h2c upgrade offers as plain HTTP/1.1 instead of rejecting them ([#1782](https://github.com/Soju06/codex-lb/issues/1782)) ([8d265c3](https://github.com/Soju06/codex-lb/commit/8d265c3f73bda4c2adb7632d888dad5413b1b121)) +* **usage:** fence leaked live-usage-ingestor tasks and settle their failures deterministically ([#1783](https://github.com/Soju06/codex-lb/issues/1783)) ([66fd103](https://github.com/Soju06/codex-lb/commit/66fd1033165133e943a5818d75c40bc86e4a6b49)) +* **usage:** settle live snapshots after account consolidation ([#1773](https://github.com/Soju06/codex-lb/issues/1773)) ([3f66c28](https://github.com/Soju06/codex-lb/commit/3f66c288a230d6eb73c39b397c558427c21e167f)) + + +### Performance Improvements + +* **accounts:** bound the account-listing live tail with a 2h fold lag and a 30s summary cache ([#1792](https://github.com/Soju06/codex-lb/issues/1792)) ([c1caa44](https://github.com/Soju06/codex-lb/commit/c1caa4468cdf2f94f9abe675b63e63a13dbdd383)) +* **accounts:** make account deletion a fast mark + background batch drain ([#1795](https://github.com/Soju06/codex-lb/issues/1795)) ([d4f9e23](https://github.com/Soju06/codex-lb/commit/d4f9e23cd623d67beee2df153723839e391d44d1)) +* **api-keys,proxy:** shape ORM hot-path queries ([#1788](https://github.com/Soju06/codex-lb/issues/1788)) ([7dacb04](https://github.com/Soju06/codex-lb/commit/7dacb04181390b85bd42b335a73e27ad4d90ec2f)) +* **api-keys:** skip usage reservations when no limit applies ([#1789](https://github.com/Soju06/codex-lb/issues/1789)) ([8a2d066](https://github.com/Soju06/codex-lb/commit/8a2d0660e2b216a93593757f2fec242e69f92724)) +* coalesce same-owner sticky session TTL refresh upserts ([#1790](https://github.com/Soju06/codex-lb/issues/1790)) ([076aab8](https://github.com/Soju06/codex-lb/commit/076aab854ff0b334d77ab2104175d672384065c5)) +* **dashboard:** cap projections bulk usage-history read per account ([#1779](https://github.com/Soju06/codex-lb/issues/1779)) ([d4c43ef](https://github.com/Soju06/codex-lb/commit/d4c43ef88f8d4a548fb952a82901ea482995a633)) +* **middleware:** convert BaseHTTPMiddleware layers to pure ASGI ([#1787](https://github.com/Soju06/codex-lb/issues/1787)) ([94057cc](https://github.com/Soju06/codex-lb/commit/94057ccf91a7ed9f32eb15dcfa0487c969dc2a83)) +* **proxy:** disable permessage-deflate on direct-egress upstream websockets ([#1786](https://github.com/Soju06/codex-lb/issues/1786)) ([2e4a580](https://github.com/Soju06/codex-lb/commit/2e4a580c1c1834f00b6d4c62598caf1ffd0446ee)) +* **proxy:** relay unmodified SSE frames verbatim ([#1785](https://github.com/Soju06/codex-lb/issues/1785)) ([980572e](https://github.com/Soju06/codex-lb/commit/980572eb8ee5ed70acb9edfc5a7a2acc35f46216)) +* **proxy:** validate stream payloads only for lifecycle events ([#1784](https://github.com/Soju06/codex-lb/issues/1784)) ([9d9f099](https://github.com/Soju06/codex-lb/commit/9d9f099197326f37eea4042e27c5b09606f99043)) + + +### Documentation + +* **dashboard:** clarify routing, sticky affinity, quota thresholds, warm-up, and eligibility copy ([#1781](https://github.com/Soju06/codex-lb/issues/1781)) ([6ff22e0](https://github.com/Soju06/codex-lb/commit/6ff22e0e528fb7bdd6c69c059178681254b143af)) +* **openspec:** archive 90 landed changes and sync their specs ([#1713](https://github.com/Soju06/codex-lb/issues/1713)) ([c3f0c56](https://github.com/Soju06/codex-lb/commit/c3f0c568cb4dda4547f5d765951ba0748e7c923a)) +* **openspec:** archive landed performance and reliability changes ([#1694](https://github.com/Soju06/codex-lb/issues/1694)) ([6b3db74](https://github.com/Soju06/codex-lb/commit/6b3db74e7b8a8201f6362e06a7debb517e48db27)) +* **proxy:** document cluster-wide account cap partitioning ([#1750](https://github.com/Soju06/codex-lb/issues/1750)) ([560fb50](https://github.com/Soju06/codex-lb/commit/560fb503b3ada0e5a544cd3de3af42b3c5e43ebe)) + ## [1.23.0](https://github.com/Soju06/codex-lb/compare/v1.22.0...v1.23.0) (2026-08-11) diff --git a/app/__init__.py b/app/__init__.py index b6ae45e81c..f17b28cb9a 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,4 +1,4 @@ -__version__ = "1.24.0-beta.1" # x-release-please-version +__version__ = "1.24.0" # x-release-please-version __all__ = ["app", "__version__"] diff --git a/deploy/helm/codex-lb/Chart.yaml b/deploy/helm/codex-lb/Chart.yaml index 7a7ccf4169..06f3eebb61 100644 --- a/deploy/helm/codex-lb/Chart.yaml +++ b/deploy/helm/codex-lb/Chart.yaml @@ -4,8 +4,8 @@ description: >- Production-grade Helm chart for codex-lb — OpenAI API load balancer with usage tracking, account pooling, and observability type: application -version: 1.24.0-beta.1 -appVersion: 1.24.0-beta.1 +version: 1.24.0 +appVersion: 1.24.0 kubeVersion: '>=1.32.0-0' home: https://github.com/soju06/codex-lb sources: diff --git a/frontend/package.json b/frontend/package.json index 26e2cba030..006540c706 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "1.24.0-beta.1", + "version": "1.24.0", "type": "module", "packageManager": "bun@1.3.14", "scripts": { diff --git a/pyproject.toml b/pyproject.toml index 2ddaa60269..dfc59f945d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "codex-lb" -version = "1.24.0-beta.1" +version = "1.24.0" description = "Codex load balancer and proxy for ChatGPT accounts with usage dashboard" readme = "README.md" license = { file = "LICENSE" } diff --git a/uv.lock b/uv.lock index 2f40f62031..2094ce709b 100644 --- a/uv.lock +++ b/uv.lock @@ -486,7 +486,7 @@ wheels = [ [[package]] name = "codex-lb" -version = "1.24.0b1" +version = "1.24.0" source = { editable = "." } dependencies = [ { name = "aiohttp" },