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 |
|
song
|
1ad29032d3
|
feat(antigravity): 添加混合调度可选功能
- 后端:账户模型添加 IsMixedSchedulingEnabled() 方法,读取 extra.mixed_scheduling
- 后端:gateway_service 和 gemini_messages_compat_service 支持混合调度逻辑
- 后端:分组创建支持指定 platform 参数
- 前端:账户创建/编辑弹窗添加混合调度开关(仅 antigravity 账户显示)
- 前端:混合调度开关添加问号图标和 tooltip 说明
- 前端:GroupSelector 支持根据 mixedScheduling 属性过滤分组
- 前端:分组创建支持选择 platform
- 测试:e2e 测试添加 ENDPOINT_PREFIX 环境变量支持混合/隔离模式测试
- 测试:删除过时的 Claude signature 测试用例
|
2025-12-29 09:44:39 +08:00 |
|
song
|
cf1d0f23cc
|
feat(antigravity): 添加账户类型(tier)显示功能
|
2025-12-29 01:25:09 +08:00 |
|
song
|
995adaeee4
|
test: 添加 Claude signature 场景 e2e 测试
- 新增 TestClaudeMessagesWithClaudeSignature 测试
- 验证历史 thinking block 带有 Claude signature 时的处理
- 修复配额刷新服务的次要问题
|
2025-12-29 00:44:07 +08:00 |
|
song
|
08ce6de4db
|
feat(antigravity): 添加配额窗口显示功能
后端:
- 新增 AntigravityQuotaRefresher 定时刷新配额
- Client 添加 FetchAvailableModels 方法获取模型配额
- 配额数据存入 account.extra.quota 字段
前端:
- AccountUsageCell 支持显示 Antigravity 账户配额
- UsageProgressBar 新增 amber 颜色
- 显示 G3P/G3F/G3I/C4.5 四个配额进度条
|
2025-12-28 22:29:01 +08:00 |
|
song
|
b6b739431c
|
build: e2e 测试添加 build tag 避免 CI 运行
- 添加 //go:build e2e tag,CI 不会自动运行这些测试
- Makefile 添加 test-e2e 目标用于本地手动运行
|
2025-12-28 21:59:40 +08:00 |
|
song
|
ad15d9970c
|
fix(gateway): Antigravity 账户 count_tokens 返回估算值
Antigravity 不支持 count_tokens 转发,直接返回估算值,
与 Antigravity-Manager 和 proxycast 实现保持一致。
修复 count_tokens 请求选择到 Antigravity 账户时导致 401 的问题。
|
2025-12-28 21:56:52 +08:00 |
|
song
|
ff57c860e3
|
test: 更新 thinking signature 测试用例
将测试从无效signature改为无signature场景:
- 无效 signature 应该被上游拒绝(预期行为)
- Gemini 模型接受没有 signature 的 thinking block
|
2025-12-28 21:40:35 +08:00 |
|
song
|
635d7e77e1
|
fix(antigravity): 只有 Gemini 模型支持 dummy thought signature
参考 Antigravity-Manager 的实现:
- 添加 allowDummyThought 参数,只有 gemini-* 模型才启用
- Claude 模型通过 Vertex API 需要有效的 thought signatures
- thinking block 保留原有 signature
- tool_use 只在 Gemini 模型时才使用 dummy signature
|
2025-12-28 21:36:21 +08:00 |
|
song
|
ba9eb684ed
|
fix(antigravity): 与 proxycast 保持一致的 thought_signature 处理
- function_call 无条件添加 dummy thought_signature(与 proxycast 一致)
- thinking block 在 thinking 模式下统一使用 dummy signature 替换历史无效 signature
- 添加测试用例:TestClaudeMessagesWithInvalidThinkingSignature
|
2025-12-28 21:29:16 +08:00 |
|
song
|
9594c9c83a
|
fix(antigravity): 修复 Gemini 3 thought_signature 和 schema 验证问题
- 添加 dummyThoughtSignature 常量,在 thinking 模式下为无 signature 的 tool_use 自动添加
- 增强 cleanJSONSchema:过滤 required 中不存在的属性,确保 type/properties 字段存在
- 扩展 excludedSchemaKeys:增加 $id, $ref, strict, const, examples 等不支持的字段
- 修复 429 重试逻辑:仅在所有重试失败后才标记账户为 rate_limited
- 添加 e2e 集成测试:TestClaudeMessagesWithThinkingAndTools
|
2025-12-28 21:25:04 +08:00 |
|
song
|
ff06583c5d
|
Merge branch 'main' into feature/antigravity_auth
|
2025-12-28 18:46:18 +08:00 |
|
song
|
b0389ca4d2
|
feat: 实现 Antigravity Claude → Gemini 协议转换,haiku 映射到 gemini-3-flash
|
2025-12-28 18:41:55 +08:00 |
|
song
|
1d085d982b
|
feat: 完善 Antigravity 多平台网关支持,修复 Gemini handler 分流逻辑
|
2025-12-28 17:48:52 +08:00 |
|
shaw
|
fb9d087838
|
Merge PR #62: refactor(frontend): 前端界面优化与订阅状态管理增强
|
2025-12-28 16:26:13 +08:00 |
|
Wesley Liddick
|
18c6686fed
|
Merge branch 'main' into feature/ui-improvements-clean
|
2025-12-28 03:22:11 -05:00 |
|
song
|
6648e6506c
|
feat: 添加 Antigravity (Cloud AI Companion) OAuth 授权支持
|
2025-12-28 15:54:42 +08:00 |
|
IanShaw027
|
386f6da14d
|
fix(frontend): 移除DataTable中未使用的函数和变量
- 移除未使用的 hasExpandableActions 计算属性
- 移除未使用的 toggleActionsExpanded 函数
- 修复 TypeScript 类型检查错误
|
2025-12-28 14:53:36 +08:00 |
|
IanShaw027
|
d895a2c469
|
refactor(frontend): 移除DataTable表头中废弃的展开/折叠按钮
- 移除操作列表头的展开/折叠按钮和图标
- 该功能已被操作列内的'更多'按钮替代
- 保留底层的展开/收起逻辑供'更多'按钮使用
|
2025-12-28 14:53:36 +08:00 |
|
IanShaw027
|
5f2d81d154
|
fix(frontend): 修复UI改进分支中的关键问题
- 修复RedeemView订阅刷新失败导致流程中断的问题
将订阅刷新隔离到独立try/catch,失败时仅显示警告
- 修复DataTable resize事件监听器泄漏问题
确保添加和移除使用同一个回调引用
- 修复订阅状态缓存导致强制刷新失效的问题
force=true时绕过activePromise缓存,clear()清空缓存
- 修复图表主题切换后颜色不更新的问题
添加图表ref并在主题切换时调用update()方法
|
2025-12-28 14:53:36 +08:00 |
|
IanShaw027
|
4e3499c0d7
|
fix(frontend): 改进订阅状态实时刷新机制
- 在 Dashboard 页面加载时强制刷新订阅状态
- 在兑换订阅卡密后立即刷新订阅状态
- 清理订阅轮询相关注释
|
2025-12-28 14:53:36 +08:00 |
|
IanShaw027
|
26cdb1805d
|
fix(frontend): 补充缺失的BaseDialog组件
|
2025-12-28 14:53:36 +08:00 |
|
IanShaw027
|
506cb21cb1
|
refactor(frontend): UI/UX改进和组件优化
- DataTable组件操作列自适应
- 优化各种Modal弹窗
- 统一API调用方式(AbortSignal)
- 添加全局订阅状态管理
- 优化各管理视图的交互和布局
- 修复国际化翻译问题
|
2025-12-28 14:53:36 +08:00 |
|
yangjianbo
|
fd51ff6970
|
fix: 代码的核心问题是判错条件用错了层级:
- apiKeyService.GetByKey(...) 返回的“找不到 API key”在这个项目里通常会被翻译成业务错误(比如
service.ErrApiKeyNotFound 这类 ApplicationError),而不是直接把 gorm.ErrRecordNotFound 透传到中
间件层。
- 因此你在中间件里用 errors.Is(err, gorm.ErrRecordNotFound) 去判断“无效 key”,很容易匹配不到(尤其
是:后面加 Redis 缓存、换存储实现、或测试里用 stub repo 时,根本不会出现 gorm 的错误)。
- 匹配不到时就会走到 500 Failed to validate API key,导致无效 API key 被错误地当成服务端故障返回
500(应该是 401)。
修复思路:中间件不要依赖 gorm 的错误,改成判断业务层错误,例如:
if errors.Is(err, service.ErrApiKeyNotFound) {
abortWithGoogleError(c, 401, "Invalid API key")
return
}
如果你把 GetByKey 的“not found”统一封装成业务错误,这样才不会被底层实现(gorm/redis/mock)影响。
|
2025-12-28 14:34:05 +08:00 |
|
程序猿MT
|
295d71be0a
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-28 13:16:57 +08:00 |
|
shaw
|
9bbe468c91
|
fix: 修复安装脚本通过 pipe 执行时 root 权限检查失效的问题
使用 `id -u` 替代 `$EUID` 进行 root 权限检查。
`$EUID` 是 bash 内置变量,在通过 pipe 执行脚本时可能不可靠。
|
2025-12-28 12:25:55 +08:00 |
|
shaw
|
fbdff4f34f
|
fix: 防止订阅过期时间超出 JSON 序列化范围
问题:当分配订阅天数过大时,expires_at 年份可能超过 9999,
导致 time.Time JSON 序列化失败(RFC 3339 要求年份 <= 9999),
使后台无法显示和删除异常数据。
修复:
- handler 层添加 validity_days 最大值验证(max=36500,即100年)
- service 层添加 MaxValidityDays 和 MaxExpiresAt 双重保护
- 启动时自动修复已存在的异常数据(expires_at > 2099年)
|
2025-12-28 11:45:41 +08:00 |
|
shaw
|
0aa480283f
|
Merge branch 'feat/deferred-batch-update'
|
2025-12-28 11:28:06 +08:00 |
|
shaw
|
cd9d31f5f2
|
fix: 修复NeedsRefresh bug导致刷新失败的问题
|
2025-12-28 11:23:52 +08:00 |
|
noreply
|
cbfce49aa1
|
feat: Schedule batch update for account last_used_at
Implement deferred batch update mechanism to reduce database load:
- Add DeferredService for batching account last_used_at updates
- Add TimingWheelService for efficient recurring task scheduling
- Integrate with GatewayService and OpenAIGatewayService
- Implement BatchUpdateLastUsed repository method using CASE...WHEN SQL
- Fix golangci-lint error: Replace interface{} with any
Benefits:
- Reduces database writes by batching updates (10-second intervals)
- Improves request throughput by deferring non-critical updates
- Maintains accurate account usage tracking for scheduling
|
2025-12-28 09:49:54 +08:00 |
|
程序猿MT
|
1d1da7362b
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 23:09:48 +08:00 |
|
yangjianbo
|
a8c173f043
|
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
|
2025-12-27 23:09:11 +08:00 |
|
yangjianbo
|
97ab649d16
|
fix(仪表盘): 修复最近用量查询日期参数格式
问题:仪表盘“最近用量”调用 /usage 时传入完整 ISO 时间戳(含时分秒/时区),后端 start_date/end_date 仅接受 YYYY-MM-DD,导致请求参数校验失败,页面无法正常展示最近用量。
解决:
- loadRecentUsage 改为传入 YYYY-MM-DD(从 toISOString() 取日期部分),与后端参数格式约定保持一致
- 补充注释说明:后端会将 end_date 扩展到当日结束时间,以及 toISOString() 为 UTC 可能带来的统计口径差异
- 同步修正 usageAPI.getByDateRange 的参数注释,避免后续误用
验证:npm -C frontend run build
|
2025-12-27 23:08:38 +08:00 |
|
程序猿MT
|
d3e73f1260
|
feat: 增加caddy 安全配置示例 (#57)
feat 增加 caddy 示例安全反向代理
|
2025-12-27 21:36:26 +08:00 |
|
程序猿MT
|
f3da4b202e
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 21:32:08 +08:00 |
|
yangjianbo
|
530f6ad81c
|
feat: 增加caddy 安全配置示例
|
2025-12-27 21:31:06 +08:00 |
|
yangjianbo
|
3252c378aa
|
feat 增加 caddy 示例安全反向代理
|
2025-12-27 21:30:14 +08:00 |
|
shaw
|
b5ca6a654c
|
Merge branch 'main' of github.com:Wei-Shaw/sub2api
# Conflicts:
|
2025-12-27 21:16:29 +08:00 |
|
shaw
|
94749b12ac
|
chore: 调整deploy说明以及取消postgres端口暴露
|
2025-12-27 21:14:08 +08:00 |
|
IanShaw
|
523fa9f71e
|
fix(frontend): 修复用户仪表板日期格式错误导致请求失败 (#55)
修复 loadRecentUsage 函数中日期格式问题,将 ISO 完整格式改为 YYYY-MM-DD 格式,与后端 API 期望一致。
|
2025-12-27 21:09:43 +08:00 |
|
shaw
|
54636781ea
|
Merge branch 'feature/datatable-enhancements'
|
2025-12-27 21:00:37 +08:00 |
|
shaw
|
5187db5ee5
|
fix(frontend): 修复DataTable无限循环和i18n邮箱解析错误
- 修复DataTable组件watch监听actionsExpanded导致的无限循环卡死问题
- 为AccountsView和UsersView添加actionsCount属性启用操作列展开功能
- 修复i18n翻译中邮箱地址的@符号未转义导致的编译错误
|
2025-12-27 21:00:26 +08:00 |
|
shaw
|
0b9c4ae69e
|
fix: 修复claude setup token授权效期短的问题
|
2025-12-27 20:42:00 +08:00 |
|
shaw
|
0d5a8a95c8
|
fix: 修复claude token刷新失效的问题
|
2025-12-27 20:13:39 +08:00 |
|
IanShaw027
|
9cd97c9e1d
|
fix(frontend): 统一账号编辑弹窗宽度与新增弹窗保持一致
问题:
- 编辑账号弹窗使用size='lg'
- 新增账号弹窗使用size='xl'
- 两者宽度不一致,体验不统一
修复:
- 将EditAccountModal的size从lg改为xl
- 与CreateAccountModal保持一致
|
2025-12-27 20:13:29 +08:00 |
|
IanShaw027
|
d521191e87
|
fix(frontend): 修复i18n翻译中的Invalid linked format错误
问题:
- admin/settings页面无法访问,报错'Invalid linked format'
- vue-i18n解析器将{'@'}误认为链接格式语法
修复:
- 将zh.ts和en.ts中的{'@'}替换为直接的@字符
- 影响范围:代理配置相关的翻译字符串
|
2025-12-27 20:11:13 +08:00 |
|
IanShaw027
|
fd78993b91
|
feat(frontend): DataTable组件增强 - 操作列宽度自适应和列数自适应padding
新增功能:
1. 操作列宽度自适应
- checkActionsColumnWidth 方法:智能检测操作按钮是否超出列宽
- 临时展开所有按钮测量实际宽度
- 计算包含gap的总宽度
- 与可用宽度对比,自动显示/隐藏"展开"按钮
- 新增 actionsCount prop:
- 用于快速判断是否需要展开功能
- 避免DOM查询带来的性能开销
2. 列数自适应padding
- getAdaptivePaddingClass 方法:根据列数动态调整内边距
- ≥10列 → px-2 (8px)
- ≥7列 → px-3 (12px)
- ≥5列 → px-4 (16px)
- <5列 → px-6 (24px,原始值)
- 让表格在列数较多时更紧凑,提升空间利用率
|
2025-12-27 20:02:10 +08:00 |
|
程序猿MT
|
937b1fb05d
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 20:01:56 +08:00 |
|
shaw
|
80cce858cb
|
fix(frontend): 修复添加账号弹窗宽度和tooltip被截断问题
- 将弹窗尺寸从 lg 改为 xl,增加内容显示空间
- 修复 AI Studio tooltip 被弹窗边界截断的问题
- 调整定位从 left-0 改为 right-0
- 减小宽度从 w-[28rem] 改为 w-80
- 提高 z-index 确保正确显示
|
2025-12-27 17:04:38 +08:00 |
|