What's Changed
- fix(quota-planner): normalize decision datetimes for persistence by @Soju06 in #1034
- fix(proxy): avoid shielded-future log on startup probe timeout by @ozpool in #1076
- fix(ci): ignore stale and resolved Codex inline findings by @Komzpa in #981
- fix(models): hide unsupported API models by @Komzpa in #887
- fix(dashboard): correct weekly credits pace display by @Komzpa in #955
- fix(proxy): normalize non-native upstream requests to Codex CLI fingerprint by @Soju06 in #1089
- chore: release v1.20.2-beta.1 by @Soju06 in #1088
- feat: smart HTTP→upstream transport routing (sticky vs single-shot) by @Soju06 in #1093
- chore(ci): bump softprops/action-gh-release from 3.0.0 to 3.0.1 by @dependabot[bot] in #1067
- chore(docker): bump pgautoupgrade/pgautoupgrade from 18-alpine to 18-alpine by @dependabot[bot] in #1068
- chore(ci): bump docker/build-push-action from 7.1.0 to 7.2.0 by @dependabot[bot] in #1069
- chore(docker): bump astral-sh/uv from 0.11.21 to 0.11.23 by @dependabot[bot] in #1070
- chore(ci): bump actions/checkout from 6.0.2 to 7.0.0 by @dependabot[bot] in #1071
- chore(ci): bump github/codeql-action from 4.35.5 to 4.36.2 by @dependabot[bot] in #1072
- chore(deps): bump the frontend-minor-patch group in /frontend with 6 updates by @dependabot[bot] in #1073
- chore(deps): bump @types/node from 25.9.3 to 26.0.0 in /frontend by @dependabot[bot] in #1074
- chore(deps): bump pydantic-settings from 2.14.1 to 2.14.2 by @dependabot[bot] in #1081
- chore(deps): bump the python-minor-patch group with 7 updates by @dependabot[bot] in #1075
- feat: expose upstream transport observability by @Soju06 in #1096
- feat(proxy): repair account-bound egress routing by @Komzpa in #875
- fix(proxy): oauth blocked when bindings lack route by @tobwen in #1064
- feat+fix(report): reports enhancements by @huzky-v in #1060
- feat(reset-credits): add banked rate-limit reset credits by @huzky-v in #1053
- fix(db): optimize dashboard query hot paths by @Soju06 in #1107
- chore(docker): bump pgautoupgrade/pgautoupgrade from 18-alpine to 18-alpine by @dependabot[bot] in #1109
- chore(ci): bump azure/setup-helm from 5.0.0 to 5.0.1 by @dependabot[bot] in #1110
- chore(ci): bump actions/cache from 5.0.5 to 6.1.0 by @dependabot[bot] in #1111
- chore(docker): bump astral-sh/uv from 0.11.23 to 0.11.25 by @dependabot[bot] in #1112
- chore(deps): bump the frontend-minor-patch group in /frontend with 12 updates by @dependabot[bot] in #1113
- chore(deps): bump the python-minor-patch group with 11 updates by @dependabot[bot] in #1114
- fix(frontend): persist dashboard account list sort by @Soju06 in #1115
- feat(frontend): restore Simplified Chinese i18n by @Komzpa in #995
- feat(usage-api): add toggle to query additional usage, and add pooled usage to
/v1/usageby @huzky-v in #832 - feat(request-logs): record client IP by @Komzpa in #985
- perf(usage): avoid repeated history cache scans by @Komzpa in #902
- feat(warmup): add staggered idle limit prestart by @Komzpa in #905
- fix(db): merge post-batch migration heads by @Soju06 in #1116
- feat(request-ui): add showing elapsed time to request details by @huzky-v in #1103
- fix(zod): add the zod schema with new enum introduced at #875 by @huzky-v in #1102
- fix(retry): honor minute/hour and compound retry-after hints by @ozpool in #1052
- ci: remove unsupported review-thread workflow trigger by @Komzpa in #1117
- test: update codex label workflow event assertion by @Komzpa in #1118
- fix(usage): sync paid-plan upgrades on workspace-less accounts by @ozpool in #1098
- fix(proxy): strip unsafe HTTP headers before owner-bridge forward by @ozpool in #1036
- fix(proxy): strip internal responses lite header by @mhughdo in #1099
- add configurable limit warm-up exhausted threshold by @jawwadfirdousi in #1079
- fix(ui): stabilize account layout and API key dialog by @qdzsh in #1062
- fix(models): aggregate service tiers across accounts by @ozpool in #1106
- fix(http-bridge): clean stale inflight session futures by @zvladru in #1044
- fix(websocket): avoid fresh retry for tool-output deltas by @zvladru in #1042
- feat(usage): support Codex usage reset credits by @codemoo in #1105
- fix(proxy): set parallel_tool_calls to false for compaction requests by @alzeiby in #1054
- docs: explain routing strategy tradeoffs by @Komzpa in #1119
- fix(proxy): clarify account stream cap overload by @Komzpa in #1122
- fix(proxy): stop local rate-limit selection retry loops by @Komzpa in #1121
- Smooth weekly pace gap by @Komzpa in #1120
- fix(db): prevent SQLite FD retention in background refresh tasks by @Lotfree618 in #1127
- fix(quota-planner): normalize datetimes before database use by @zvladru in #1043
- chore(deps): bump ty from 0.0.55 to 0.0.56 in the python-minor-patch group by @dependabot[bot] in #1147
- chore(ci): bump astral-sh/setup-uv from 8.2.0 to 8.3.0 by @dependabot[bot] in #1140
- chore(ci): bump docker/login-action from 4.2.0 to 4.4.0 by @dependabot[bot] in #1141
- chore(ci): bump docker/metadata-action from 6.1.0 to 6.2.0 by @dependabot[bot] in #1144
- chore(docker): bump astral-sh/uv from 0.11.25 to 0.11.27 by @dependabot[bot] in #1145
- chore(deps): bump the frontend-minor-patch group in /frontend with 12 updates by @dependabot[bot] in #1146
- chore(docker): bump pgautoupgrade/pgautoupgrade from 18-alpine to 18-alpine by @dependabot[bot] in #1139
- chore(ci): bump docker/build-push-action from 7.2.0 to 7.3.0 by @dependabot[bot] in #1142
- chore(ci): bump docker/setup-buildx-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #1143
- fix(dashboard-auth): harden local session ttl by @AnobleSCM in #1137
- fix: list Codex shell-only models in backend catalog by @Komzpa in #1138
- feat(accounts): test bound proxy pools by @Komzpa in #1124
- feat(metrics): expose account inflight lease gauge by @0xSolarPunk in #1148
- feat(fleet): add refresh endpoint by @AnobleSCM in #1128
- feat: add openai-compatible model sources by @evaldass in #1129
- fix(account-ui): fix overflow on account list page by @huzky-v in #1149
- feat(automations): scheduled cycles, grouped runs, and run details UI by @Kazet111 in #438
- feat(images): add route observability by @Komzpa in #1123
- feat(proxy): add TTFT phase observability by @Soju06 in #1156
- fix(models): serve the Codex catalog on /v1/models for Codex clients by @kevinWangSheng in #1163
- fix(proxy): fallback v1 usage limits to upstream quotas by @Daltonganger in #1151
- fix(proxy): preserve Responses Lite additional tools by @luawl in #1161
- feat(models): add GPT-5.6 bootstrap catalog with upstream-verified metadata by @Soju06 in #1176
- fix(proxy): support Codex image edit routes by @nazirulhafiy in #1160
- fix(model-sources): default Codex catalog context by @Komzpa in #1152
- fix(proxy): synthesize interrupted custom tool call outputs by @Soju06 in #1175
- fix(proxy): preserve all non-message system and developer input items by @Soju06 in #1172
- fix(proxy): preserve model_messages in catalog response by @zepx in #1178
- fix(ci): ignore superseded same-head check suites by @Komzpa in #1170
- fix(proxy): harden native Responses Lite continuity by @Komzpa in #1164
- ci: shard integration-core tests, PR-mode vitest without coverage by @Soju06 in #1179
- chore: release v1.21.0-beta.1 by @Soju06 in #1125
- fix(proxy): preserve multi-agent v2 passthrough by @luawl in #1189
- fix(proxy): stop synthesizing top-level tools for upstream Codex requests by @Soju06 in #1200
- chore: release v1.21.0-beta.2 by @Soju06 in #1201
- fix(proxy): send complete Codex identity headers by @luawl in #1197
- fix(account-ui): expand account list on tall viewports by @luawl in #1195
- fix(proxy): hide blank reasoning summary comments by @Komzpa in #1154
- fix(proxy): wait on local account cap pressure by @Komzpa in #1155
- fix(proxy): preserve admitted bridge waiters on upstream close by @Komzpa in #1191
- feat(proxy): add Fast Mode prohibition setting by @leventov in #1190
- fix(proxy): isolate unanchored parallel bridge requests by @Komzpa in #1169
- fix(proxy): reserve stream capacity for recovery by @Komzpa in #1188
- fix(proxy): omit synthesized tools on owner-forward and source egress by @Soju06 in #1203
- docs(codex): clarify built-in image generation eligibility by @ATofighi in #1181
- fix(proxy): normalize selected installation metadata by @dmdfami in #1204
- fix(accounts): sync free-to-paid plan upgrades by @luawl in #1217
- fix(ci): keep manual rerun attempts authoritative by @luawl in #1216
- fix(proxy): preserve responses turn-state fidelity by @luawl in #1193
- fix(models): retain hidden metadata across partial refreshes by @luawl in #1221
- fix(proxy): preserve websocket reconnect affinity by @leventov in #1220
- fix(proxy): preserve websocket incomplete reasons by @leventov in #1219
- fix(proxy): reselect only safe websocket turns by @dmdfami in #1207
- fix(proxy): route by complete account capability catalogs by @dmdfami in #1205
- test(usage): use UTC clock for freshness fixture by @luawl in #1228
- fix(proxy): keep native capacity waits alive by @Komzpa in #1218
- fix(ui): make routing strategy guide clickable cards by @zepx in #1229
- fix(oauth): isolate reauth by Team seat identity by @HeroOfOdyssey in #1224
- fix(proxy): prevent sequenced websocket replay by @mastertyko in #1223
- feat(proxy): configure account concurrency caps by @Komzpa in #1214
- Show request log speed metrics by @jamesx0416 in #1210
- fix(warmup): separate idle threshold, fix jitter, redesign warm-up UI by @zepx in #1230
- chore: release v1.21.0-beta.3 by @Soju06 in #1202
- fix(proxy): accept large websocket response.create and fail fast with 400 by @Soju06 in #1236
- perf(request-logs): skip-scan unfiltered filter-option facets by @Soju06 in #1239
- perf(proxy): cut pre-upstream DB round trips on interactive turns by @Soju06 in #1241
- perf(proxy): make SSE event framing linear instead of quadratic by @Soju06 in #1242
- perf(clients): keep upstream connections and DNS across interactive turns by @Soju06 in #1245
- perf(dashboard): compress responses, cache assets, lazy-load charts by @Soju06 in #1243
- perf(usage): aggregate the summary window in SQL, drop dead log refresh by @Soju06 in #1244
- perf(accounts): serve request-usage summaries from persistent rollup by @Soju06 in #1238
- feat(retention): opt-in pruning for request logs and usage history by @Soju06 in #1240
- fix(db): serialize startup migrations across replicas and report schema-ahead correctly by @Soju06 in #1256
- fix(quota-planner): make warmup budget and dedup claims atomic across replicas by @Soju06 in #1260
- chore(openspec): bulk-sync delta specs and archive all 152 completed changes by @Soju06 in #1252
- fix(balancer): persist rate-limit cooldowns so peer replicas honor them by @Soju06 in #1261
- fix(deploy): repair broken multi-replica deployment artifacts by @Soju06 in #1263
- fix(proxy): fence bridge lease writes, evict fenced-out replicas, purge orphaned ring state by @Soju06 in #1259
- fix(caching): extend cross-replica cache invalidation bus to routing, selection, and settings caches by @Soju06 in #1255
- feat(replica-ops): document replica topology contract and land startup guardrails by @Soju06 in #1264
- feat(proxy): partition account concurrency caps across live replicas by @Soju06 in #1258
- fix(reset-credits): make redemption replica-safe with durable ledger and claim by @Soju06 in #1257
- fix(proxy): queue bridged requests through response-create gate contention by @Soju06 in #1266
- feat(balancer): adapt selection and refresh to absent short-window quotas by @Soju06 in #1267
- feat(planner): derive phase planning from observed short windows by @Soju06 in #1268
- perf(proxy): parse each SSE event once per layer, skip no-op reserialization by @Soju06 in #1270
- perf(proxy): detach stream-end persistence from the response path by @Soju06 in #1269
- chore(openspec): archive the ten merged performance changes by @Soju06 in #1276
- perf(request-logs): cache the listing total per filter signature by @Soju06 in #1277
- perf(frontend): code-split dashboard routes by @Soju06 in #1278
- perf(frontend): self-host JetBrains Mono, drop Google Fonts by @Soju06 in #1279
- feat(models): replicate leader-refreshed model registry via persisted snapshots by @Soju06 in #1262
- docs(openspec): archive adaptive-window and bridge-gate changes by @Soju06 in #1271
- fix(automation): fall back to github.token when label sync hits rate limits by @Soju06 in #1272
- feat(usage): ingest live rate-limit snapshots from proxied traffic by @Soju06 in #1273
- docs(openspec): archive the live-rate-limit-ingestion change by @Soju06 in #1300
- feat(dashboard): hide expired primary windows instead of freezing them by @Soju06 in #1301
- feat(ci): mint a dedicated GitHub App token for codex label sync by @Soju06 in #1302
- chore(ci): bump dorny/paths-filter from 4.0.1 to 4.0.2 by @dependabot[bot] in #1288
- chore(ci): bump github/codeql-action/upload-sarif from 4.36.2 to 4.37.0 by @dependabot[bot] in #1289
- chore(ci): bump softprops/action-gh-release from 3.0.1 to 3.0.2 by @dependabot[bot] in #1290
- chore(docker): bump astral-sh/uv from 0.11.27 to 0.11.28 by @dependabot[bot] in #1291
- chore(ci): bump actions/stale from 10.3.0 to 10.4.0 by @dependabot[bot] in #1285
- chore(docker): bump pgautoupgrade/pgautoupgrade from 18-alpine to 18-alpine by @dependabot[bot] in #1286
- chore(ci): bump astral-sh/setup-uv from 8.3.0 to 8.3.2 by @dependabot[bot] in #1287
- chore(deps): bump the frontend-minor-patch group in /frontend with 10 updates by @dependabot[bot] in #1292
- docs(openspec): archive absent-window-display and label-sync-app-token by @Soju06 in #1303
- chore(deps): bump the python-minor-patch group with 5 updates by @dependabot[bot] in #1294
- chore(deps): bump typescript from 6.0.3 to 7.0.2 in /frontend by @dependabot[bot] in #1293
- fix(scheduling): harden scheduler leader election for multi-replica safety by @Soju06 in #1253
- chore: release v1.21.0-beta.4 by @Soju06 in #1237
- fix(accounts): serialize cross-replica token refresh with per-account DB claims by @Soju06 in #1254
- chore(main): release 1.21.0 by @Soju06 in #1087
New Contributors
- @jawwadfirdousi made their first contribution in #1079
- @qdzsh made their first contribution in #1062
- @zvladru made their first contribution in #1044
- @codemoo made their first contribution in #1105
- @alzeiby made their first contribution in #1054
- @0xSolarPunk made their first contribution in #1148
- @evaldass made their first contribution in #1129
- @kevinWangSheng made their first contribution in #1163
- @luawl made their first contribution in #1161
- @nazirulhafiy made their first contribution in #1160
- @zepx made their first contribution in #1178
- @leventov made their first contribution in #1190
- @ATofighi made their first contribution in #1181
- @dmdfami made their first contribution in #1204
- @HeroOfOdyssey made their first contribution in #1224
- @jamesx0416 made their first contribution in #1210
Full Changelog: v1.20.1...v1.21.0
Install / Run
uvx codex-lb
docker pull ghcr.io/Soju06/codex-lb:1.21.0
helm install codex-lb oci://ghcr.io/soju06/charts/codex-lb --version 1.21.0