Wesley Liddick
a5547b2f30
Merge pull request #380 from DDZS987/fix/oauth-token-refresh-missing-project-id-retry
...
fix(oauth): 修复 OAuth 令牌刷新时 missing_project_id 误报问题
2026-01-24 20:29:43 +08:00
shaw
b0aa23540b
feat(subscription): 订阅过期状态自动更新与服务端排序
...
- 新增 SubscriptionExpiryService 定时任务,每分钟更新过期订阅状态
- 订阅列表支持服务端排序(按过期时间、状态、创建时间)
- 实时显示正确的过期状态,无需等待定时任务
- 允许对已过期订阅进行续期操作
- DataTable 组件支持 serverSideSort 模式
2026-01-24 20:26:01 +08:00
Ubuntu
ffaa6c4a17
fix(oauth): 修复 OAuth 令牌刷新时 missing_project_id 误报问题
...
问题描述:
在网络波动环境下,LoadCodeAssist 临时失败会被错误地标记为
"missing_project_id" 不可重试错误,导致账户被禁用。但实际上
账户配置正确,手动刷新后即可恢复。
解决方案:
1. 为 LoadCodeAssist 增加重试机制(最多4次,指数退避)
2. 区分真正的配置缺失和临时网络故障:
- 如果之前有 project_id,本次获取失败只保留旧值,不报错
- 只有从未获取过 project_id 且本次也失败时,才标记为缺失
3. 优化错误判断逻辑,避免误报
改进效果:
- 提高在复杂网络环境(如家宽代理)下的鲁棒性
- 减少因临时网络波动导致的服务中断
- 保持真正配置错误的检测能力
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-24 17:44:56 +08:00
Wesley Liddick
fbf72f0ec4
Merge pull request #377 from lynoot/fix/non-streaming-chunk-aggregation
...
fix(gateway): aggregate all text chunks in non-streaming Gemini responses
2026-01-24 08:49:10 +08:00
lynoot
909b8a8f9c
fix(gateway): aggregate all text chunks in non-streaming Gemini responses
...
Previously, collectGeminiSSE() only returned the last chunk received
from the upstream streaming response when converting to non-streaming.
This caused incomplete responses where only the final text fragment
was returned to clients.
For example, a request asking to "count from 1 to 10" would only
return "\n" (the last chunk) instead of "1\n2\n3\n...\n10\n".
This was especially problematic for JSON structured output where
the opening brace "{" from the first chunk was lost, resulting
in invalid JSON like: colors": ["red", "blue"]}
The fix:
- Collect all text parts from each SSE chunk into a slice
- Merge all collected text parts into the final response
- Reuse the same pattern as handleGeminiStreamToNonStreaming
in antigravity_gateway_service.go
Fixes: non-streaming responses returning incomplete text
Fixes: structured output (JSON schema) returning invalid JSON
2026-01-23 13:54:09 +00:00
shaw
4a0fe3b143
feat(gateway): 增加 SUGGESTION MODE 请求拦截
...
扩展现有的预热请求拦截功能,新增对 SUGGESTION MODE 请求的拦截:
- 检测 messages 最后一条 user 消息是否以 [SUGGESTION MODE: 开头
- 拦截后返回空内容响应,节省 token 消耗
- 重构检测逻辑,合并为单一函数,只解析一次 JSON
2026-01-23 16:57:25 +08:00
shaw
a1292fac81
feat(oauth): 支持Anthropic的Team账号使用sk授权
2026-01-23 16:30:12 +08:00
shaw
7f98be4f91
fix(oauth): 更新 Anthropic 账号 OAuth 参数,同步最新客户端
2026-01-23 16:00:42 +08:00
shaw
fd73b8875d
feat(frontend): 优化账号限流状态显示,直接展示倒计时
2026-01-23 15:48:25 +08:00
shaw
f9ab1daa3c
feat: 保存并显示OAuth账号邮箱地址
2026-01-23 15:17:47 +08:00
shaw
d27b847442
fix(test): 修复测试中引用不存在的函数名
...
测试文件引用了 IsTokenVersionStale 函数,但实际函数名为 CheckTokenVersion,导致 CI 构建失败
2026-01-23 10:58:30 +08:00
shaw
dac6bc2228
fix(token-cache): 版本过时时使用最新token而非旧token
...
上次修复(2665230 )只阻止了写入缓存,但仍返回旧token导致403。
现在版本过时时直接使用DB中的最新token返回。
- 重构 IsTokenVersionStale 为 CheckTokenVersion,返回最新account
- 消除重复DB查询,复用版本检查时已获取的account
2026-01-23 10:29:52 +08:00
Wesley Liddick
4bd3dbf2ce
Merge pull request #354 from DuckyProject/fix/frontend-table
...
feat(frontend): 账号表格默认排序/持久化 + 自动刷新 + 更多菜单外部关闭
2026-01-22 21:17:48 +08:00
Wesley Liddick
226df1c23a
Merge pull request #358 from 0xff26b9a8/main
...
fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题
2026-01-22 21:16:54 +08:00
shaw
2665230a09
fix(token-cache): 修复异步刷新与请求线程的缓存竞态条件
...
- 新增 _token_version 版本号机制,防止过期 token 污染缓存
- TokenRefreshService 刷新成功后写入版本号并清除缓存
- TokenProvider 写入缓存前检查版本,过时则跳过
- ClearError 时同步清除 token 缓存
2026-01-22 21:09:28 +08:00
0xff26b9a8
4f0c2b794c
style: gofmt antigravity_gateway_service.go
2026-01-22 14:38:55 +08:00
0xff26b9a8
e756064c19
fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题
...
- 修复 TransformGeminiToClaude 的 JSON 解析逻辑,当 V1InternalResponse
解析成功但 candidates 为空时,尝试直接解析为 GeminiResponse 格式
- 修复 handleClaudeStreamToNonStreaming 收集流式响应的逻辑,累积所有
chunks 的内容而不是只保留最后一个(最后一个 chunk 通常 text 为空)
- 新增 mergeCollectedPartsToResponse 函数,合并所有类型的 parts
(text、thinking、functionCall、inlineData),保持原始顺序
- 连续的普通 text parts 合并为一个,thinking/functionCall/inlineData 保持原样
2026-01-22 14:17:59 +08:00
Wesley Liddick
17dfb0af01
Merge pull request #346 from 0xff26b9a8/main
...
refactor(antigravity): 提取并同步 Schema 清理逻辑至 schema_cleaner.go
2026-01-22 08:46:11 +08:00
ducky
ff74f517df
feat(frontend): 账号表格默认排序/持久化 + 自动刷新 + 更多菜单外部关闭
2026-01-21 22:43:25 +08:00
0xff26b9a8
477a9a180f
fix: 修复 schema 清理逻辑
2026-01-21 10:58:39 +08:00
0xff26b9a8
da48df06d2
refactor(antigravity): 提取并同步 Schema 清理逻辑至 schema_cleaner.go
...
主要变更:
1. 重构代码结构:
- 将 CleanJSONSchema 及其相关辅助函数从 request_transformer.go 提取到独立的 schema_cleaner.go 文件中,实现逻辑解耦。
2. 逻辑优化与修正:
- 参考 Antigravity-Manager (json_schema.rs) 的实现逻辑,修正了 Schema 清洗策略。
2026-01-20 23:41:53 +08:00
Wesley Liddick
39fad63ccf
Merge pull request #345 from whoismonay/main
...
mod(frontend): 管理员订阅/兑换码分组选择展示备注
2026-01-20 16:22:53 +08:00
Wesley Liddick
5602d02b1b
Merge pull request #343 from mt21625457/main
...
fix(调度): 完善粘性会话清理与账号调度刷新 和 启用 OpenAI OAuth HTTP/2 并修复清理任务 lint
2026-01-20 16:05:53 +08:00
shaw
81989eed1c
test: add promo_code_enabled to API contract test
2026-01-20 16:02:49 +08:00
shaw
192efb84a0
feat(promo-code): complete promo code feature implementation
...
- Add promo_code_enabled field to SystemSettings and PublicSettings DTOs
- Add promo code validation in registration flow
- Add admin settings UI for promo code configuration
- Add i18n translations for promo code feature
2026-01-20 15:56:26 +08:00
shaw
8672347f93
fix(settings): add missing promo_code_enabled field in public settings API
...
The field was defined in DTO but not mapped in handler response.
2026-01-20 15:49:57 +08:00
yangjianbo
5e5d4a513b
feat: 移动镜像脚本位置
2026-01-20 15:11:27 +08:00
墨颜
88b6358472
build(frontend): vite 加载开发环境变量
...
- 使用 loadEnv 读取 VITE_DEV_PROXY_TARGET/VITE_DEV_PORT
- 注入 public settings 与 dev proxy 使用同源后端地址
2026-01-20 15:04:18 +08:00
墨颜
dd8d5e2c42
mod(frontend): 订阅分组下拉显示备注
...
- 订阅管理/分配订阅:下拉项展示分组备注
- 兑换码/订阅类型:下拉项展示分组备注
- 复用 GroupOptionItem/GroupBadge 保持一致体验
2026-01-20 15:02:48 +08:00
shaw
d91e2328fb
test(tlsfingerprint): add multi-profile fingerprint verification test
...
Add TestAllProfiles to verify TLS fingerprint configurations from
config.yaml against tls.peet.ws. Tests check JA4 cipher hash (stable
part) to validate fingerprint spoofing works correctly.
2026-01-20 14:53:15 +08:00
yangjianbo
2a16735495
fix(测试): 修复 SelectAccountWithLoadAwareness 调用缺少参数
...
为 gateway_multiplatform_test.go 中的 SelectAccountWithLoadAwareness
调用添加缺少的第6个参数 metadataUserID,修复 CI 测试编译错误。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-20 14:16:46 +08:00
yangjianbo
292f25f9ca
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
2026-01-20 14:02:08 +08:00
yangjianbo
c92e37775a
Merge branch 'dev'
2026-01-20 13:57:08 +08:00
yangjianbo
f6ed3d1456
Merge branch 'test' into dev
2026-01-20 11:59:13 +08:00
yangjianbo
84686753e8
Merge branch 'test' of https://github.com/mt21625457/aicodex2api into test
2026-01-20 11:51:44 +08:00
yangjianbo
91f01309da
fix(调度): 完善粘性会话清理与账号调度刷新
...
- Update/BulkUpdate 按不可调度字段触发缓存刷新
- GatewayCache 支持多前缀会话键清理
- 模型路由与混合调度优化粘性会话处理
- 补充调度与缓存相关测试覆盖
2026-01-20 11:40:55 +08:00
yangjianbo
57a1fc9d33
style(仓储): 格式化账号仓储
...
- gofmt 修正 lint 格式提示
2026-01-20 11:30:36 +08:00
shaw
c95a864975
docs: add TLS fingerprint tool link
2026-01-20 11:30:10 +08:00
yangjianbo
7a83db6180
fix(调度): 完善粘性会话清理与账号调度刷新
...
- Update/BulkUpdate 按不可调度字段触发缓存刷新
- GatewayCache 支持多前缀会话键清理
- 模型路由与混合调度优化粘性会话处理
- 补充调度与缓存相关测试覆盖
2026-01-20 11:19:32 +08:00
Wesley Liddick
a8513da7ff
Merge pull request #335 from geminiwen/main
...
feat(subscription): 支持调整订阅时长(延长/缩短)
2026-01-20 08:52:19 +08:00
Gemini Wen
53534d3956
style(admin): 统一列设置按钮位置到刷新按钮右侧
...
将订阅管理和账号管理页面的列设置按钮移动到刷新按钮右侧,
与用户管理页面保持一致的布局。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-20 00:18:51 +08:00
Gemini Wen
cc07a0e295
feat(subscription): 支持调整订阅时长(延长/缩短)
...
- 将"延长订阅"功能改为"调整订阅",支持正数延长、负数缩短
- 后端验证:调整天数范围 -36500 到 36500,缩短后剩余天数必须 > 0
- 前端同步更新界面文案和验证逻辑
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-20 00:11:30 +08:00
Wesley Liddick
e7bc62500b
Merge pull request #333 from whoismonay/main
...
fix: 普通用户接口移除管理员敏感字段透传
2026-01-19 21:35:51 +08:00
墨颜
c8fb9ef3a5
style(dto): 修复 gofmt 格式问题
...
- 修复 mappers.go 中 Notes 字段的对齐格式
- 修复 types.go 中 BulkAssignResult 结构体字段的 JSON tag 对齐
修复 golangci-lint 检查中的 gofmt 格式错误
2026-01-19 21:26:30 +08:00
Wesley Liddick
eb5e6214bc
Merge pull request #332 from geminiwen/main
...
fix: 修复手动刷新令牌后缓存未清除导致403错误的问题
2026-01-19 20:53:06 +08:00
shaw
568d6ee10e
fix: 修复测试缺少新增设置字段
2026-01-19 20:52:05 +08:00
墨颜
6aef1af76e
fix(redeem): 用户兑换历史不返回备注
...
- 用户侧 RedeemCode DTO 移除 notes 字段,避免泄露内部备注\n- 新增 AdminRedeemCode,并调整管理员兑换码接口继续返回 notes\n- 增加 /api/v1/redeem/history 契约测试,确保用户侧响应不包含 notes
2026-01-19 20:09:35 +08:00
Gemini Wen
a54852e129
fix: 补充API契约测试中缺失的hide_ccs_import_button字段
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-19 20:06:36 +08:00
Gemini Wen
668118def1
fix: 修复遗漏的测试文件更新和lint错误
...
- 更新api_contract_test.go以匹配NewAccountHandler新增的tokenCacheInvalidator参数
- 修复errcheck lint错误,显式忽略c.Error()返回值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-19 19:58:09 +08:00
yangjianbo
73e6b160f8
feat(认证): 启用 OpenAI OAuth HTTP/2 并修复清理任务 lint
...
为共享 req 客户端增加 HTTP/2 选项与缓存隔离
OpenAI OAuth 超时提升到 120s,并按协议控制强制
新增客户端池与 OAuth 客户端单测覆盖
修复 usage cleanup 相关 errcheck/ineffassign/staticcheck 并统一格式
测试: make test
2026-01-19 19:50:57 +08:00