- 26 Jan, 2026 1 commit
-
-
shaw authored
新增功能: - 支持 Google Authenticator 等应用进行 TOTP 二次验证 - 用户可在个人设置中启用/禁用 2FA - 登录时支持 TOTP 验证流程 - 管理后台可全局开关 TOTP 功能 安全增强: - TOTP 密钥使用 AES-256-GCM 加密存储 - 添加 TOTP_ENCRYPTION_KEY 配置项,必须手动配置才能启用功能 - 防止服务重启导致加密密钥变更使用户无法登录 - 验证失败次数限制,防止暴力破解 配置说明: - Docker 部署:在 .env 中设置 TOTP_ENCRYPTION_KEY - 非 Docker 部署:在 config.yaml 中设置 totp.encryption_key - 生成密钥命令:openssl rand -hex 32
-
- 25 Jan, 2026 1 commit
-
-
shaw authored
- 解析 x-codex-* 响应头获取正确的重置时间 - 7d 限制用尽时使用 codex_7d_reset_after_seconds - 提取 Normalize() 方法统一窗口规范化逻辑
-
- 24 Jan, 2026 6 commits
-
-
shaw authored
- 邮件发送改为异步队列处理,避免并发导致发送失败 - 新增 Email 维度限流(30秒冷却期),防止邮件轰炸 - Token 验证使用常量时间比较,防止时序攻击 - 重构代码消除冗余,提取公共验证逻辑
-
shaw authored
1. 使用未来日期(2099年)作为测试订阅的过期时间,避免 normalizeSubscriptionStatus 将测试数据标记为过期 2. 修复 List 方法调用参数不足的问题(新增 sortBy/sortOrder 参数)
-
Wesley Liddick authored
fix(oauth): 修复 OAuth 令牌刷新时 missing_project_id 误报问题
-
shaw authored
- 新增 SubscriptionExpiryService 定时任务,每分钟更新过期订阅状态 - 订阅列表支持服务端排序(按过期时间、状态、创建时间) - 实时显示正确的过期状态,无需等待定时任务 - 允许对已过期订阅进行续期操作 - DataTable 组件支持 serverSideSort 模式
-
Ubuntu authored
问题描述: 在网络波动环境下,LoadCodeAssist 临时失败会被错误地标记为 "missing_project_id" 不可重试错误,导致账户被禁用。但实际上 账户配置正确,手动刷新后即可恢复。 解决方案: 1. 为 LoadCodeAssist 增加重试机制(最多4次,指数退避) 2. 区分真正的配置缺失和临时网络故障: - 如果之前有 project_id,本次获取失败只保留旧值,不报错 - 只有从未获取过 project_id 且本次也失败时,才标记为缺失 3. 优化错误判断逻辑,避免误报 改进效果: - 提高在复杂网络环境(如家宽代理)下的鲁棒性 - 减少因临时网络波动导致的服务中断 - 保持真正配置错误的检测能力 Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
Wesley Liddick authored
fix(gateway): aggregate all text chunks in non-streaming Gemini responses
-
- 23 Jan, 2026 8 commits
-
-
lynoot authored
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 -
shaw authored
扩展现有的预热请求拦截功能,新增对 SUGGESTION MODE 请求的拦截: - 检测 messages 最后一条 user 消息是否以 [SUGGESTION MODE: 开头 - 拦截后返回空内容响应,节省 token 消耗 - 重构检测逻辑,合并为单一函数,只解析一次 JSON
-
shaw authored
-
shaw authored
-
shaw authored
-
shaw authored
-
shaw authored
测试文件引用了 IsTokenVersionStale 函数,但实际函数名为 CheckTokenVersion,导致 CI 构建失败
-
- 22 Jan, 2026 6 commits
-
-
Wesley Liddick authored
feat(frontend): 账号表格默认排序/持久化 + 自动刷新 + 更多菜单外部关闭
-
Wesley Liddick authored
fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题
-
shaw authored
- 新增 _token_version 版本号机制,防止过期 token 污染缓存 - TokenRefreshService 刷新成功后写入版本号并清除缓存 - TokenProvider 写入缓存前检查版本,过时则跳过 - ClearError 时同步清除 token 缓存
-
0xff26b9a8 authored
-
0xff26b9a8 authored
- 修复 TransformGeminiToClaude 的 JSON 解析逻辑,当 V1InternalResponse 解析成功但 candidates 为空时,尝试直接解析为 GeminiResponse 格式 - 修复 handleClaudeStreamToNonStreaming 收集流式响应的逻辑,累积所有 chunks 的内容而不是只保留最后一个(最后一个 chunk 通常 text 为空) - 新增 mergeCollectedPartsToResponse 函数,合并所有类型的 parts (text、thinking、functionCall、inlineData),保持原始顺序 - 连续的普通 text parts 合并为一个,thinking/functionCall/inlineData 保持原样
-
Wesley Liddick authored
refactor(antigravity): 提取并同步 Schema 清理逻辑至 schema_cleaner.go
-
- 21 Jan, 2026 2 commits
-
-
ducky authored
-
0xff26b9a8 authored
-
- 20 Jan, 2026 16 commits
-
-
0xff26b9a8 authored
主要变更: 1. 重构代码结构: - 将 CleanJSONSchema 及其相关辅助函数从 request_transformer.go 提取到独立的 schema_cleaner.go 文件中,实现逻辑解耦。 2. 逻辑优化与修正: - 参考 Antigravity-Manager (json_schema.rs) 的实现逻辑,修正了 Schema 清洗策略。
-
Wesley Liddick authored
mod(frontend): 管理员订阅/兑换码分组选择展示备注
-
Wesley Liddick authored
fix(调度): 完善粘性会话清理与账号调度刷新 和 启用 OpenAI OAuth HTTP/2 并修复清理任务 lint
-
shaw authored
-
shaw authored
- 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
-
shaw authored
The field was defined in DTO but not mapped in handler response.
-
yangjianbo authored
-
墨颜 authored
- 使用 loadEnv 读取 VITE_DEV_PROXY_TARGET/VITE_DEV_PORT - 注入 public settings 与 dev proxy 使用同源后端地址
-
墨颜 authored
- 订阅管理/分配订阅:下拉项展示分组备注 - 兑换码/订阅类型:下拉项展示分组备注 - 复用 GroupOptionItem/GroupBadge 保持一致体验
-
shaw authored
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.
-
yangjianbo authored
为 gateway_multiplatform_test.go 中的 SelectAccountWithLoadAwareness 调用添加缺少的第6个参数 metadataUserID,修复 CI 测试编译错误。 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
-
yangjianbo authored
-
yangjianbo authored
-
-
yangjianbo authored
- Update/BulkUpdate 按不可调度字段触发缓存刷新 - GatewayCache 支持多前缀会话键清理 - 模型路由与混合调度优化粘性会话处理 - 补充调度与缓存相关测试覆盖
-