Zyy and Codex
cd89e2e8fc
fix(admin): align quota metadata and usage layout
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-20 15:14:28 +08:00
Zyy and Codex
b26d3b386a
fix(admin): align quota diagnostics and usage layout
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-17 20:00:29 +08:00
Zyy and Codex
056561de41
refactor(frontend): clarify component boundaries
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-17 15:33:36 +08:00
dependabot[bot]
f2215df72e
chore(deps): bump the minor-and-patch group in /frontend with 4 updates
...
Bumps the minor-and-patch group in /frontend with 4 updates: [@lucide/vue](https://github.com/lucide-icons/lucide/tree/HEAD/packages/vue ), [pinia](https://github.com/vuejs/pinia ), [eslint-plugin-vuejs-accessibility](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility ) and [vue-tsc](https://github.com/vuejs/language-tools/tree/HEAD/packages/tsc ).
Updates `@lucide/vue` from 1.30.0 to 1.31.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/1.31.0/packages/vue )
Updates `pinia` from 4.0.2 to 4.0.3
- [Release notes](https://github.com/vuejs/pinia/releases )
- [Commits](https://github.com/vuejs/pinia/compare/v4.0.2...v4.0.3 )
Updates `eslint-plugin-vuejs-accessibility` from 2.5.0 to 2.6.0
- [Release notes](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility/releases )
- [Changelog](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility/blob/main/CHANGELOG.md )
- [Commits](https://github.com/vue-a11y/eslint-plugin-vuejs-accessibility/compare/v2.5.0...v2.6.0 )
Updates `vue-tsc` from 3.3.9 to 3.3.10
- [Release notes](https://github.com/vuejs/language-tools/releases )
- [Changelog](https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md )
- [Commits](https://github.com/vuejs/language-tools/commits/v3.3.10/packages/tsc )
---
updated-dependencies:
- dependency-name: "@lucide/vue"
dependency-version: 1.31.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: pinia
dependency-version: 4.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: eslint-plugin-vuejs-accessibility
dependency-version: 2.6.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: vue-tsc
dependency-version: 3.3.10
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-and-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-08-17 14:05:19 +08:00
Zyy and Codex
0558693949
fix(openai): harden refresh recovery handling
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-17 13:37:54 +08:00
Zyy and Codex
304242957a
fix(accounts): preserve upstream error messages
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-16 13:28:28 +08:00
Zyy and Codex
fc13d4f2b6
fix(frontend): restore responsive component behavior
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 20:38:48 +08:00
Zyy and Codex
a3bc7bc445
fix(frontend): increase account table row height
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 18:54:02 +08:00
Zyy and Codex
bc3bd6bc43
refactor(frontend): unify component design system
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 15:39:31 +08:00
Zyy and Codex
9acfab0a86
chore(frontend): enforce template interpolation layout
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 12:31:10 +08:00
Zyy and Codex
3e5a84d2a0
fix(frontend): refine dashboard capacity display
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 12:31:06 +08:00
Zyy and Codex
92948f51a9
fix(frontend): remove table bottom gap
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 11:59:58 +08:00
Zyy and Codex
82acb08d26
fix(frontend): restore diagnostic table scrolling
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 01:51:56 +08:00
Zyy and Codex
0b8a1add18
feat(frontend): refresh account setup defaults and copy
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-15 01:09:31 +08:00
Zyy and Codex
4117840f75
fix(xai): align OAuth and Codex compatibility
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 22:24:08 +08:00
Zyy and Codex
ee51a07de4
fix(openai): align desktop wire profile
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 16:13:11 +08:00
Zyy and Codex
bc4728332e
fix(frontend): polish dashboard and table interactions
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 01:24:49 +08:00
Zyy and Codex
9d90dedb81
fix(frontend): refresh account data without table loading
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 01:07:12 +08:00
Zyy and Codex
6ab8e7d0a6
fix(frontend): grade model success rate colors
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 00:42:20 +08:00
Zyy and Codex
15e0a28bd0
fix(frontend): refine refresh loading and group alignment
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 00:39:50 +08:00
Zyy and Codex
819f428ac3
fix(frontend): align loading and daily usage display
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-14 00:10:13 +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
07acc67ce6
feat(frontend): add account group management
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-13 16:58:36 +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
153cb67b9c
refactor(login): refine panel details
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 17:21:31 +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
a31dad992c
fix(frontend): stabilize button loading indicator
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-11 17:21:16 +08:00
Zyy and Codex
44a2a87b69
fix(frontend): center button loading spinner
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-10 15:55:58 +08:00
dependabot[bot]
ac9c4c85ad
chore(deps): bump the minor-and-patch group in /frontend with 8 updates ( #38 )
...
Bumps the minor-and-patch group in /frontend with 8 updates:
| Package | From | To |
| --- | --- | --- |
| [@lucide/vue](https://github.com/lucide-icons/lucide/tree/HEAD/packages/vue ) | `1.28.0` | `1.30.0` |
| [dompurify](https://github.com/cure53/DOMPurify ) | `3.4.12` | `3.4.13` |
| [marked](https://github.com/markedjs/marked ) | `18.0.7` | `18.0.9` |
| [vue](https://github.com/vuejs/core ) | `3.5.40` | `3.5.41` |
| [@antfu/eslint-config](https://github.com/antfu/eslint-config ) | `9.2.0` | `9.3.0` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) | `26.1.2` | `26.2.0` |
| [eslint](https://github.com/eslint/eslint ) | `10.8.0` | `10.8.1` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `8.2.0` | `8.2.1` |
Updates `@lucide/vue` from 1.28.0 to 1.30.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/1.30.0/packages/vue )
Updates `dompurify` from 3.4.12 to 3.4.13
- [Release notes](https://github.com/cure53/DOMPurify/releases )
- [Commits](https://github.com/cure53/DOMPurify/compare/3.4.12...3.4.13 )
Updates `marked` from 18.0.7 to 18.0.9
- [Release notes](https://github.com/markedjs/marked/releases )
- [Commits](https://github.com/markedjs/marked/compare/v18.0.7...v18.0.9 )
Updates `vue` from 3.5.40 to 3.5.41
- [Release notes](https://github.com/vuejs/core/releases )
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md )
- [Commits](https://github.com/vuejs/core/compare/v3.5.40...v3.5.41 )
Updates `@antfu/eslint-config` from 9.2.0 to 9.3.0
- [Release notes](https://github.com/antfu/eslint-config/releases )
- [Commits](https://github.com/antfu/eslint-config/compare/v9.2.0...v9.3.0 )
Updates `@types/node` from 26.1.2 to 26.2.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
Updates `eslint` from 10.8.0 to 10.8.1
- [Release notes](https://github.com/eslint/eslint/releases )
- [Commits](https://github.com/eslint/eslint/compare/v10.8.0...v10.8.1 )
Updates `vite` from 8.2.0 to 8.2.1
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v8.2.1/packages/vite )
---
updated-dependencies:
- dependency-name: "@lucide/vue"
dependency-version: 1.30.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: dompurify
dependency-version: 3.4.13
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: marked
dependency-version: 18.0.9
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: vue
dependency-version: 3.5.41
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: "@antfu/eslint-config"
dependency-version: 9.3.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: "@types/node"
dependency-version: 26.2.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: eslint
dependency-version: 10.8.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: vite
dependency-version: 8.2.1
dependency-type: direct:development
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-10 11:54:36 +08:00
Zyy and Codex
73ca463924
feat: distinguish pro plan badges
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-07 18:56:13 +08:00
Zyy and Codex
9775451e83
fix(web): preserve button labels while loading
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 15:27:00 +08:00
Zyy and Codex
e7036a616f
fix(web): center button loading indicators
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-06 14:53: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 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
34656a3f07
refactor(ui): standardize card spacing and layouts
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-03 17:01:23 +08:00
Zyy and Codex
27cf037309
fix(ui): center button loading spinner
...
Co-authored-by: Codex <noreply@openai.com >
2026-08-03 17:01:23 +08:00
dependabot[bot]
f19785d0e1
chore(deps): bump the minor-and-patch group in /frontend with 6 updates ( #34 )
...
Bumps the minor-and-patch group in /frontend with 6 updates:
| Package | From | To |
| --- | --- | --- |
| [@lucide/vue](https://github.com/lucide-icons/lucide/tree/HEAD/packages/vue ) | `1.27.0` | `1.28.0` |
| [@vueuse/core](https://github.com/vueuse/vueuse/tree/HEAD/packages/core ) | `14.3.0` | `14.4.0` |
| [axios](https://github.com/axios/axios ) | `1.18.1` | `1.19.0` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) | `26.1.1` | `26.1.2` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `8.1.5` | `8.2.0` |
| [vue-tsc](https://github.com/vuejs/language-tools/tree/HEAD/packages/tsc ) | `3.3.8` | `3.3.9` |
Updates `@lucide/vue` from 1.27.0 to 1.28.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/1.28.0/packages/vue )
Updates `@vueuse/core` from 14.3.0 to 14.4.0
- [Release notes](https://github.com/vueuse/vueuse/releases )
- [Commits](https://github.com/vueuse/vueuse/commits/v14.4.0/packages/core )
Updates `axios` from 1.18.1 to 1.19.0
- [Release notes](https://github.com/axios/axios/releases )
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md )
- [Commits](https://github.com/axios/axios/compare/v1.18.1...v1.19.0 )
Updates `@types/node` from 26.1.1 to 26.1.2
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
Updates `vite` from 8.1.5 to 8.2.0
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.2.0/packages/vite )
Updates `vue-tsc` from 3.3.8 to 3.3.9
- [Release notes](https://github.com/vuejs/language-tools/releases )
- [Changelog](https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md )
- [Commits](https://github.com/vuejs/language-tools/commits/v3.3.9/packages/tsc )
---
updated-dependencies:
- dependency-name: "@lucide/vue"
dependency-version: 1.28.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: "@vueuse/core"
dependency-version: 14.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: axios
dependency-version: 1.19.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: "@types/node"
dependency-version: 26.1.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: minor-and-patch
- dependency-name: vite
dependency-version: 8.2.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: minor-and-patch
- dependency-name: vue-tsc
dependency-version: 3.3.9
dependency-type: direct:development
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:37:31 +08:00
Zyy and Claude Fable 5
df83ffdafb
refactor(quota): split quota module and align scheduling/display semantics
...
Split credential/quota.rs into quota/{mod,snapshot,recovery}.rs with
corresponding test modules. Snapshot aggregation is snapshot-level:
top-level limit_reached/allowed and any window used>=100 count as
exhaustion, scheduling signals survive limit-only windows, and window
rolling is O(1) arithmetic.
402 recovery uses the pre-write confirmed reset (old reset elapsed plus
fresh snapshot not exhausted, or explicit allowed=true) instead of the
new snapshot's future reset, fixing the worker recovery deadlock.
Scheduling projection TTL is capped at the nearest active reset so
cache expiry never outlives the limit.
Admin derives seven mutually exclusive statuses (Active/RateLimited/
QuotaExhausted/Expired/Invalid/Disabled/Banned) from availability plus
snapshot-level quota.limitReached; Unknown maps to invalid. Dashboard
metrics are mutually exclusive (rate_limited disjoint from active),
ignore reset-expired windows, and cover additional rate limits.
xAI: bare 402 writes a short account cooldown instead of persisting
QuotaExhausted; ModelQuotaExhausted keeps model scope; runtime cooldown
survives credential rotation; account deletion clears all account and
model-scoped cooldown keys via new ProviderCooldownPort::clear_all.
Migration 0002 is frozen in the sha256 manifest.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-03 03:04:43 +08:00
Zyy and Claude Fable 5
cf03c56cfa
refactor(quota): separate rate limiting from account availability
...
Remove the persistent Cooldown state and cooldown_until/availability_reason
columns; rate limiting (429/503) now lives entirely in provider quota data
with projected window rolling, while availability carries only terminal or
intervention-required states (QuotaExhausted for 402, worker auto-recovers
on quota reset). xAI migrated to the same model (runtime cooldown via Redis,
no persistent state). Frontend derives 限流中 from quota window limitReached.
Align quota window parsing with the official codex schema: drop the invented
monthly_limit/spend_control windows, add the top-level code_review_rate_limit
window, prefer upstream limit_name for display labels, and keep duration
guessing only for grouping.
Also fix: account directory degrades one failing quota to an empty projection
instead of failing the whole page; dashboard rate_limited bucket SQL; fake
store Mutex re-entrancy deadlock; remove dead tokenRefreshing field.
Migration 0002 drops cooldown columns and rewrites the availability CHECK.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-03 00:13:56 +08:00
Zyy and Codex
a93e3853f7
chore: consolidate migrations and tune settings colors
...
Fold the completed provider snapshot, S3 backup, and redundant-index changes into the initial PostgreSQL baseline. Keep the settings section tabs aligned with the input surface color.
Co-authored-by: Codex <noreply@openai.com >
2026-08-02 04:07:37 +08:00
zyycn and Codex
e3d767bf54
fix(frontend): fill brand mark box with favicon tile
...
The sidebar and login logo boxes kept a #1c2a3d background around a
smaller favicon image, leaving an inconsistent ring in dark mode. The
image now fills the box and the divergent box background is removed, so
the favicon's own black tile is the visual mark.
Co-authored-by: Codex <noreply@openai.com >
2026-08-02 01:53:05 +08:00
zyycn and Codex
365d389a14
refactor(frontend): phase system-update state and clear remaining any
...
system-update now uses a discriminated phase union so mutually exclusive
operation states cannot be expressed together; connection-test event shapes
and cost chart points are typed instead of any.
Co-authored-by: Codex <noreply@openai.com >
2026-08-02 01:25:53 +08:00
zyycn and Codex
e79d57eaf9
refactor(frontend): normalize usage records into a single view model
...
Components now consume `UsageViewModel` produced by `normalizeUsageRecord`;
metadata fallback exists only in the normalizer. Also complete the typed
request params for ops errors so the usage module stays build-clean.
Co-authored-by: Codex <noreply@openai.com >
2026-08-02 01:25:50 +08:00