erio
c848f950ce
docs+ui: add bilingual payment integration doc and rename purchase entry to recharge/subscription
2026-03-01 02:19:07 +08:00
erio
fcc77d1383
refactor(purchase): use URL/searchParams only for purchase query merge
2026-03-01 02:04:19 +08:00
erio
997cd1e332
docs+ui: add bilingual payment integration doc and rename purchase entry to recharge/subscription
2026-03-01 01:53:14 +08:00
erio
2e88e23002
feat(frontend): append purchase query params and make integration doc bilingual
2026-03-01 00:57:26 +08:00
shaw
f7fa71bc28
fix: 将 README 中 Codex WS 配置迁移至使用密钥弹窗
...
- 移除 README.md / README_CN.md 中的 Codex CLI WebSocket v2 配置示例
- UseKeyModal OpenAI 分组新增 "Codex CLI (WebSocket)" tab,区分普通模式与 WS 模式
- 普通模式 config.toml 不含 WebSocket 字段,WS 模式包含 supports_websockets 和 features 配置
- 所有配置统一使用 sub2api 作为 model_provider 名称
2026-02-28 23:35:31 +08:00
Wesley Liddick
9fd95df5cf
Merge pull request #679 from DaydreamCoding/feat/account-rpm-limit
...
feat: 添加账号级别 RPM(每分钟请求数)限流功能
2026-02-28 22:37:10 +08:00
QTom
e63c83955a
fix: address deep code review issues for RPM limiting
...
- Move IncrementRPM after Forward success to prevent phantom RPM
consumption during account switch retries
- Add base_rpm input sanitization (clamp to 0-10000) in Create/Update
- Add WindowCost scheduling checks to legacy path sticky sessions
(4 check sites + 4 prefetch sites), fixing pre-existing gap
- Clean up rpm_strategy/rpm_sticky_buffer when disabling RPM in
BulkEditModal (JSONB merge cannot delete keys, use empty values)
- Add json.Number test cases to TestGetBaseRPM/TestGetRPMStickyBuffer
- Document TOCTOU race as accepted soft-limit design trade-off
2026-02-28 20:38:06 +08:00
QTom
4b72aa33f3
fix: add enableRpmLimit to hasAnyFieldEnabled check in BulkEditModal
...
Without this, submitting a bulk edit with only RPM changes would be
rejected as "no fields selected".
2026-02-28 20:37:37 +08:00
QTom
607237571f
fix: address code review issues for RPM limiting feature
...
- Use TxPipeline (MULTI/EXEC) instead of Pipeline for atomic INCR+EXPIRE
- Filter negative values in GetBaseRPM(), update test expectation
- Add RPM batch query (GetRPMBatch) to account List API
- Add warn logs for RPM increment failures in gateway handler
- Reset enableRpmLimit on BulkEditAccountModal close
- Use union type 'tiered' | 'sticky_exempt' for rpmStrategy refs
- Add design decision comments for rdb.Time() RTT trade-off
2026-02-28 20:37:37 +08:00
QTom
28ca7df297
feat: add RPM display to AccountCapacityCell
2026-02-28 20:37:10 +08:00
QTom
856c955386
feat: add RPM config to CreateAccountModal
2026-02-28 20:37:10 +08:00
QTom
e1c9016d90
feat: add RPM config to EditAccountModal
2026-02-28 20:37:10 +08:00
QTom
953c5036bf
feat: add RPM types and i18n translations
2026-02-28 20:37:10 +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
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
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
bb664d9bbf
feat(sync): full code sync from release
2026-02-28 15:01:20 +08:00
erio
65e0c1b258
fix: pass theme to purchase iframe and optimize embed layout
2026-02-28 14:08:53 +08:00
erio
14c80d26c6
fix: unify purchase url for iframe and new-tab
2026-02-28 10:37:25 +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
Wesley Liddick
3bae525026
Merge pull request #650 from wucm667/feat/sync-page-title-on-locale-change
...
feat(i18n): 切换语言时同步更新页面标题
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
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
wucm667
6460d4ad3a
fix(frontend): add priority hint in edit account modal
2026-02-27 16:00:11 +08:00
erio
886464b2e9
Merge branch 'feature/claude-max-simulation-review' into release/custom-0.1.86
...
# Conflicts:
# backend/cmd/server/VERSION
2026-02-27 09:58:01 +08:00
erio
a6f9f9f968
feat: replace gemini-3-pro-image with gemini-3.1-flash-image
...
- Add migration 060 to update model_mapping for all antigravity accounts
- Remove gemini-3-pro-image and gemini-3-pro-image-preview mappings
- Add gemini-3.1-flash-image and gemini-3.1-flash-image-preview mappings
- Update frontend usage window to show GImage for new model
- Update isImageGenerationModel to support new model
2026-02-27 09:52:50 +08:00
erio
756b09b6b8
feat: replace gemini-3-pro-image with gemini-3.1-flash-image
...
- Add migration 060 to update model_mapping for all antigravity accounts
- Remove gemini-3-pro-image and gemini-3-pro-image-preview mappings
- Add gemini-3.1-flash-image and gemini-3.1-flash-image-preview mappings
- Update frontend usage window to show GImage for new model
- Update isImageGenerationModel to support new model
2026-02-27 09:30:44 +08:00
erio
1fb6e9e830
feat: add claude max usage simulation with group switch
2026-02-27 01:54:54 +08:00
cagedbird043
32b7c0ca9b
feat(frontend): 补齐 GPT-5.3 系列模型到白名单、批量编辑列表与预设映射
...
- useModelWhitelist.ts 添加 gpt-5.3-codex、gpt-5.3-codex-spark
- BulkEditAccountModal.vue 添加 5.3 模型选项与预设按钮(含 5.2→5.3 升级映射)
2026-02-26 16:04:15 +08:00
cagedbird043
685a1e0ba3
feat(i18n): 添加批量编辑跨平台警告的中英文翻译
2026-02-26 15:24:50 +08:00
cagedbird043
e350aab1bd
fix(frontend): 批量编辑添加跨平台模型映射警告与过滤
...
- 新增 selectedPlatforms prop,从父组件传入选中账号的平台集合
- 根据选中平台过滤模型列表与预设映射按钮,避免误操作
- 混选多平台时显示 amber 警告横幅,提醒用户注意映射适用性
- 仅警告不阻断,保持加法兼容
2026-02-26 15:24:50 +08:00
cagedbird043
f96a2a18c1
feat(opencode): 更新 opencode.json 模板至 Claude 4.6(默认启用 thinking)
2026-02-26 14:27:51 +08:00
cagedbird043
f955b04a6f
feat(frontend): 补齐 Antigravity Claude 4.6 前端预设映射与显示
2026-02-26 14:27:51 +08:00
wucm667
82fbf452a8
feat(i18n): 切换语言时同步更新页面标题
...
- resolveDocumentTitle() 新增 titleKey 参数,优先通过 i18n 翻译
- router beforeEach 中将路由 meta.titleKey 传入标题解析函数
- setLocale() 切换语言后同步刷新 document.title
2026-02-26 14:04:13 +08:00
erio
efe8810dff
fix: remove duplicate model_mapping field in GeminiCredentials
...
The field was defined twice (line 563 and 585) due to merge conflict
with upstream v0.1.86, causing TypeScript compilation error TS2300.
2026-02-25 22:10:57 +08:00
erio
496173da1f
merge: 合并上游 v0.1.86 到 main 分支
2026-02-25 19:02:10 +08:00
erio
e2b3969492
ui: 减小模型限流徽章区域间距,与用量窗口列高度对齐
2026-02-25 18:51:49 +08:00
cagedbird043
7918fc2844
feat: 对齐 Gemini v1beta 模板模型与顺序
2026-02-25 15:19:23 +08:00
cagedbird043
d217b59e0b
feat: 补齐 Antigravity OpenCode 模板模型配置
2026-02-25 14:17:31 +08:00
cagedbird043
169a4b9d32
feat: 补齐 OpenAI OpenCode 模板模型配置
2026-02-25 14:17:31 +08:00
huangenjun
26060e702f
feat: Sora 平台支持手动导入 Access Token
...
新增 Access Token 输入方式,支持批量粘贴(每行一个)直接创建账号,
无需经过 OAuth 授权流程。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 11:33:07 +08:00
Wesley Liddick
609abbbd7c
Merge pull request #624 from cagedbird043/pr/antigravity-gemini31-passthrough-buttons
...
feat: 补充 Antigravity 的 Gemini 3.1 Pro 透传快捷按钮
2026-02-25 08:45:49 +08:00
erio
8365a8328b
merge: resolve conflicts with upstream/main (Gemini 3→3.1 mappings)
2026-02-25 00:38:39 +08:00
erio
c671e8dd1d
fix: 统一gemini-3默认映射为非强制3.1
2026-02-24 23:24:48 +08:00