Commit Graph

205 Commits

Author SHA1 Message Date
Edric Li
fb86002ef9 feat: 添加模型白名单选择器组件,同步 new-api 模型列表
- 新增 ModelWhitelistSelector.vue 支持模型白名单多选
- 新增 ModelIcon.vue 显示品牌图标(基于 @lobehub/icons)
- 新增 useModelWhitelist.ts 硬编码各平台模型列表
- 更新账号编辑表单支持模型白名单配置
- 支持 Claude/OpenAI/Gemini/智谱/百度/讯飞等主流平台

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 16:03:48 +08:00
Wei Shaw
a1540e27c2 feat: 修复 OpenAI 402 报错自动切换问题 2025-12-31 11:46:53 +08:00
shaw
b7c6d040dd fix: 修复Antigravity token刷新间隔问题 2025-12-31 10:33:00 +08:00
song
aa4631640a Merge branch 'main' into fix/antigravity_auth_3 2025-12-31 00:36:43 +08:00
song
f284ea72fc refactor(Antigravity): 保存完整 API 响应到 extra 字段
- LoadCodeAssist/FetchAvailableModels 返回原始 JSON
- extra 新增 load_code_assist 和 available_models 保存原始响应
- 前端 tier 从 load_code_assist.paidTier.id 提取
- 删除冗余的 updateAccountTier 函数
2025-12-31 00:15:25 +08:00
song
0a4e0edc85 fix(Antigravity): 配额刷新时自动补充缺失的 project_id
旧账户可能没有 project_id,在刷新配额时自动生成并保存。
2025-12-30 23:58:03 +08:00
song
fa48cf27eb feat(Antigravity): 为无 project_id 的账户生成随机 project_id
部分账户类型(如 g1-pro-tier)API 不返回 cloudaicompanionProject,
但实际接受任意格式的 project_id,故添加随机生成逻辑作为兜底。
2025-12-30 23:54:33 +08:00
song
1c42403e6d fix(Antigravity): 支持无 project_id 的账户类型
- 移除 project_id 强制检查,部分账户类型 API 不返回此字段
- 重构:提取 antigravity.NewAPIRequest() 统一创建 API 请求
- quota_refresher: 无 project_id 时仍可更新 tier 信息
2025-12-30 23:42:50 +08:00
shaw
4319cf7f31 fix(仓储): 修复 BatchUpdateLastUsed 时间戳类型不匹配
在原生 SQL 的 CASE WHEN 语句中,PostgreSQL 无法自动推断占位符参数类型,
导致 time.Time 被当作 text 类型处理,与 last_used_at 列的 timestamptz 类型不匹配。

添加显式类型转换 ::timestamptz 解决此问题。
2025-12-30 23:11:49 +08:00
shaw
1ecef269f7 fix: 去除openai-apkey账户请求路径多余的v1 2025-12-30 23:07:25 +08:00
song
5844ea7e6e fix(Antigravity): 修复账号测试连接认证错误
- 新增 AntigravityGatewayService.TestConnection 方法,支持 Claude/Gemini 双协议测试
- AccountTestService 改用 AntigravityGatewayService 进行测试连接
- GetAvailableModels 为 Antigravity 账号返回 Claude + Gemini 模型列表
2025-12-30 22:42:00 +08:00
程序猿MT
5cad90fb4d Merge branch 'Wei-Shaw:main' into main 2025-12-30 17:14:39 +08:00
yangjianbo
8cb2d3b352 fix(仓储): 规范 rows.Close 错误回传
统一 usage_log_repo 查询的 Close 错误处理,避免\n成功路径吞掉关闭失败

scanSingleRow 使用 errors.Join 合并 Close 错误,\n保留 ErrNoRows 可判定

测试: make -C backend test-unit
2025-12-30 17:13:32 +08:00
shaw
3d296d8898 style: 修复 gofmt 格式化问题
格式化以下测试文件以符合 Go 代码风格规范:
- fixtures_integration_test.go
- user_repo_integration_test.go
- api_key_service_delete_test.go
2025-12-30 17:08:36 +08:00
yangjianbo
7e758b24c4 chore(依赖): 同步 Go 模块依赖
更新 go.mod/go.sum 的间接依赖记录
包含 gorm/mysql 相关依赖项
2025-12-30 16:43:18 +08:00
yangjianbo
aacbc98aec fix(仓储): 修复查询关闭错误并迁移集成测试
修复 rows.Close 失败时的错误返回逻辑
迁移网关路由集成测试到 ent 事务基建
补齐仓储接口变更对应的测试桩方法
新增 backend/Makefile 统一测试命令
测试: GOTOOLCHAIN=go1.24.11 go test ./...
测试: golangci-lint run ./... --timeout=5m
测试: make test-integration
2025-12-30 16:41:45 +08:00
yangjianbo
b9a753cd04 fix(仓库): 使用 ent 实现账号调度查询
替换 gorm 查询并复用分组过滤逻辑,避免编译错误
2025-12-30 14:35:29 +08:00
yangjianbo
809ea23587 Merge branch 'main' of https://github.com/mt21625457/aicodex2api 2025-12-30 14:15:52 +08:00
shaw
2004230b66 Merge branch 'fix/token-invalidation-on-password-change' 2025-12-30 11:19:58 +08:00
刀刀
0026e871f0 CC Stream 响应流中出现 error 时, 增加返回重试 (#86)
* 响应流中出现 error, 返回重试

* 响应流中出现 error, 返回重试
2025-12-30 10:48:55 +08:00
程序猿MT
7b2185eb5f Delete backend/Makefile 2025-12-30 10:13:42 +08:00
程序猿MT
23ef3da0f4 Remove redundant entry in Makefile 2025-12-30 10:09:29 +08:00
yangjianbo
e83f0ee307 Merge branch 'main' into test-dev 2025-12-30 09:07:55 +08:00
Junming Chen
19d0ee130d fix: implement token invalidation on password change 2025-12-29 17:18:17 -05:00
song
942c3e1529 Merge branch 'main' into feature/antigravity_auth_image 2025-12-29 21:29:38 +08:00
song
caa8c47b68 fix(antigravity): 修复 429 限流处理逻辑
- 只有 5 次重试全部失败后才标记账户限流
- 使用 Gemini 格式解析 429 响应中的重试时间
- Claude 模型无重试时间时默认 1 分钟,Gemini 默认 5 分钟
- 添加生图模型映射 gemini-3-pro-image-preview
2025-12-29 21:28:28 +08:00
shaw
c328b741cb Merge PR #73: feat(antigravity): 添加 Antigravity (Cloud AI Companion) 平台支持
新增功能:
- Antigravity OAuth 授权流程支持
- Claude → Gemini 协议转换(Claude API 请求自动转换为 Gemini 格式)
- 配额刷新和状态显示
- 混合调度功能,支持 Anthropic 和 Antigravity 账户混合使用
- /antigravity 专用路由,支持仅使用 Antigravity 账户
- 前端 Antigravity 服务商标识和账户管理功能

冲突解决:
- CreateAccountModal.vue: 合并 data-tour 属性和 mixed-scheduling 属性
- EditAccountModal.vue: 合并 data-tour 属性和 mixed-scheduling 属性

代码质量改进:
- 修复 antigravity 类型文件的 gofmt 格式问题(struct 字段对齐、interface{} → any)
- 移除 .golangci.yml 中的 gofmt 排除规则
- 修复测试文件的格式问题
2025-12-29 20:32:20 +08:00
yangjianbo
9d1d608f4f feat: 增加makefile编译脚本 2025-12-29 20:23:19 +08:00
yangjianbo
042d82359c fix(仓储): 修复 ApiKey 更新并发语义
ApiKey 更新时显式设置 updated_at 并回填,避免二次查询竞态
补充软删除范围注释以统一审计语义
2025-12-29 19:59:36 +08:00
yangjianbo
74db0c15ae chore(生成代码): 更新 ent 客户端与事务代码
同步生成文件以匹配最新的 schema 与运行时变更
2025-12-29 19:24:29 +08:00
yangjianbo
ae191f72a4 fix(仓储): 修复软删除过滤与事务测试
修复软删除拦截器使用错误,确保默认查询过滤已删记录
仓储层改用 ent.Tx 与扫描辅助,避免 sql.Tx 断言问题
同步更新集成测试以覆盖事务与统计变动
2025-12-29 19:23:49 +08:00
song
42e2c5061d fix: gofmt 2025-12-29 18:15:13 +08:00
song
380c43cb03 ci: 排除 antigravity 类型文件的 gofmt 检查 2025-12-29 18:11:51 +08:00
song
bc75edd800 style: interface{} → any (gofmt rewrite rule) 2025-12-29 18:05:05 +08:00
song
9774339fef fix: 删除 AntigravityQuotaRefresher 未使用的 oauthSvc 字段 2025-12-29 17:57:14 +08:00
song
026740b5e5 fix: 删除未使用的代码并修复格式
- 删除 client.go 中未使用的 proxyURL 字段
- 删除 AntigravityGatewayService 中未使用的字段和方法
- 修复 gofmt 格式问题
2025-12-29 17:54:38 +08:00
song
21a04332ec fix: 修复 golangci-lint 检查错误
- SA1029: 创建 ctxkey 包定义类型安全的 context key
- ST1005: 错误字符串首字母改小写
- errcheck: 显式忽略 bytes.Buffer.Write 返回值
- 修复单元测试中 GatewayService 缺少 cfg 字段的问题
2025-12-29 17:46:52 +08:00
song
2bd288a677 Merge branch 'main' into feature/antigravity_auth 2025-12-29 17:04:40 +08:00
yangjianbo
4dab18a94f fix(用户): 修复删除用户软删除钩子
避免软删除钩子类型断言失败导致 500\n删除无记录时返回未找到错误并记录日志
2025-12-29 16:57:50 +08:00
song
234e98f1b3 feat(antigravity): 保存 ineligibleTiers 原因信息 2025-12-29 16:55:17 +08:00
song
b31bfd53ab feat(antigravity): 添加专用路由,支持仅使用 antigravity 账户
添加 /antigravity/v1/* 和 /antigravity/v1beta/* 路由:
- 通过 ForcePlatform 中间件强制使用 antigravity 平台
- 跳过混合调度逻辑,仅调度 antigravity 账户
- 支持按分组优先查找,找不到时回退查询全部 antigravity 账户

修复 context key 类型不匹配问题:
- middleware 和 service 统一使用字符串常量 "ctx_force_platform"
- 解决 Go context.Value() 类型+值匹配导致的读取失败

其他改动:
- 嵌入式前端中间件白名单添加 /antigravity/ 路径
- e2e 测试 Gemini 端点 URL 添加 endpointPrefix 支持
2025-12-29 16:52:55 +08:00
IanShaw027
23412965f8 feat(frontend): 优化弹窗组件架构和用户体验
- 使用 BaseDialog 替代旧版 Modal 组件
- 添加平滑过渡动画和更好的可访问性支持
- 新增 ExportProgressDialog 导出进度弹窗
- 优化所有账号管理和使用记录相关弹窗
- 更新国际化文案,改进用户交互体验
- 精简依赖,减少 package.json 体积
2025-12-29 16:13:09 +08:00
yangjianbo
5584709ac9 fix(仓储层): 修复事务 ent client 调用 Close() 导致的 panic
问题:创建用户时发生 panic,错误信息为
"interface conversion: sql.ExecQuerier is *sql.Tx, not *sql.DB"

原因:基于事务创建的 ent client 在调用 Close() 时,ent 的 sql driver
会尝试将 ExecQuerier 断言为 *sql.DB 来关闭连接,但实际类型是 *sql.Tx

修复:移除对 txClient.Close() 的调用,事务的清理通过
sqlTx.Rollback() 和 sqlTx.Commit() 完成即可

影响范围:
- user_repo.go: Create 和 Update 方法
- group_repo.go: Delete 方法

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:49:20 +08:00
yangjianbo
305eaabb53 test(用户): 补齐创建用户与注册单测
覆盖管理员创建用户与注册流程的关键失败分支\n完善创建成功路径的断言
2025-12-29 15:22:50 +08:00
yangjianbo
f6de36cb04 test(删除): 添加删除单测并修复中间件测试
新增 AdminService 删除路径单元测试与规范场景更新\n同步调整 Google API Key 中间件测试桩与签名
2025-12-29 15:01:19 +08:00
yangjianbo
100d9d2034 test(服务层): 添加删除方法的单元测试
- 新增 AccountService.Delete 方法的 4 个测试用例
- 新增 ApiKeyService.Delete 方法的 4 个测试用例
- 使用 stub 模式隔离数据库依赖,验证权限检查和缓存清理逻辑
- 添加详细的中文注释说明测试设计和预期行为

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 14:29:51 +08:00
yangjianbo
e9c755f428 perf(后端): 优化删除操作的数据库查询性能
- 新增 ExistsByID 方法用于账号存在性检查,避免加载完整对象
- 新增 GetOwnerID 方法用于 API Key 所有权验证,仅查询 user_id 字段
- 优化 AccountService.Delete 使用轻量级存在性检查
- 优化 ApiKeyService.Delete 使用轻量级权限验证
- 改进前端删除错误提示,显示后端返回的具体错误消息
- 添加详细的中文注释说明优化原因

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 14:06:38 +08:00
yangjianbo
bbd6236385 fix(数据库): 补充默认分组种子迁移
确保安装时至少存在一个默认分组
2025-12-29 11:48:19 +08:00
yangjianbo
cc4da2ae82 fix(数据库): 修复使用记录缓存列命名不一致
新增迁移补齐 cache_creation_5m_tokens/cache_creation_1h_tokens 列,并从旧列回填数据
2025-12-29 11:45:07 +08:00
yangjianbo
8ab924ad9b fix(构建): 删除遗留的 GORM auto_migrate.go 文件
该文件是 GORM 迁移到 Ent ORM 过程中遗留的,仍然导入了
gorm.io/gorm,导致 Docker 构建失败。

文件中的功能已被迁移到 SQL 迁移文件中:
- fixInvalidExpiresAt → 006_fix_invalid_subscription_expires_at.sql
- ensureDefaultGroups → 001_init.sql

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 11:18:00 +08:00