1. 27 Jan, 2026 2 commits
  2. 26 Jan, 2026 1 commit
    • shaw's avatar
      feat(auth): 实现 TOTP 双因素认证功能 · 1245f07a
      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
      1245f07a
  3. 25 Jan, 2026 1 commit
    • ianshaw's avatar
      fix(antigravity): 修复 Gemini 模型 thoughtSignature 被错误覆盖的问题 · 8c123339
      ianshaw authored
      ## 问题描述
      
      在使用 Gemini 模型(gemini-3-flash-preview)时,出现 400 错误:
      "Unable to submit request because Thought signature is not valid"
      
      ## 根本原因
      
      在 `request_transformer.go` 的 `buildParts()` 函数中:
      - 对于 `tool_use` 和 `thinking` 块,当 `allowDummyThought=true`(Gemini 模型)时
      - 代码会无条件将客户端传入的真实 `thoughtSignature` 覆盖成 dummy 值
      - 导致 Gemini API 验证签名失败(签名与上下文不匹配)
      
      ## 修复方案
      
      修改 signature 处理逻辑:
      1. **优先透传真实 signature**:如果客户端提供了有效的 signature,保留它
      2. **缺失时才使用 dummy**:只有在 signature 缺失且是 Gemini 模型时,才使用 dummy signature
      3. **Claude 模型特殊处理**:将 dummy signature 视为缺失,避免透传到需要真实签名的链路
      
      ## 修改内容
      
      ### request_transformer.go
      - `thinking` 块(第 367-386 行):优先透传真实 signature
      - `tool_use` 块(第 411-418 行):优先透传真实 signature
      
      ### request_transformer_test.go
      - 修改测试用例名称,反映新的行为
      - 新增测试用例验证"缺失时才使用 dummy"的逻辑
      
      ## 影响范围
      
      - 修复 Gemini 模型在多轮对话中使用 tool_use 时的签名验证错误
      - 不影响 Claude 模型的现有行为
      - 提高跨账号切换时的稳定性
      
      相关问题:#[issue_number]
      8c123339
  4. 23 Jan, 2026 2 commits
  5. 22 Jan, 2026 1 commit
    • 0xff26b9a8's avatar
      fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题 · e756064c
      0xff26b9a8 authored
      - 修复 TransformGeminiToClaude 的 JSON 解析逻辑,当 V1InternalResponse
        解析成功但 candidates 为空时,尝试直接解析为 GeminiResponse 格式
      - 修复 handleClaudeStreamToNonStreaming 收集流式响应的逻辑,累积所有
        chunks 的内容而不是只保留最后一个(最后一个 chunk 通常 text 为空)
      - 新增 mergeCollectedPartsToResponse 函数,合并所有类型的 parts
        (text、thinking、functionCall、inlineData),保持原始顺序
      - 连续的普通 text parts 合并为一个,thinking/functionCall/inlineData 保持原样
      e756064c
  6. 21 Jan, 2026 1 commit
  7. 20 Jan, 2026 2 commits
  8. 19 Jan, 2026 2 commits
    • shaw's avatar
      fix: 更新Claude OAuth授权配置以匹配最新规范 · 090c8981
      shaw authored
      - 更新TokenURL和RedirectURI为platform.claude.com
      - 更新scope定义,区分浏览器URL和内部API调用
      - 修正state/code_verifier生成算法使用base64url编码
      - 修正授权URL参数顺序并添加code=true
      - 更新token交换请求头匹配官方实现
      - 清理未使用的类型和函数
      090c8981
    • shaw's avatar
      feat: 新增会话ID伪装功能,优化日志系统 · ccfeaeb2
      shaw authored
      - 新增 session_id_masking_enabled 配置,启用后将在15分钟内固定
        metadata.user_id 中的 session ID
      - TLS fingerprint 模块日志从自定义 debugLog 迁移到 slog
      - main.go 添加 slog 初始化,根据 gin mode 设置日志级别
      - 前端创建/编辑账号模态框添加会话ID伪装开关
      - 多语言支持(中英文)
      ccfeaeb2
  9. 18 Jan, 2026 2 commits
  10. 17 Jan, 2026 6 commits
  11. 16 Jan, 2026 5 commits
    • song's avatar
      feat(antigravity): 动态 URL 排序,最近成功的优先使用 · 69c4b17a
      song authored
      - URLAvailability 新增 lastSuccess 字段追踪最近成功的 URL
      - GetAvailableURLs 返回列表时优先放置 lastSuccess
      - 所有 Antigravity API 调用成功后调用 MarkSuccess 更新优先级
      69c4b17a
    • song's avatar
      feat(antigravity): 同步 Antigravity-Manager 的请求逻辑 · cc0fca35
      song authored
      - System Prompt: 改为简短版,添加 OpenCode 过滤、MCP XML 协议注入、SYSTEM_PROMPT_END 标记
      - HTTP Headers: 只保留 Content-Type/Authorization/User-Agent,移除 Accept 和 Host
      - User-Agent: 改为 antigravity/1.11.9 windows/amd64
      - requestType: 动态判断 (agent/web_search/image_gen)
      - BaseURLs: 添加 daily sandbox 备用 URL
      - Fallback: 扩展触发条件 (429/408/404/5xx)
      cc0fca35
    • IanShaw027's avatar
      fix(gemini): 更新 Gemini 模型列表配置 · 28e46e0e
      IanShaw027 authored
      - 移除已弃用的 1.5 系列模型
      - 调整模型优先级顺序(2.0 Flash > 2.5 Flash > 2.5 Pro > 3.0 Preview)
      - 同步前后端模型配置
      - 更新相关测试用例和默认模型选择逻辑
      28e46e0e
    • song's avatar
      fix: Antigravity project_id 获取优化 · a61042bc
      song authored
      - API URL 改为只使用 prod 端点
      - 刷新 token 时每次调用 LoadCodeAssist 更新 project_id
      - 移除随机生成 project_id 的兜底逻辑
      a61042bc
    • song's avatar
      fix: Antigravity 测试连接使用最小 token 消耗 · b4abfae4
      song authored
      - buildGeminiTestRequest: 输入 "." + maxOutputTokens: 1
      - buildClaudeTestRequest: 输入 "." + MaxTokens: 1
      - buildGenerationConfig: 支持透传 MaxTokens 参数
      b4abfae4
  12. 15 Jan, 2026 1 commit
  13. 14 Jan, 2026 1 commit
    • 墨颜's avatar
      feat(计费): 支持账号计费倍率快照与统计展示 · fb99ceac
      墨颜 authored
      - 新增 accounts.rate_multiplier(默认 1.0,允许 0)
      - 使用 usage_logs.account_rate_multiplier 记录倍率快照,避免历史回算
      - 统计/导出/管理端展示账号口径费用(total_cost * account_rate_multiplier)
      fb99ceac
  14. 11 Jan, 2026 2 commits
    • yangjianbo's avatar
      1a869547
    • IanShaw027's avatar
      fix: 临时保存编译错误修复 · fc4ea659
      IanShaw027 authored
      - 添加 LinuxDo 和 Update 配置(从 main 分支缺失)
      - 添加 LinuxDoConnectSyntheticEmailDomain 常量
      - 添加 IsClaudeCodeClient context key
      - 添加 GetLinuxDoConnectOAuthConfig 方法
      - 修复 BindStickySession 调用签名
      - 修复前端 i18n 重复属性
      - 重新生成 wire 依赖注入代码
      
      这个提交准备被合并替换,先保存以防丢失。
      fc4ea659
  15. 09 Jan, 2026 5 commits
    • yangjianbo's avatar
      perf(网关): 复用分组上下文减少热路径查询 · 67554324
      yangjianbo authored
      新增 GetByIDLite 并在网关与 Gemini 选择流程复用上下文 group,避免 COUNT 触发
      更新 API key 中间件注入 group 上下文,减少重复查库
      补充 gateway/gemini 中间件与仓库层回归测试
      
      测试: make test
      67554324
    • Edric.Li's avatar
      feat(api-key): 添加 IP 白名单/黑名单限制功能 (#221) · 0a4641c2
      Edric.Li authored
      * feat(api-key): add IP whitelist/blacklist restriction and usage log IP tracking
      
      - Add IP restriction feature for API keys (whitelist/blacklist with CIDR support)
      - Add IP address logging to usage logs (admin-only visibility)
      - Remove billing_type column from usage logs UI (redundant)
      - Use generic "Access denied" error message for security
      
      Backend:
      - New ip package with IP/CIDR validation and matching utilities
      - Database migrations for ip_whitelist, ip_blacklist (api_keys) and ip_address (usage_logs)
      - Middleware IP restriction check after API key validation
      - Input validation for IP/CIDR patterns on create/update
      
      Frontend:
      - API key form with enable toggle for IP restriction
      - Shield icon indicator in table for keys with IP restriction
      - Removed billing_type filter and column from usage views
      
      * fix: update API contract tests for ip_whitelist/ip_blacklist fields
      
      Add ip_whitelist and ip_blacklist fields to expected JSON responses
      in API contract tests to match the new API key schema.
      0a4641c2
    • Edric Li's avatar
      feat(api-key): add IP whitelist/blacklist restriction and usage log IP tracking · 90798f14
      Edric Li authored
      - Add IP restriction feature for API keys (whitelist/blacklist with CIDR support)
      - Add IP address logging to usage logs (admin-only visibility)
      - Remove billing_type column from usage logs UI (redundant)
      - Use generic "Access denied" error message for security
      
      Backend:
      - New ip package with IP/CIDR validation and matching utilities
      - Database migrations for ip_whitelist, ip_blacklist (api_keys) and ip_address (usage_logs)
      - Middleware IP restriction check after API key validation
      - Input validation for IP/CIDR patterns on create/update
      
      Frontend:
      - API key form with enable toggle for IP restriction
      - Shield icon indicator in table for keys with IP restriction
      - Removed billing_type filter and column from usage views
      90798f14
    • IanShaw027's avatar
      feat(基础设施): 添加运维监控功能的基础配置和依赖 · 4b9e47ce
      IanShaw027 authored
      - 更新 .gitignore 排除临时文件
      - 添加 ops 监控相关配置项到 config.yaml
      - 更新 Go 依赖包(go.mod/go.sum)
      - 扩展 config.go 支持 ops 监控配置
      - 新增上下文键定义(ClientRequestID)
      4b9e47ce
    • shaw's avatar
  16. 08 Jan, 2026 5 commits
    • IanShaw's avatar
      fix(gemini): Google One 强制使用内置 OAuth client + 自动获取 project_id + UI 优化 (#212) · afcfbb45
      IanShaw authored
      * fix(gemini): Google One 强制使用内置 OAuth client + 自动获取 project_id + UI 优化
      
      ## 后端改动
      
      ### 1. Google One 强制使用内置 Gemini CLI OAuth Client
      **问题**:
      - Google One 之前允许使用自定义 OAuth client,导致认证流程不稳定
      - 与 Code Assist 的行为不一致
      
      **解决方案**:
      - 修改 `gemini_oauth_service.go`: Google One 现在与 Code Assist 一样强制使用内置 client (L122-135)
      - 更新 `gemini_oauth_client.go`: ExchangeCode 和 RefreshToken 方法支持强制内置 client (L31-44, L77-86)
      - 简化 `geminicli/oauth.go`: Google One scope 选择逻辑 (L187-190)
      - 标记 `geminicli/constants.go`: DefaultGoogleOneScopes 为 DEPRECATED (L30-33)
      - 更新测试用例以反映新行为
      
      **OAuth 类型对比**:
      | OAuth类型 | Client来源 | Scopes | Redirect URI |
      |-----------|-----------|--------|-----------------|
      | code_assist | 内置 Gemini CLI | DefaultCodeAssistScopes | https://codeassist.google.com/authcode |
      | google_one | 内置 Gemini CLI (新) | DefaultCodeAssistScopes | https://codeassist.google.com/authcode |
      | ai_studio | 必须自定义 | DefaultAIStudioScopes | http://localhost:1455/auth/callback |
      
      ### 2. Google One 自动获取 project_id
      **问题**:
      - Google One 个人账号测试模型时返回 403/404 错误
      - 原因:cloudaicompanion API 需要 project_id,但个人账号无需手动创建 GCP 项目
      
      **解决方案**:
      - 修改 `gemini_oauth_service.go`: OAuth 流程中自动调用 fetchProjectID
      - Google 通过 LoadCodeAssist API 自动分配 project_id
      - 与 Gemini CLI 行为保持一致
      - 后端根据 project_id 自动选择正确的 API 端点
      
      **影响**:
      - Google One 账号现在可以正常使用(需要重新授权)
      - Code Assist 和 AI Studio 账号不受影响
      
      ### 3. 修复 Gemini 测试账号无内容输出问题
      **问题**:
      - 测试 Gemini 账号时只显示"测试成功",没有显示 AI 响应内容
      - 原因:processGeminiStream 在检查到 finishReason 时立即返回,跳过了内容提取
      
      **解决方案**:
      - 修改 `account_test_service.go`: 调整逻辑顺序,先提取内容再检查是否完成
      - 确保最后一个 chunk 的内容也能被正确显示
      
      **影响**:
      - 所有 Gemini 账号类型(API Key、OAuth)的测试现在都会显示完整响应内容
      - 用户可以看到流式输出效果
      
      ## 前端改动
      
      ### 1. 修复图标宽度压缩问题
      **问题**:
      - 账户类型选择按钮中的图标在某些情况下会被压缩变形
      
      **解决方案**:
      - 修改 `CreateAccountModal.vue`: 为所有平台图标容器添加 `shrink-0` 类
      - 确保 Anthropic、OpenAI、Gemini、Antigravity 图标保持固定 8×8 尺寸 (32px × 32px)
      
      ### 2. 优化重新授权界面
      **问题**:
      - 重新授权时显示三个可点击的授权类型选择按钮,可能导致用户误切换到不兼容的授权方式
      
      **解决方案**:
      - 修改 `ReAuthAccountModal.vue` (admin 和普通用户版本):
        - 将可点击的授权类型选择按钮改为只读信息展示框
        - 根据账号的 `credentials.oauth_type` 动态显示对应图标和文本
        - 删除 `geminiAIStudioOAuthEnabled` 状态和 `handleSelectGeminiOAuthType` 方法
        - 防止用户误操作
      
      ## 测试验证
      -  所有后端单元测试通过
      -  OAuth client 选择逻辑正确
      -  Google One 和 Code Assist 行为一致
      -  测试账号显示完整响应内容
      -  UI 图标显示正常
      -  重新授权界面只读展示正确
      
      * fix(lint): 修复 golangci-lint 错误信息格式问题
      
      - 将错误信息改为小写开头以符合 Go 代码规范
      - 修复 ST1005: error strings should not be capitalized
      afcfbb45
    • Edric Li's avatar
      feat(groups): add Claude Code client restriction and session isolation · a4210588
      Edric Li authored
      - Add claude_code_only field to restrict groups to Claude Code clients only
      - Add fallback_group_id for non-Claude Code requests to use alternate group
      - Implement ClaudeCodeValidator for User-Agent detection
      - Add group-level session binding isolation (groupID in Redis key)
      - Prevent cross-group sticky session pollution
      - Update frontend with Claude Code restriction controls
      a4210588
    • shaw's avatar
      b015a3bd
    • shaw's avatar
      fix(antigravity): 修复请求频繁429的问题 · 6e8188ed
      shaw authored
      6e8188ed
    • song's avatar
  17. 06 Jan, 2026 1 commit
    • yangjianbo's avatar
      fix(安全): 修复依赖漏洞并强化安全扫描 · 3f0017d1
      yangjianbo authored
      主要改动:
      - 固定 Go 1.25.5 与 CI 校验并更新扫描流程
      - 升级 quic-go、x/crypto、req 等依赖并通过 govulncheck
      - 强化 JWT 校验、TLS 配置与 xlsx 动态加载
      - 新增审计豁免清单与校验脚本
      3f0017d1