Zyy and Codex
17f9ef8915
fix(observability): omit inactive accounts from daily usage
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 00:39:59 +08:00
Zyy and Codex
b04616f59f
refactor(migrations): squash schema into initial baseline
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 00:13:09 +08:00
Zyy and Codex
82ba4fcbba
fix(observability): align dashboard and quota window usage
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 00:11:56 +08:00
Zyy and Codex
65645c7403
fix(accounts): gate quota recovery and add manual reset
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-13 22:43:03 +08:00
Zyy and Codex
71159d5633
refactor(account-groups): remove unused members endpoint
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-13 17:28:43 +08:00
Zyy and Codex
01ad8bba8a
feat(routing): add account groups and weighted scheduling
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-13 16:58:36 +08:00
Zyy and Codex
986a128d15
fix(observability): separate live status from history range
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-13 00:26:10 +08:00
Zyy and Codex
6cad2bb6a1
fix(openai): align account import with official token claims
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-12 23:51:26 +08:00
Zyy and Codex
2b8b3de0e4
refactor(accounts): unify five-state account status
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-12 23:50:31 +08:00
Zyy and Codex
ee3e5db6c2
fix(accounts): isolate model-specific quota usage
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 17:42:02 +08:00
Zyy and Codex
f370d355b6
fix(accounts): align quota ordering and summaries
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 17:21:23 +08:00
Zyy and Codex
5d90a92582
fix(logging): rename OAuth recovery log file
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 15:06:40 +08:00
Zyy and Codex
93abe8efcd
fix(logging): generalize OAuth recovery logs
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 14:55:59 +08:00
Zyy and Codex
f4b75c42ed
fix(openai): isolate quota and recovery signals
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 13:37:16 +08:00
Zyy and Codex
545009590c
fix(openai): persist authoritative quota exhaustion
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 12:16:34 +08:00
Zyy and Codex
5b7b9b21ee
fix(openai): require low usage for quota recovery
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-10 15:55:58 +08:00
Zyy and Codex
aa328b6dbf
fix(openai): restore official TLS fingerprint pins
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-10 12:23:36 +08:00
dependabot[bot] and Zyy
64231ff403
chore(deps): bump the minor-and-patch group in /backend with 4 updates ( #37 )
...
Bumps the minor-and-patch group in /backend with 4 updates: [base64](https://github.com/marshallpierce/rust-base64 ), [aws-sdk-s3](https://github.com/awslabs/aws-sdk-rust ), [hyper-rustls](https://github.com/rustls/hyper-rustls ) and [rustls](https://github.com/rustls/rustls ).
Updates `base64` from 0.23.0 to 0.23.1
- [Changelog](https://github.com/marshallpierce/rust-base64/blob/master/RELEASE-NOTES.md )
- [Commits](https://github.com/marshallpierce/rust-base64/compare/v0.23.0...v0.23.1 )
Updates `aws-sdk-s3` from 1.140.0 to 1.141.0
- [Release notes](https://github.com/awslabs/aws-sdk-rust/releases )
- [Commits](https://github.com/awslabs/aws-sdk-rust/commits )
Updates `hyper-rustls` from 0.27.7 to 0.27.9
- [Release notes](https://github.com/rustls/hyper-rustls/releases )
- [Commits](https://github.com/rustls/hyper-rustls/compare/v/0.27.7...v/0.27.9 )
Updates `rustls` from 0.23.36 to 0.23.43
- [Release notes](https://github.com/rustls/rustls/releases )
- [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md )
- [Commits](https://github.com/rustls/rustls/compare/v/0.23.36...v/0.23.43 )
---
updated-dependencies:
- dependency-name: base64
dependency-version: 0.23.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: aws-sdk-s3
dependency-version: 1.141.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: hyper-rustls
dependency-version: 0.27.9
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: rustls
dependency-version: 0.23.43
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zyy <39424122+zyycn@users.noreply.github.com >
2026-08-10 12:05:00 +08:00
Zyy and Codex
492c401599
fix(openai): preserve state on quota auth failures
...
Co-authored-by: Codex <noreply@openai.com >
Signed-off-by: Zyy <zyycn@users.noreply.github.com >
2026-08-10 11:46:19 +08:00
Zyy and Codex
dc590f2b5f
fix: make OAuth refresh margin runtime-only
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-09 15:12:43 +08:00
Zyy and Codex
43604e36dc
fix: correct first token timing
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-07 18:56:13 +08:00
Zyy and Codex
a4a997e351
fix: use lifetime dashboard card totals
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-07 18:56:13 +08:00
Zyy and Codex
9eeec2c78c
chore: bump version to 3.1.15
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-07 15:15:00 +08:00
Zyy and Codex
90890be2b4
fix(openai): persist OAuth tokens before quota sync
...
Align OAuth token persistence and ID token metadata handling with Codex, and retry initial quota observation asynchronously.
Co-authored-by: Codex <noreply@openai.com >
2026-08-07 14:59:42 +08:00
Zyy and Codex
b052e79a16
fix(openai): preserve imported token expiry
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 15:49:42 +08:00
Zyy and Codex
c22a2ad144
test(logging): move recovery filter coverage
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 15:14:26 +08:00
Zyy and Codex
98652d4c68
fix(openai): write oauth recovery to app logs
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 14:22:13 +08:00
Zyy and Codex
d0dc7ef92b
fix(openai): complete import profile from access token
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 12:31:13 +08:00
Zyy and Codex
30f528f084
fix(openai): simplify import and oauth validation
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 11:14:18 +08:00
Zyy and Codex
6b9c98c59f
fix(openai): persist successful refresh tokens directly
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 09:50:03 +08:00
Zyy and Codex
a0e540642b
fix(oauth): bound refresh recovery and persist failure reasons
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-05 12:21:16 +08:00
Zyy and Codex
14d6a7de31
fix(dashboard): align summary with daily trend
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-05 10:46:14 +08:00
Zyy and Codex
ebbed22f36
fix(openai): keep Codex wire OS exact
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-05 00:03:21 +08:00
Zyy and Codex
f6e5d8f673
fix(openai): drop null secondary quota windows
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-05 00:03:11 +08:00
Zyy and Codex
d388fa344a
fix(openai): drop placeholder secondary quota windows
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 22:30:04 +08:00
Zyy and Codex
eabb61b08c
fix(openai): restore Codex Core app-server identity
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 22:30:01 +08:00
Zyy and Codex
a5c3438927
fix(openai): isolate thread-spawn session affinity
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 22:29:53 +08:00
Zyy and Codex
b6948542bb
fix: align Codex Desktop HTTP identity
...
- send the official Desktop HTTP user agent across OpenAI upstream paths
- keep the audited model catalog version separate from the wire identity
- remove CLI release drift and clarify the dashboard client identity
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 18:36:03 +08:00
Zyy and Codex
229ef48470
fix: harden backup verification and detail UI
...
- read every multipart backup payload to its requested length
- make remote verification failures diagnosable
- refine status details, loading icons, and attempt-chain presentation
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 16:18:53 +08:00
Zyy and Codex
3c06ae97e8
fix: reconcile quota, backup, and session behavior
...
- preserve confirmed quota exhaustion until its recorded reset advances
- normalize account quota presentation and subagent session affinity
- repair S3-compatible backup handling and related admin UI details
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 15:12:15 +08:00
Zyy and Codex
e9ebf45640
fix(accounts): reconcile quota status and dashboard metrics
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 08:53:29 +08:00
Zyy and Codex
ab5f18a437
fix(accounts): update admin list test for cooldown-driven rate_limited
...
quota_limit_reached without Redis cooldown maps to quota_exhausted
now that rate_limited comes only from 429 cooldown. Adjust summary
assertions: quota_exhausted 1→2, rate_limited 1→0.
Co-authored-by: Codex <noreply@openai.com >
2026-08-04 01:10:40 +08:00
Zyy and Claude Fable 5
330b222359
feat(accounts): separate rate-limited status into Redis cooldown
...
429 临时限流从 quota 快照分离为 Redis 冷却(ProviderCooldownPort):
- apply_rate_limit_429 只写 Redis(put_if_later,不缩短已有冷却),不再合成 quota 窗口,额度重置时间不被 429 污染
- 调度选择时排除冷却中的账号,到期自动恢复;诊断请求绕过
- 状态派生分离:rate_limited_until 存在 → 限流中;quota_limit_reached → 配额耗尽
- store 层(账号列表/筛选 + dashboard poolSummary)注入 cooldown 端口,精确区分限流中与配额耗尽,"正常"筛选不再混入限流中
- wire 透传 rate_limited_until,前端状态弹窗改为状态卡片(icon 块 + 状态名 + 原因/到期明细),BasePopover 加 hover delay
- 更新 429 相关测试断言,新增配额耗尽映射测试
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-04 00:39:38 +08:00
Zyy and Claude Opus 4.8
8e2edb680d
feat(accounts): converge status classification and persist upstream errors
...
Unify account status derivation in gateway-admin via AccountStatusSignals,
removing the duplicated rules in store and use_case. AccountStatus now has
five operational classes (normal/quota_exhausted/rate_limited/disabled/error),
with AccountErrorReason carrying the concrete cause.
Add provider_accounts.last_error_message, written by record_failure with the
raw upstream error and cleared on recovery to ready. The admin error badge
shows the cause and upstream text on hover.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-08-03 21:23:28 +08:00
Zyy and Codex
00879be47d
fix(accounts): separate rate-limited account status
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-03 17:01:23 +08:00
Zyy and Codex
2198fa69ab
refactor(migrations): consolidate schema into initial baseline
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-03 17:01:23 +08:00
Zyy and Zyy
8734b0d3d5
fix(openai): keep fingerprint-pinned TLS versions ( #35 )
...
Co-authored-by: Zyy <zyycn@users.noreply.github.com >
2026-08-03 11:59:59 +08:00
dependabot[bot]
790d0d9628
chore(deps): bump the minor-and-patch group in /backend with 3 updates ( #32 )
...
Bumps the minor-and-patch group in /backend with 3 updates: [redis](https://github.com/redis-rs/redis-rs ), [hyper-rustls](https://github.com/rustls/hyper-rustls ) and [rustls](https://github.com/rustls/rustls ).
Updates `redis` from 1.4.1 to 1.5.0
- [Release notes](https://github.com/redis-rs/redis-rs/releases )
- [Commits](https://github.com/redis-rs/redis-rs/compare/redis-1.4.1...redis-1.5.0 )
Updates `hyper-rustls` from 0.27.7 to 0.27.9
- [Release notes](https://github.com/rustls/hyper-rustls/releases )
- [Commits](https://github.com/rustls/hyper-rustls/compare/v/0.27.7...v/0.27.9 )
Updates `rustls` from 0.23.36 to 0.23.43
- [Release notes](https://github.com/rustls/rustls/releases )
- [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md )
- [Commits](https://github.com/rustls/rustls/compare/v/0.23.36...v/0.23.43 )
---
updated-dependencies:
- dependency-name: redis
dependency-version: 1.5.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: hyper-rustls
dependency-version: 0.27.9
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: rustls
dependency-version: 0.23.43
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 11:39:06 +08:00
dependabot[bot] and Zyy
3c562563c5
chore(deps): bump p256 from 0.13.2 to 0.14.0 in /backend ( #33 )
...
* chore(deps): bump p256 from 0.13.2 to 0.14.0 in /backend
Bumps [p256](https://github.com/RustCrypto/elliptic-curves ) from 0.13.2 to 0.14.0.
- [Commits](https://github.com/RustCrypto/elliptic-curves/compare/p256/v0.13.2...p256/v0.14.0 )
---
updated-dependencies:
- dependency-name: p256
dependency-version: 0.14.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
* fix(xai): update p256 point encoding API
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zyy <zyycn@users.noreply.github.com >
2026-08-03 11:38:22 +08:00
Zyy and Claude Fable 5
449d7c4218
refactor(openai): inline single-call recovery confirmation helper
...
quota_recovery_confirmed had one call site; inlining the evidence match
into quota_success_state makes the recovery rules (successful response
always recovers; refreshed snapshot requires old reset elapsed) visible
at the decision point. Rust best practices §1.8: don't extract helpers
for single-call simple logic.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-03 03:36:17 +08:00