1. 15 Mar, 2026 2 commits
    • erio's avatar
      044d3a01
    • erio's avatar
      feat: unified OAuth token refresh API with distributed locking · 1fc9dd7b
      erio authored
      Introduce OAuthRefreshAPI as the single entry point for all OAuth token
      refresh operations, eliminating the race condition where background
      refresh and inline refresh could simultaneously use the same
      refresh_token (fixes #1035).
      
      Key changes:
      - Add OAuthRefreshExecutor interface extending TokenRefresher with CacheKey
      - Add OAuthRefreshAPI.RefreshIfNeeded with lock → DB re-read → double-check flow
      - Add ProviderRefreshPolicy / BackgroundRefreshPolicy strategy types
      - Simplify all 4 TokenProviders to delegate to OAuthRefreshAPI
      - Rewrite TokenRefreshService.refreshWithRetry to use unified API path
      - Add MergeCredentials and BuildClaudeAccountCredentials helpers
      - Add 40 unit tests covering all new and modified code paths
      1fc9dd7b
  2. 12 Mar, 2026 1 commit
  3. 03 Mar, 2026 1 commit
  4. 02 Mar, 2026 1 commit
    • zqq61's avatar
      fix: OAuth 401 不再永久锁死账号,改用临时不可调度实现自动恢复 · ec6bcfeb
      zqq61 authored
      OAuth 账号收到 401 时,原逻辑同时设置 expires_at=now() 和 SetError(),
      但刷新服务只查询 status=active 的账号,导致 error 状态的账号永远无法
      被刷新服务拾取,expires_at=now() 实际上是死代码。
      
      修复:
      - OAuth 401 使用 SetTempUnschedulable 替代 SetError,保持 status=active
      - 新增 oauth_401_cooldown_minutes 配置项(默认 10 分钟)
      - 刷新成功后同步清除 DB 和 Redis 中的临时不可调度状态
      - 不可重试错误检查(invalid_grant 等)从 Antigravity 推广到所有平台
      - 可重试错误耗尽后不再标记 error,下个刷新周期继续重试
      
      恢复流程:
      OAuth 401 → temp_unschedulable + expires_at=now → 刷新服务拾取
        → 成功: 清除 temp_unschedulable → 自动恢复
        → invalid_grant: SetError → 永久禁用
        → 网络错误: 仅记日志 → 下周期重试
      ec6bcfeb
  5. 19 Feb, 2026 1 commit
  6. 12 Feb, 2026 1 commit
    • yangjianbo's avatar
      chore(logging): 完成后端日志审计与结构化迁移 · 584cfc3d
      yangjianbo authored
      - 将高密度服务与处理器日志迁移到新日志系统(LegacyPrintf/结构化日志)
      - 增加 stdlog bridge 与兼容测试,保留旧日志捕获能力
      - 将 OpenAI 断流告警改为结构化 Warn 并改造对应测试为 sink 捕获
      - 补齐后端相关文件 logger 引用并通过全量 go test
      584cfc3d
  7. 07 Feb, 2026 1 commit
    • yangjianbo's avatar
      perf(日志): 降噪优化,将常规成功日志降级为 Debug 级别 · 53e1c8b2
      yangjianbo authored
      
      
      - GIN Logger 中间件跳过 /health 和 /setup/status 的请求日志
      - UsageCleanup 空闲轮询(no_task)日志降级为 slog.Debug
      - Scheduler 常规 rebuild ok 日志降级为 slog.Debug
      - DashboardAggregation 常规聚合完成日志降级为 slog.Debug
      - TokenRefresh 无刷新活动时周期日志降级为 slog.Debug
      
      生产环境(Info 级别)下自动静默,debug 模式下仍可见。
      错误、警告类日志保持原有级别不变。
      Co-Authored-By: default avatarClaude Opus 4.6 <noreply@anthropic.com>
      53e1c8b2
  8. 02 Feb, 2026 2 commits
    • song's avatar
      merge upstream main · 0170d19f
      song authored
      0170d19f
    • shaw's avatar
      fix(gateway): 修复 OAuth token 刷新后调度器缓存不一致问题 · 79fa1813
      shaw authored
      Token 刷新成功后,调度器缓存中的 Account 对象仍包含旧的 credentials,
      导致在 Outbox 异步更新之前(最多 1 秒窗口)请求使用过期 token,
      返回 403 错误(OAuth token has been revoked)。
      
      修复方案:在 token 刷新成功后同步更新调度器缓存,确保调度获取的
      Account 对象立即包含最新的 access_token 和 _token_version。
      
      此修复覆盖所有 OAuth 平台:OpenAI、Claude、Gemini、Antigravity。
      79fa1813
  9. 01 Feb, 2026 1 commit
    • yangjianbo's avatar
      feat(Sora): 直连生成并移除sora2api依赖 · 399dd78b
      yangjianbo authored
      实现直连 Sora 客户端、媒体落地与清理策略\n更新网关与前端配置以支持 Sora 平台\n补齐单元测试与契约测试,新增 curl 测试脚本\n\n测试: go test ./... -tags=unit
      399dd78b
  10. 31 Jan, 2026 2 commits
  11. 30 Jan, 2026 1 commit
    • yangjianbo's avatar
      feat(账号): 添加 Sora 账号双表同步与创建 · 99dc3b59
      yangjianbo authored
      - 新增 sora_accounts 表与 accounts.extra GIN 索引\n- OpenAI OAuth 支持同时创建 Sora 账号并同步配置\n- Token 刷新同步关联 Sora 账号凭证与扩展表\n- 增加 Sora 账号连通性测试与前端开关文案
      99dc3b59
  12. 24 Jan, 2026 1 commit
    • Ubuntu's avatar
      fix(oauth): 修复 OAuth 令牌刷新时 missing_project_id 误报问题 · ffaa6c4a
      Ubuntu authored
      
      
      问题描述:
      在网络波动环境下,LoadCodeAssist 临时失败会被错误地标记为
      "missing_project_id" 不可重试错误,导致账户被禁用。但实际上
      账户配置正确,手动刷新后即可恢复。
      
      解决方案:
      1. 为 LoadCodeAssist 增加重试机制(最多4次,指数退避)
      2. 区分真正的配置缺失和临时网络故障:
         - 如果之前有 project_id,本次获取失败只保留旧值,不报错
         - 只有从未获取过 project_id 且本次也失败时,才标记为缺失
      3. 优化错误判断逻辑,避免误报
      
      改进效果:
      - 提高在复杂网络环境(如家宽代理)下的鲁棒性
      - 减少因临时网络波动导致的服务中断
      - 保持真正配置错误的检测能力
      Co-Authored-By: default avatarClaude Sonnet 4.5 <noreply@anthropic.com>
      ffaa6c4a
  13. 22 Jan, 2026 1 commit
  14. 16 Jan, 2026 3 commits
  15. 15 Jan, 2026 1 commit
  16. 14 Jan, 2026 1 commit
  17. 04 Jan, 2026 1 commit
    • song's avatar
      fix(antigravity): 优化 token 刷新错误处理 · 1dd35211
      song authored
      - 不可重试错误(invalid_grant等)直接标记 error,不重试
      - 其他错误仅记录日志,不标记 error(可能是临时网络问题)
      - 仅影响 Antigravity 账户,其他平台保持原有逻辑
      1dd35211
  18. 28 Dec, 2025 2 commits
  19. 26 Dec, 2025 2 commits
  20. 25 Dec, 2025 1 commit
  21. 24 Dec, 2025 1 commit
  22. 22 Dec, 2025 1 commit
  23. 20 Dec, 2025 1 commit