- 17 Mar, 2026 13 commits
-
-
Wesley Liddick authored
feat: 个人资料弹窗 GitHub 链接仅对管理员可见
-
Wesley Liddick authored
fix(usage): use real reset header for 5h session window countdown fix issue #1064 #1065
-
Eric authored
目前作者已有商业站信息,面向管理可提供赞助渠道,面向普通用户请考虑提供信息隐藏措施
-
haruka authored
- Add compile-time interface assertion for sessionWindowMockRepo - Fix flaky fallback test by capturing time.Now() before calling UpdateSessionWindow - Replace stale hardcoded timestamps with dynamic future values - Add millisecond detection and bounds validation for reset header timestamp - Use pause/resume pattern for interval in UsageProgressBar to avoid idle timers on large lists - Fix gofmt comment alignment Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Wesley Liddick authored
fix(proxy): encode special chars in proxy credentials
-
Wesley Liddick authored
fix(auto setup): 修复初始测试连接硬编码问题导致使用自定义数据库测试失败无法执行 auto setup流程
-
Wesley Liddick authored
refactor(antigravity): unify TestConnection with dispatch retry loop
-
Wesley Liddick authored
feat(dashboard): add per-user drill-down for distribution charts
-
Wesley Liddick authored
fix(oauth): extract system-role input items into instructions field fix issue #1066
-
Wesley Liddick authored
fix(openai): use /usage as single source and zero expired codex windows
-
Wesley Liddick authored
feat(frontend): set last 24h as default range in Usage and Dashboard
-
Wesley Liddick authored
feat(backup): 备份/恢复异步化,解决 504 超时
-
luxiang authored
-
- 16 Mar, 2026 27 commits
-
-
clover614 authored
-
erio authored
TestConnection now reuses antigravityRetryLoop instead of a standalone HTTP loop, gaining credits overages, smart retry, and 429/503 backoff for free. AccountSwitchError is caught and surfaced as a friendly message. Also populates RateLimitedModel in TempUnscheduled switch error. Test fixes: - Use RATE_LIMIT_EXCEEDED in 503 short-delay test to avoid 60x1s timeout - Clamp waitDuration=0 instead of 999s to avoid 15s max-wait timeout - Enhance mockSmartRetryUpstream with repeatLast and body caching
-
erio authored
The expanded user breakdown rows already align with the parent table columns (Requests, Token, Actual, Standard), so the repeated sub-header wastes vertical space. Remove the <thead> from UserBreakdownSubTable.
-
erio authored
-
erio authored
Handler tests (9 cases): group_id/model/endpoint filters, default endpoint_type, custom limit, limit clamping, response format, empty result, no-filter pass-through. Repository test: resolveEndpointColumn mapping for inbound/upstream/path.
-
erio authored
Click on a group name, model name, or endpoint name in the distribution tables to expand and show per-user usage breakdown (requests, tokens, actual cost, standard cost). Backend: new GET /admin/dashboard/user-breakdown API with group_id, model, endpoint, endpoint_type filters. Frontend: clickable rows with expand/collapse sub-table in all three distribution charts.
-
Elysia authored
The 5h window reset time displayed for Setup Token accounts was inaccurate because UpdateSessionWindow predicted the window end as "current hour + 5h" instead of reading the actual `anthropic-ratelimit-unified-5h-reset` response header. This caused the countdown to differ from the official Claude page. Backend: parse the reset header (Unix timestamp) and use it as the real window end, falling back to the hour-truncated prediction only when the header is absent. Also correct stale predictions when a subsequent request provides the real reset time. Frontend: add a reactive 60s timer so the reset countdown in UsageProgressBar ticks down in real-time instead of freezing at the initial value. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Elysia authored
OAuth upstreams (ChatGPT) reject requests containing role:"system" in the input array with HTTP 400 "System messages are not allowed". Extract such items before forwarding and merge their content into the top-level instructions field, prepending to any existing value. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Ethan0x0000 authored
-
Ethan0x0000 authored
-
Ethan0x0000 authored
-
QTom authored
POST /backups 和 POST /backups/:id/restore 改为异步:立即返回 HTTP 202, 后台 goroutine 独立执行 pg_dump → gzip → S3 上传,前端每 2s 轮询状态。 后端: - 新增 StartBackup/StartRestore 方法,后台 goroutine 不依赖 HTTP 连接 - Graceful shutdown 等待活跃操作完成,启动时清理孤立 running 记录 - BackupRecord 新增 progress/restore_status 字段支持进度和恢复状态追踪 前端: - 创建备份/恢复后轮询 GET /backups/:id 直到完成或失败 - 标签页切换暂停/恢复轮询,组件卸载清理定时器 - 正确处理 409(备份进行中)和轮询超时 Co-Authored-By:Claude Opus 4.6 (1M context) <noreply@anthropic.com>
-
Wesley Liddick authored
fix(antigravity): add stream keepalive to prevent connection drops
-
shaw authored
Docker named volumes and host bind-mounts may be owned by root, causing "open data/model_pricing.sha256: permission denied" when the container runs as the non-root sub2api user. Add an entrypoint script that fixes /app/data ownership before dropping to sub2api via su-exec. Replace USER directive with the entrypoint approach across all three Dockerfiles and update both GoReleaser configs to include the script in Docker build contexts.
-
Wesley Liddick authored
fix(i18n): correct usage label from "Total" to "Last 30d"
-
erio authored
The usage stats query defaults to a 30-day rolling window, but the UI label said "Total"/"累计" implying lifetime aggregation. Rename to "Last 30d"/"近30天" so the label matches the actual query semantics. Closes #1060
-
kunish authored
Antigravity streaming handlers were missing the keepalive mechanism that exists in the standard gateway, causing proxy/CDN idle timeouts to break connections during long thinking phases (e.g. claude-opus-4-6). This resulted in truncated responses with missing tool calls. Add StreamKeepaliveInterval support to all three Antigravity streaming paths: Claude SSE, Gemini SSE, and upstream passthrough.
-
Wesley Liddick authored
fix(admin/accounts): make usage window refresh deterministic and restore missing stats
-
Wesley Liddick authored
chore(antigravity): bump default User-Agent version to 1.20.5
-
shaw authored
-
Ethan0x0000 authored
- Simplify OpenAI rendering: always fetch /usage, prefer fetched data over codex snapshot (snapshot serves as loading placeholder only) - Remove dead code: preferFetchedOpenAIUsage, isOpenAICodexSnapshotStale, and unreachable template branch - Add today-stats support for key accounts (req/tokens/A/U badges) - Use formatCompactNumber for consistent number formatting - Add A/U badge titles for clarity - Filter zero-value window stats in UsageProgressBar to avoid empty badges - Update tests to match new fetched-data-first behavior
-
Ethan0x0000 authored
- Pass todayStats/todayStatsLoading to AccountUsageCell for key accounts - Propagate usageManualRefreshToken to force usage reload on explicit refresh - Refresh today stats when toggling usage/today_stats columns visible
-
Ethan0x0000 authored
- Add formatCompactNumber() for consistent large-number formatting (K/M/B) - Include last_used_at in OpenAI usage refresh key for better change detection - Add .gitattributes eol=lf rules for frontend source files
-
Ethan0x0000 authored
Removes hasMeaningfulWindowStats guard so the /usage endpoint consistently returns WindowStats for both time windows. The frontend now controls zero-value display filtering at the component level.
-
Ethan0x0000 authored
UpdateAccount previously required len(input.Extra) > 0, causing explicit empty payloads (extra:{}) to be silently skipped. Change condition to input.Extra != nil so clearing quota keys actually persists. -
erio authored
-
Wesley Liddick authored
fix(billing): add window expiration check to Redis rate limit Lua script
-