"backend/vscode:/vscode.git/clone" did not exist on "14a3694a9af4032b74c830c7e89afe121b731c63"
  1. 15 Jan, 2026 2 commits
  2. 14 Jan, 2026 7 commits
    • Wesley Liddick's avatar
      Merge pull request #278 from IanShaw027/fix/openai-account-schedulability-check · b3b2868f
      Wesley Liddick authored
      fix(网关): 修复账号选择中的调度器快照延迟问题
      b3b2868f
    • ianshaw's avatar
      fix(网关): 修复账号选择中的调度器快照延迟问题 · 25b00abc
      ianshaw authored
      ## 问题描述
      调度器快照更新存在0.5-1秒的延迟(Outbox轮询间隔),导致在账号被限流或过载后的短时间窗口内,
      可能仍会被选中,造成请求失败。
      
      ## 根本原因
      账号选择逻辑依赖调度器快照(listSchedulableAccounts),但快照更新有延迟:
      - Outbox轮询: 每1秒检查一次变更事件
      - 全量重建: 每300秒重建一次
      - 时间窗口: 账号状态变更后0.5-1秒内,快照可能未更新
      
      ## 解决方案
      在账号选择循环中添加IsSchedulable()实时检查,作为第二道防线:
      1. 第一道防线: 调度器快照过滤(可能有延迟)
      2. 第二道防线: IsSchedulable()实时检查(本次修复)
      
      IsSchedulable()会检查:
      - RateLimitResetAt: 限流重置时间
      - OverloadUntil: 过载持续时间
      - TempUnschedulableUntil: 临时不可调度时间
      - Status: 账号状态
      - Schedulable: 可调度标志
      
      ## 修改范围
      ### OpenAI Gateway Service
      - SelectAccountForModelWithExclusions: 添加IsSchedulable()检查
      - SelectAccountWithLoadAwareness: 添加IsSchedulable()检查
      
      ### Gateway Service (Claude/Gemini/Antigravity)
      - 负载感知选择候选账号筛选: 添加IsSchedulable()检查
      - selectAccountForModelWithPlatform: 添加IsSchedulable()检查
      - selectAccountWithMixedScheduling: 添加IsSchedulable()检查
      
      ### 测试用例
      - OpenAI: 添加2个测试用例验证限流账号过滤
      - Gateway: 添加2个测试用例验证限流和过载账号过滤
      
      ### 其他修复
      - ops_repo_preagg.go: 修复platform为NULL时的聚合问题
      
      ## 测试结果
      所有单元测试通过 
      25b00abc
    • shaw's avatar
      fix(admin): 修复退款金额精度问题 · 99cbfa15
      shaw authored
      - 显示完整余额精度,避免四舍五入导致的退款失败
      - 添加"全部"按钮,一键填入完整余额
      - 移除最小金额限制,支持任意正数金额
      99cbfa15
    • Wesley Liddick's avatar
      Merge pull request #274 from mt21625457/main · 3f8c8d70
      Wesley Liddick authored
      fix(openai): OAuth 请求强制 store=false
      3f8c8d70
    • yangjianbo's avatar
    • yangjianbo's avatar
    • yangjianbo's avatar
      fix(网关): OAuth 请求强制 store=false · 3663951d
      yangjianbo authored
      避免上游 Store 必须为 false 的错误
      
      仅在缺失或 true 时写回 store
      
      测试: go test ./internal/service -run TestApplyCodexOAuthTransform
      
      测试: make test-backend(golangci-lint 已单独执行)
      3663951d
  3. 13 Jan, 2026 14 commits
  4. 12 Jan, 2026 17 commits
    • ianshaw's avatar
      d85288a6
    • ianshaw's avatar
      feat(gateway): 对所有请求(包括 Codex CLI)应用模型映射 · 3402acb6
      ianshaw authored
      - 移除 Codex CLI 的模型映射跳过逻辑
      - 添加详细的模型映射日志,包含账号名称和请求类型
      - 确保所有 OpenAI 请求都能正确应用账号配置的模型映射
      3402acb6
    • ianshaw's avatar
      fix(gateway): 修复 base_url 包含 /chat/completions 时路径拼接错误 · 7fdc25df
      ianshaw authored
      问题:
      - 当账号的 base_url 配置为 https://example.com/v1/chat/completions 时
      - 代码直接追加 /responses,导致路径变成 /v1/chat/completions/responses
      - 上游返回 404 错误
      
      修复:
      - 在追加 /responses 前,先移除 base_url 中的 /chat/completions 后缀
      - 确保最终路径为 https://example.com/v1/responses
      
      影响范围:
      - OpenAI API Key 账号的测试接口
      - OpenAI API Key 账号的实际网关请求
      
      Related-to: #231
      7fdc25df
    • ianshaw's avatar
      docs(frontend): 完善 OpenCode 配置说明 · ea699cbd
      ianshaw authored
      更新 API 密钥页面 OpenCode 配置提示信息:
      - 补充支持 opencode.jsonc 后缀名
      - 说明可使用默认 provider(openai/anthropic/google)或自定义 provider_id
      - 说明 API Key 支持直接配置或通过 /connect 命令配置
      - 保留"示例仅供参考,模型与选项可按需调整"的提示
      
      配置文件路径:~/.config/opencode/opencode.json(或 opencode.jsonc)
      ea699cbd
    • ianshaw's avatar
      fix(gateway): 完善 max_output_tokens 参数处理逻辑 · fe6a3f42
      ianshaw authored
      根据不同平台和账号类型处理 max_output_tokens 参数:
      - OpenAI OAuth (Responses API): 保留 max_output_tokens(支持)
      - OpenAI API Key: 删除 max_output_tokens(不支持)
      - Anthropic (Claude): 转换 max_output_tokens 为 max_tokens
      - Gemini: 删除 max_output_tokens(由 Gemini 专用转换处理)
      - 其他平台: 删除(安全起见)
      
      同时处理 max_completion_tokens 参数,仅在 OpenAI OAuth 时保留。
      
      修复客户端(如 OpenCode)发送不支持参数导致上游返回 400 错误的问题。
      
      Related-to: #231
      fe6a3f42
    • ianshaw's avatar
      fix(frontend): 同步 OpenAI GPT-5 系列模型列表 · fe8198c8
      ianshaw authored
      修复编辑账号页面 GPT-5 模型只显示 3 个的问题:
      - 原来只有: gpt-5, gpt-5-mini, gpt-5-nano
      - 现在添加完整的 22 个模型,包括:
        * GPT-5 系列: gpt-5, gpt-5-codex, gpt-5-chat, gpt-5-pro, gpt-5-mini, gpt-5-nano 及各时间戳版本
        * GPT-5.1 系列: gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-max, gpt-5.1-codex-mini 及各版本
        * GPT-5.2 系列: gpt-5.2, gpt-5.2-codex, gpt-5.2-pro 及各版本
      - 更新快捷预设按钮,新增 GPT-5.1, GPT-5.2, GPT-5.1 Codex 选项
      
      与后端定价文件 (model_prices_and_context_window.json) 保持一致。
      
      Fixes issue introduced in fb86002e (feat: 添加模型白名单选择器组件)
      Related-to: fb86002e
      fe8198c8
    • cyhhao's avatar
      675e6138
    • cyhhao's avatar
      67acac10
    • Edric Li's avatar
      style: 优化滚动条自动隐藏效果 · d02e1db0
      Edric Li authored
      - 默认隐藏滚动条,悬停时显示
      - 支持 Webkit (Chrome/Safari/Edge) 和 Firefox
      - 滚动条样式与暗色主题适配
      d02e1db0
    • Edric Li's avatar
      feat(ops): 添加运维监控全屏模式 · 0da51507
      Edric Li authored
      - 支持通过 URL 参数 ?fullscreen=1 进入全屏模式
      - 全屏模式下隐藏非必要 UI 元素(选择器、按钮、提示等)
      - 增大健康评分圆环和字体以提升可读性
      - 支持 ESC 键退出全屏
      - 添加全屏按钮的 i18n 翻译
      0da51507
    • xiluo's avatar
      feat(gateway): 优化 Antigravity/Gemini 思考块处理 · 524d80ae
      xiluo authored
      此提交解决了思考块 (thinking blocks) 在转发过程中的兼容性问题。
      
      主要变更:
      
      1. **思考块优化 (Thinking Blocks)**:
         - 在 AntigravityGatewayService 中增加了 sanitizeThinkingBlocks 处理,强制移除思考块中不支持的 cache_control 字段(避免 Anthropic/Vertex AI 报错)
         - 实现历史思考块展平 (Flattening):将非最后一条消息中的思考块转换为普通文本块,以绕过上游对历史思考块签名的严格校验
         - 增加 cleanCacheControlFromGeminiJSON 作为最后一道防线,确保转换后的 Gemini 请求中不残留非法的 cache_control
      
      2. **GatewayService 缓存控制优化**:
         - 更新缓存控制逻辑,跳过 thinking 块(thinking 块不支持 cache_control 字段)
         - 增加 removeCacheControlFromThinkingBlocks 函数强制清理
      
      关联 Issue: #225
      524d80ae
    • shaw's avatar
      3b71bc3d
    • shaw's avatar
      fix: 修复反向代理下客户端 IP 获取错误 · 22ef9534
      shaw authored
      22ef9534
    • Wesley Liddick's avatar
      Merge pull request #254 from IanShaw027/feat/ops-count-tokens-filter-and-auto-refresh · c206d12d
      Wesley Liddick authored
      feat(ops): count_tokens 错误过滤和自动刷新功能
      c206d12d
    • IanShaw027's avatar
      6ad29a47
    • IanShaw027's avatar
      2d45e61a
    • IanShaw027's avatar
      feat(ops): 添加自动刷新配置功能 · b98fb013
      IanShaw027 authored
      功能特性:
      - 支持配置启用/禁用自动刷新
      - 可配置刷新间隔(15秒/30秒/60秒)
      - 实时倒计时显示,用户可见下次刷新时间
      - 手动刷新自动重置倒计时
      - 页面卸载时自动清理定时器
      
      用户体验:
      - 默认禁用,用户可根据需求开启
      - 与现有 OpsConcurrencyCard 5秒刷新保持一致
      - 倒计时带旋转动画,视觉反馈清晰
      - 配置修改后立即生效,无需刷新页面
      
      技术实现:
      - ops.ts: 添加 auto_refresh_enabled 和 auto_refresh_interval_seconds 配置
      - OpsSettingsDialog.vue: 添加自动刷新配置界面
      - OpsDashboard.vue: 实现主刷新逻辑和双定时器设计
      - OpsDashboardHeader.vue: 倒计时显示组件
      
      配置说明:
      - auto_refresh_enabled: 是否启用(默认 false)
      - auto_refresh_interval_seconds: 刷新间隔(默认 30 秒,范围 15-300 秒)
      b98fb013