QTom
678c3ae132
feat: integrate RPM scheduling checks into account selection flow
2026-02-28 20:37:10 +08:00
QTom
c1c31ed9b2
feat: wire RPMCache into GatewayService and AccountHandler
2026-02-28 20:35:38 +08:00
QTom
777be05348
feat: add RPMCache interface and Redis implementation with Lua scripts
2026-02-28 20:34:22 +08:00
QTom
0bb3e4a98c
feat: add RPM getter methods and schedulability check to Account model
2026-02-28 20:34:22 +08:00
QTom
9a91815b94
feat(admin): 完整实现管理员修改用户 API Key 分组的功能
...
## 核心功能
- 添加 AdminUpdateAPIKeyGroupID 服务方法,支持绑定/解绑/保持不变三态语义
- 实现 UserRepository.AddGroupToAllowedGroups 接口,自动同步专属分组权限
- 添加 HTTP PUT /api-keys/:id handler 端点,支持管理员直接修改 API Key 分组
## 事务一致性
- 使用 ent Tx 保证专属分组绑定时「添加权限」和「更新 Key」的原子性
- Repository 方法支持 clientFromContext,兼容事务内调用
- 事务失败时自动回滚,避免权限孤立
## 业务逻辑
- 订阅类型分组阻断,需通过订阅管理流程
- 非活跃分组拒绝绑定
- 负 ID 和非法 ID 验证
- 自动授权响应,告知管理员成功授权的分组
## 代码质量
- 16 个单元测试覆盖所有业务路径和边界用例
- 7 个 handler 集成测试覆盖 HTTP 层
- GroupRepo stub 返回克隆副本,防止测试间数据泄漏
- API 类型安全修复(PaginatedResponse<ApiKey>)
- 前端 ref 回调类型对齐 Vue 规范
## 国际化支持
- 中英文提示信息完整
- 自动授权成功/失败提示
2026-02-28 20:18:14 +08:00
QTom
000e621eb6
feat(admin): 添加管理员直接修改用户 API Key 分组的功能
...
- 新增 PUT /api/v1/admin/api-keys/:id 端点,允许管理员修改任意用户 API Key 的分组绑定
- 跳过用户级权限校验但保留分组有效性验证,修改后触发认证缓存失效
- Service 层支持三态语义:nil=不修改,0=解绑,>0=绑定,<0=拒绝
- 指针值拷贝保证安全隔离,负数 groupID 返回 400 INVALID_GROUP_ID
- 前端 UserApiKeysModal 新增可点击的分组选择下拉框,支持多 Key 并发更新
- 下拉支持视口翻转和滚动关闭,按钮有 disabled 和加载状态
- 覆盖:后端 20 个单元测试 (Service 11 + Handler 9) + 前端 16 个 E2E 测试
- golangci-lint 0 issues, make test-unit 全部通过
2026-02-28 20:18:14 +08:00
erio
7064063230
fix: wrap handleSubmit in form onSubmit to fix TS type mismatch
2026-02-28 19:53:25 +08:00
erio
b1de4352a8
fix: update mixed channel test assertions for Chinese message
2026-02-28 19:41:55 +08:00
erio
7bf5c1cbcb
chore: bump version to 0.1.87.7
2026-02-28 19:32:24 +08:00
erio
411e24146d
feat: bulk update accounts pre-check mixed channel risk with confirm dialog
...
- Move mixed channel check before any DB writes in BulkUpdateAccounts
- Return 409 from BulkUpdate handler for MixedChannelError
- Add ConfirmDialog to BulkEditAccountModal for mixed channel warning
- Update mixed channel warning message to Chinese
2026-02-28 19:31:57 +08:00
alfadb
093d7ba858
fix(ops): use normalized error type for all classification functions
...
- Compute normalizedType once and pass to classifyOpsPhase,
classifyOpsSeverity, classifyOpsIsBusinessLimited, classifyOpsIsRetryable
instead of raw parsed.ErrorType
- Add test case verifying known type takes precedence over conflicting code
Addresses Copilot review feedback on PR #680 .
2026-02-28 19:28:08 +08:00
alfadb
ce006a7a91
fix(ops): validate error_type against known whitelist before classification
...
Upstream proxies (account 4, 112) return `"<nil>"` as the error.type in
their JSON responses — a Go fmt.Sprintf("%v", nil) artifact. Since
`normalizeOpsErrorType` only checked for empty string, the literal
"<nil>" passed through and poisoned the entire classification chain:
error_phase was misclassified as "internal" (instead of "request"),
severity was inflated to P2, and the stored error_type was meaningless.
Add `isKnownOpsErrorType` whitelist so any unrecognised type falls
through to the code-based or default "api_error" classification.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-28 19:28:08 +08:00
Wesley Liddick
9d795061af
Merge pull request #682 from mt21625457/pr/all-code-sync-20260228
...
feat(openai-ws): support websocket mode v2, optimize relay performance, enhance sora
2026-02-28 19:11:40 +08:00
erio
c7392fc80b
fix: make purchase iframe fully fill container
2026-02-28 18:58:19 +08:00
erio
c37c68a341
feat: append auth token to purchase iframe url
2026-02-28 16:02:55 +08:00
erio
9230d3cbc9
fix: streamline purchase embed layout with floating open button
2026-02-28 15:26:16 +08:00
yangjianbo
1d1fc019dc
fix(lint): resolve data management staticcheck warnings
2026-02-28 15:05:54 +08:00
yangjianbo
bb664d9bbf
feat(sync): full code sync from release
2026-02-28 15:01:20 +08:00
erio
19925e22d9
chore: bump version to 0.1.87.3
2026-02-28 14:09:02 +08:00
erio
65e0c1b258
fix: pass theme to purchase iframe and optimize embed layout
2026-02-28 14:08:53 +08:00
Wesley Liddick
bfc7b339f7
Merge pull request #675 from wucm667/fix/gosec-timeout-exclude-ent-dir
...
fix(ci): 修复 gosec 扫描因 ent 生成代码导致超时的问题
2026-02-28 10:59:19 +08:00
erio
94bdde32bb
chore: bump version to 0.1.87.2
2026-02-28 10:37:42 +08:00
erio
14c80d26c6
fix: unify purchase url for iframe and new-tab
2026-02-28 10:37:25 +08:00
wucm667
f30f8905ec
fix(ci): 修复 gosec 扫描因 ent 生成代码导致超时的问题
...
【问题描述】
backend-security CI job 持续运行约 6 小时后被 GitHub Actions 强制取消,
表现为 'Run gosec' 步骤挂起,最终以 cancelled 状态结束。
【根本原因】
gosec 对 ./... 执行 AST 静态分析时,包含了 ent/ 目录下的
自动生成文件(如 mutation.go 共 24800 行),导致分析时间
超出 GitHub Actions 默认的 6 小时上限。
【修复方案】
1. gosec 命令增加 -exclude-dir=ent 跳过自动生成代码目录
2. backend-security job 增加 timeout-minutes: 15,避免未来
类似问题再次长时间卡死后才被发现
ent/ 目录内容全部由 Ent ORM 框架自动生成,开发者不直接编写,
不需要纳入人工安全审计范围,排除后不影响扫描有效性。
2026-02-28 10:20:57 +08:00
erio
9555a99d1c
chore: bump version to 0.1.87.1
2026-02-27 21:24:03 +08:00
erio
0e69895603
Merge branch 'main' into release/custom-0.1.87
...
# Conflicts:
# frontend/src/components/keys/UseKeyModal.vue
2026-02-27 21:20:22 +08:00
erio
cc3cf1d70a
chore: bump version to 0.1.86.10
2026-02-27 21:02:24 +08:00
erio
3382d496e3
refactor: remove unused detectClaudeMaxCacheBillingOutcomeForUsage function
2026-02-27 20:56:33 +08:00
erio
e0b4b00dc1
chore: bump version to 0.1.86.9
2026-02-27 20:45:52 +08:00
erio
81d896bf78
fix: sync Antigravity ForwardResult.Usage with client response simulation
...
Apply Claude Max cache billing to usage before returning ForwardResult
in Antigravity Forward, ensuring RecordUsage gets the same simulated
usage that clients see. Restore apply+fallback in RecordUsage for
consistency across GatewayService and Antigravity paths.
2026-02-27 20:42:53 +08:00
erio
ec576fdbde
chore: bump version to 0.1.86.8
2026-02-27 19:59:51 +08:00
erio
741eae59bb
refactor: decouple claude max cache simulation from RecordUsage
...
Extract setupClaudeMaxStreamingHook and applyClaudeMaxNonStreamingRewrite
facade functions to helpers file. RecordUsage now uses detect-only (no
mutation), client response rewriting handled at Forward layer.
2026-02-27 19:59:36 +08:00
Wesley Liddick
3bae525026
Merge pull request #650 from wucm667/feat/sync-page-title-on-locale-change
...
feat(i18n): 切换语言时同步更新页面标题
v0.1.87
2026-02-27 19:48:36 +08:00
shaw
df00805a2a
feat(frontend): 为管理端用量页面添加列显示设置
2026-02-27 19:41:26 +08:00
Wesley Liddick
a88ee96518
Merge pull request #665 from touwaeriol/fix/2k-image-default-pricing
...
fix: add 2K image default pricing at 1.5x base price
2026-02-27 19:20:44 +08:00
Wesley Liddick
3cc2f9bd57
Merge pull request #664 from wucm667/fix/account-priority-hint
...
fix(frontend): add priority hint in edit account modal
2026-02-27 19:19:36 +08:00
erio
d1b684b782
fix: add 2K image default pricing at 1.5x base price
...
Previously 2K images used the same base price as 1K ($0.134).
Now 2K uses 1.5x multiplier ($0.201), consistent with 4K using 2x ($0.268).
- Backend: add 2K size branch in getDefaultImagePrice
- Frontend: update 2K placeholder from 0.134 to 0.201
- Tests: update assertions for new 2K default price
2026-02-27 17:37:30 +08:00
erio
505494b378
fix: update 2K image price placeholder from 0.134 to 0.201
2026-02-27 17:18:24 +08:00
erio
c1033c12bd
chore: bump version to 0.1.86.6
2026-02-27 16:38:35 +08:00
erio
b789333b68
test: stabilize subscription progress day assertion
2026-02-27 16:35:37 +08:00
erio
61ef73cb12
refactor: isolate claude max response usage simulation by group toggle
2026-02-27 16:14:07 +08:00
wucm667
6460d4ad3a
fix(frontend): add priority hint in edit account modal
2026-02-27 16:00:11 +08:00
Wesley Liddick
19ea392d5d
Merge pull request #663 from touwaeriol/fix/update-antigravity-useragent-version
...
fix: update antigravity user-agent version to 1.19.6
2026-02-27 15:28:45 +08:00
Wesley Liddick
fb4d016176
Merge pull request #659 from touwaeriol/feature/gemini-3.1-flash-image
...
feat: 新增 gemini-3.1-flash-image 支持,替代 gemini-3-pro-image
2026-02-27 15:28:33 +08:00
erio
e71be7e0f1
fix: update image pricing tests for 2K tier and refactor claude max billing policy
...
- Update 5 test assertions to match new 2K default price ($0.201 = base * 1.5)
- Refactor claude max cache billing policy into reusable functions
2026-02-27 15:13:05 +08:00
erio
0302c03864
fix: add 2K image pricing at 1.5x base price
2026-02-27 15:00:18 +08:00
erio
d21fe54d55
chore: bump version to 0.1.86.5
2026-02-27 12:55:05 +08:00
erio
a70d3ff82d
fix: update antigravity user-agent version to 1.19.6
2026-02-27 12:36:50 +08:00
erio
afec747d9e
fix: update antigravity user-agent version to 1.19.6
...
Update the default user-agent version from 1.18.4 to 1.19.6
to match the latest official antigravity client.
2026-02-27 12:31:51 +08:00
erio
574359f1df
chore: bump version to 0.1.86.4
2026-02-27 12:24:02 +08:00