Commit Graph
317 Commits
Author SHA1 Message Date
erio 00decae9bb feat(frontend): move API Key quota bars from capacity to usage window column
Move daily/weekly/total quota progress bars for API Key accounts from
the capacity column (QuotaBadge) to the usage window column
(UsageProgressBar), providing a consistent visual experience with
other usage displays.
2026-03-08 20:10:48 +08:00
erio 0bf7111e27 feat: add Antigravity 403 forbidden status detection and display
- Backend: detect and classify 403 responses (validation/violation/forbidden)
- Backend: extract verification/appeal URLs from 403 response body
- Frontend: display forbidden status badges with color coding
- Frontend: show clickable/copyable verification links
- Also includes: sora SDK client rename, table header style fix, tier badge in accounts list

chore: bump version to 0.1.93.23
2026-03-08 18:23:07 +08:00
erio 6f4adb2ecd chore: bump version to 0.1.93.22 2026-03-08 04:44:45 +08:00
erio 75bdcd440f chore: bump version to 0.1.93.21 2026-03-08 04:36:49 +08:00
erio abe8162292 chore: bump version to 0.1.93.20 2026-03-08 04:01:34 +08:00
erio 0d179a794d chore: bump version to 0.1.93.19 2026-03-08 03:51:41 +08:00
erio 7f5e7372d3 chore: bump version to 0.1.93.18 2026-03-08 03:43:45 +08:00
erio 87631e753b chore: bump version to 0.1.93.17 2026-03-08 03:33:11 +08:00
erioandClaude Opus 4.6 dc46a49c6c fix: make table scrollbar clearly visible and prevent text selection during drag
Scrollbar:
- Override scrollbar-width to 'auto' (was 'thin' ~6px, nearly invisible)
- Increase scrollbar-color opacity to 0.7 (was 0.5)
- Add explicit ::-webkit-scrollbar width 10px for older Chrome

Text selection:
- Block selectstart in Phase 1 (onMouseDown) instead of Phase 2
- Clear existing text selection with removeAllRanges() on drag start

Stability:
- Add window blur handler to cleanup drag on tab switch / window leave
- Guard onWheel RAF callback against stale drag state
- Defensive removeMarquee() before createMarquee()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 03:17:58 +08:00
erioandClaude Opus 4.6 93cd0fd4b9 fix: make table scrollbar always visible instead of hover-only
The global CSS makes all scrollbars transparent by default (only visible
on hover). For table containers, scrollbars should always be visible so
users know the content is scrollable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 02:56:34 +08:00
erioandClaude Opus 4.6 259b9d2dbb fix: optimize swipe-select with binary search, short-circuit, and scrollbar detection
- Binary search in findRowIndexAtY (O(n) → O(log n))
- Short-circuit applyRange when row index unchanged
- Cache scrollParent in beginDrag instead of per-frame lookup
- Skip autoScroll recomputation when scrollTop unchanged
- Detect scrollbar clicks on inner containers, not just document

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 02:46:15 +08:00
erioandClaude Opus 4.6 b693e46bee chore: bump version to 0.1.93.13
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 02:28:56 +08:00
erioandClaude Opus 4.6 254ded1b8f chore: bump version to 0.1.93.12
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 02:18:14 +08:00
erioandClaude Opus 4.6 eb4dbeb2bd chore: bump version to 0.1.93.11
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:53:31 +08:00
erioandClaude Opus 4.6 1747bf820f chore: bump version to 0.1.93.10
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:37:56 +08:00
erioandClaude Opus 4.6 d79b1c56fa chore: bump version to 0.1.93.9
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:29:27 +08:00
erioandClaude Opus 4.6 f9695ca83f chore: bump version to 0.1.93.8
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:18:01 +08:00
erioandClaude Opus 4.6 07082650bb chore: bump version to 0.1.93.7
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:43:21 +08:00
erioandClaude Opus 4.6 9e50163b80 chore: bump version to 0.1.93.6
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:46:08 +08:00
erioandClaude Opus 4.6 0af1f5841d fix: Sora task API improvements
- selectAccountByID: use original task's account for remix instead of
  random selection, preventing permission issues in OAuth path
- Upstream error passthrough: forward HTTP status code and body from
  upstream instead of always returning 500
- Add accountRepo to SoraTaskService for direct account lookup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:43:19 +08:00
erioandClaude Opus 4.6 4e14409d04 chore: bump version to 0.1.93.5
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 21:06:15 +08:00
erioandClaude Opus 4.6 e951651ee8 chore: bump version to 0.1.93.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:14:14 +08:00
erioandClaude Opus 4.6 7f3bf571da chore: bump version to 0.1.93.3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:59:51 +08:00
erioandClaude Opus 4.6 2b510b6aed chore: bump version to 0.1.93.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:19:23 +08:00
erioandClaude Opus 4.6 8c412b32d1 feat: add Sora async task API (videos/images)
Add async task management for Sora video/image generation with two
forwarding modes: OAuth (SDK) and API Key (HTTP upstream). Includes
background worker for status polling and 3-layer storage degradation
(S3 > local disk > upstream URL passthrough).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:19:11 +08:00
erioandClaude Opus 4.6 4fb58c66c4 chore: bump version to 0.1.93.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:36:25 +08:00
erioandClaude Opus 4.6 146f0baebc chore: bump version to 0.1.92.19
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:31:01 +08:00
erioandClaude Opus 4.6 3998e58b53 chore: bump version to 0.1.92.18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:20:55 +08:00
erioandClaude Opus 4.6 56c2799293 chore: bump version to 0.1.92.17
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 16:56:40 +08:00
erio 1d4e1feb93 chore: bump version to 0.1.92.16 2026-03-07 14:34:08 +08:00
erio 5f5c41cef6 chore: bump version to 0.1.92.15 2026-03-07 12:53:29 +08:00
erioandClaude Opus 4.6 1864f41f33 merge: sync upstream/main into release/custom-0.1.92
Merge upstream main branch changes including:
- OpenAI Codex support and websearch adaptation
- API key rate limit auto-reset fix
- golangci-lint v2.11 upgrade for Go 1.26 compatibility
- Go 1.26.1 stdlib security fixes
- Empty stream failover fix
- CCSwitch import improvements
- API key credentials preserve existing fields
- Usage query rate limit optimization
- Setup Token real utilization fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:53:12 +08:00
erio fcdd34ddb0 chore: bump version to 0.1.92.14 2026-03-07 12:34:48 +08:00
erio 98abcb30e4 chore: bump version to 0.1.92.13 2026-03-07 12:12:11 +08:00
erio ca5b3e6f7a chore: bump version to 0.1.92.12 2026-03-07 05:41:32 +08:00
erioandClaude Opus 4.6 ea5e5dd9c7 feat: display client affinity count badge in account status column
Add colored circle badge showing affinity client count before the account
status indicator. Badge color reflects count severity (gray=0, green=1-5,
yellow=6-15, red=16+). Tooltip shows full client ID list on hover.

Backend: AccountHandler batch queries reverse affinity index via
GetAccountAffinityClientsBatch, returns affinity_client_count and
affinity_clients in DTO. GatewayCache interface extended with the new
batch method backed by a Lua script (get_affinity_clients.lua).

All test mocks synchronized with updated GatewayCache interface.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 04:52:10 +08:00
erio fbdba40f59 chore: bump version to 0.1.92.11 2026-03-07 03:16:02 +08:00
erioandClaude Opus 4.6 9e107fae73 feat(sora): improve storage management page with split columns, test buttons, quota and video stats
- Split compound "Profile" column into separate Profile ID and Name columns
- Replace "Endpoint" column with "Storage Path" showing bucket/prefix or folder info
- Add GDrive quota display (capacity/used) via new backend API endpoint
- Add video count statistics per storage type via new backend API endpoint
- Add inline test button per profile with 15s timeout and per-profile loading state
- Backend: GetQuotaInfo, CountByStorageType, GetGDriveQuota, GetStorageVideoStats

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 23:58:27 +08:00
erio 298f5c1baf feat(sora): add GDrive full-cycle test endpoint (upload/download/delete) 2026-03-06 22:33:37 +08:00
erio e0a9c34067 Merge branch 'release/custom-0.1.92' into worktree-feature/sora 2026-03-06 20:47:06 +08:00
erioandClaude Opus 4.6 ad54040c07 feat(sora): add Google Drive storage backend with unified storage abstraction
- Define SoraObjectStorage interface abstracting S3 and GDrive backends
- Implement SoraGDriveStorage with OAuth2 and Service Account auth
- Add SoraStorageRouter to route requests based on active profile provider
- Add GDrive OAuth handler for authorization flow (start + callback)
- Extend profile model with provider, auth_type, and GDrive-specific fields
- Update frontend UI with provider selection, dynamic form fields, and i18n
- Migrate API paths from /sora-s3 to /sora-storage (old paths preserved)
- All existing S3 functionality remains backward compatible

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 20:45:51 +08:00
erioandClaude Opus 4.6 d7a3c7f8a8 chore: bump version to 0.1.92.10
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 20:07:02 +08:00
erioandClaude Opus 4.6 9430776393 chore: bump version to 0.1.92.9
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 20:03:29 +08:00
erioandClaude Opus 4.6 a4ee71d796 chore: bump version to 0.1.92.8
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:51:52 +08:00
erioandClaude Opus 4.6 da99de82e9 chore: bump version to 0.1.92.7
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 18:55:38 +08:00
erioandClaude Opus 4.6 e8e5acb9e7 revert: remove client affinity count display infrastructure
Remove frontend badge/tooltip and backend counting/query infrastructure
for client affinity. Core client affinity scheduling logic is preserved.

Removed:
- GatewayCache injection in AccountHandler
- GetAccountAffinityCount/Batch/Clients methods and interface
- AffinityClientInfo struct and ClientAffinityTTL function
- /affinity-clients API endpoint and route
- Reverse index (account_affinity:*) Lua scripts
- Frontend blue badge, tooltip, and lazy-load logic
- affinity_client_count field from types and response

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 18:47:52 +08:00
erioandClaude Opus 4.6 6315dea094 fix: prevent reverse affinity index from premature expiration
The reverse index account_affinity:{accountID} was using the same 1h
EXPIRE as the forward index. But the forward key EXPIRE refreshes on
every client request, while the reverse key only refreshes when a
request is routed to that specific account. This caused reverse keys
to expire prematurely.

Fix: set reverse key EXPIRE to 24h as safety net, rely on
ZREMRANGEBYSCORE for member-level expiration. Also clean up empty
keys after member cleanup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 18:04:52 +08:00
erio 5f4561306f chore: bump version to 0.1.92.5
Made-with: Cursor
2026-03-06 17:31:27 +08:00
erioandClaude Opus 4.6 af5d5dbcbc chore: bump version to 0.1.92.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:01:10 +08:00
yangjianbo a18bbb5f2f fix(openai): 统一专属倍率计费链路并补齐回归测试
抽取共享的用户分组专属倍率解析器,统一缓存、singleflight 与回退逻辑。\n\n让 OpenAI 独立计费链路复用专属倍率解析,修复 usage 记录与实际扣费未命中用户专属倍率的问题。\n\n补齐 OpenAI 计费与解析器单元测试,并修复全量回归中暴露的 lint 阻塞项。\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 16:47:51 +08:00