1. 13 Jan, 2026 8 commits
    • ianshaw's avatar
    • ianshaw's avatar
      fix(openai): 增强 OpenCode 兼容性和模型规范化 · 3d6e01a5
      ianshaw authored
      ## 主要改动
      
      1. **模型规范化扩展到所有账号**
         - 将 Codex 模型规范化(如 gpt-5-nano → gpt-5.1)应用到所有 OpenAI 账号类型
         - 不再仅限于 OAuth 非 CLI 请求
         - 解决 Codex CLI 使用 ChatGPT 账号时的模型兼容性问题
      
      2. **reasoning.effort 参数规范化**
         - 自动将 `minimal` 转换为 `none`
         - 解决 gpt-5.1 模型不支持 `minimal` 值的问题
      
      3. **Session/Conversation ID fallback 机制**
         - 从请求体多个字段提取 session_id/conversation_id
         - 优先级:prompt_cache_key → session_id → conversation_id → previous_response_id
         - 支持 Codex CLI 的会话保持
      
      4. **Tool Call ID fallback**
         - 当 call_id 为空时使用 id 字段作为 fallback
         - 确保 tool call 输出能正确匹配
         - 保留 item_reference 类型的 items
      
      5. **Header 优化**
         - 添加 conversation_id 到允许的 headers
         - 移除删除 session headers 的逻辑
      
      ## 相关 Issue
      - 参考 OpenCode issue #3118 关于 item_reference 的讨论
      3d6e01a5
    • IanShaw027's avatar
      fix(codex): 添加codex CLI instructions fallback机制 · f9713e87
      IanShaw027 authored
      ## 问题
      - 使用OpenAI API key时,opencode客户端可能因instructions不兼容而报错
      - 依赖外部GitHub获取instructions,网络故障时会失败
      
      ## 解决方案
      1. 将codex CLI标准instructions嵌入到项目中
      2. 实现自动fallback机制:
         - 优先使用opencode GitHub的instructions
         - 失败时自动fallback到本地codex CLI instructions
      3. 添加辅助函数用于错误检测和手动替换
      
      ## 改动
      - 新增: internal/service/prompts/codex_cli_instructions.md
        - 从codex项目复制的标准instructions
        - 使用go:embed嵌入到二进制文件
      
      - 修改: internal/service/openai_codex_transform.go
        - 添加embed支持
        - 增强getOpenCodeCodexHeader()的fallback逻辑
        - 新增GetCodexCLIInstructions()公开函数
        - 新增ReplaceWithCodexInstructions()用于手动替换
        - 新增IsInstructionError()用于错误检测
      
      ## 优势
      - 零停机:GitHub不可用时仍能正常工作
      - 离线可用:不依赖外部网络
      - 兼容性:使用标准codex CLI instructions
      - 部署简单:instructions嵌入到二进制文件
      f9713e87
    • shaw's avatar
      fix: Gemini OpenCode 教程 baseURL 改为 v1beta · 93db889a
      shaw authored
      93db889a
    • Wesley Liddick's avatar
      Merge pull request #226 from xilu0/main · 0df7385c
      Wesley Liddick authored
      feat(gateway): 优化 Antigravity/Gemini 思考块处理 此提交解决了思考块 (thinking blocks) 在转发过程中的兼容性问题
      0df7385c
    • Wesley Liddick's avatar
      Merge pull request #260 from IanShaw027/fix/sync-openai-gpt5-models · 1a3fa641
      Wesley Liddick authored
      fix: 同步 OpenAI GPT-5 模型列表并完善参数处理
      1a3fa641
    • Wesley Liddick's avatar
      Merge pull request #259 from cyhhao/main · 64614756
      Wesley Liddick authored
      fix: adjust OpenCode OpenAI example store placement
      64614756
    • Wesley Liddick's avatar
      Merge pull request #257 from Edric-Li/feat/ops-fullscreen-scrollbar · bb1fd54d
      Wesley Liddick authored
      feat(ops): 添加运维监控全屏模式 & 优化滚动条
      bb1fd54d
  2. 12 Jan, 2026 32 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
    • IanShaw027's avatar
      feat(ops): 添加 count_tokens 错误过滤功能 · 345a965f
      IanShaw027 authored
      功能特性:
      - 自动识别并标记 count_tokens 请求的错误
      - 支持配置是否在统计中忽略 count_tokens 错误
      - 错误数据完整保留,仅在统计时动态过滤
      
      技术实现:
      - ops_error_logger.go: 自动标记 count_tokens 请求
      - ops_repo.go: INSERT 语句添加 is_count_tokens 字段
      - ops_repo_dashboard.go: buildErrorWhere 核心过滤函数
      - ops_repo_preagg.go: 预聚合统计中添加过滤
      - ops_repo_trends.go: 趋势统计查询添加过滤(2 处)
      - ops_settings_models.go: 添加 ignore_count_tokens_errors 配置
      - ops_settings.go: 配置验证和默认值设置
      - ops_port.go: 错误日志模型添加 IsCountTokens 字段
      
      业务价值:
      - count_tokens 是探测性请求,其错误不影响真实业务 SLA
      - 用户可根据需求灵活控制是否计入统计
      - 提升错误率、告警等运维指标的准确性
      
      影响范围:
      - Dashboard 概览统计
      - 错误趋势图表
      - 告警规则评估
      - 预聚合指标(hourly/daily)
      - 健康分数计算
      345a965f
    • IanShaw027's avatar
      feat(ops): 添加 count_tokens 错误标记数据库迁移 · c02c1205
      IanShaw027 authored
      - 新增 is_count_tokens 布尔字段到 ops_error_logs 表
      - 默认值为 false
      - 支持后续动态过滤统计
      c02c1205
    • shaw's avatar
      Merge branch 'mt21625457/main' · 4da681f5
      shaw authored
      4da681f5
    • shaw's avatar
      fix(frontend): 修复账号管理页面分组显示和 Cookie 授权问题 · 68ba866c
      shaw authored
      - 新增 AccountGroupsCell 组件优化分组列显示(最多4个+折叠)
      - 修复 Cookie 自动授权时 group_ids/notes/expires_at 字段丢失
      - 修复 SettingsView 流超时配置前后端字段不一致问题
      68ba866c
    • yangjianbo's avatar
      fix(调度): 修复 outbox 空载写入并稳固回放测试 · 9622347f
      yangjianbo authored
      将 outbox payload 为空时写入 NULL
      避免事务因 JSON 解析错误中断
      调整回放测试为预置缓存后验证 last_used 更新
      
      测试: go test -tags=integration ./internal/repository
      9622347f
    • shaw's avatar
      fix(gateway): 修复 usage_logs 记录 IP 不正确的问题 · 8363663e
      shaw authored
      在 nginx 反向代理场景下,使用 ip.GetClientIP() 替代 c.ClientIP()
      以正确获取客户端真实 IP 地址
      8363663e
    • Wesley Liddick's avatar
      Merge pull request #251 from IanShaw027/fix/ops-bugs · b588ea19
      Wesley Liddick authored
      feat(ops): 运维看板功能增强 - 实时流量监控与指标阈值配置
      b588ea19
    • Wesley Liddick's avatar
      Merge pull request #250 from IanShaw027/fix/custom-error-codes-disable-scheduling · 465ba767
      Wesley Liddick authored
      fix(gateway): 自定义错误码触发停止调度
      465ba767
    • shaw's avatar
      fix(gateway): 修复 Claude Code 客户端检测和请求信息记录 · cf313d57
      shaw authored
      - 在 Messages 方法中调用 SetClaudeCodeClientContext 启用客户端检测
      - 修复 RecordUsageInput 未传递 UserAgent 和 IPAddress 的问题
      cf313d57
    • yangjianbo's avatar
      fix(调度): 修复流超时配置并补回放测试 · 8c1958c9
      yangjianbo authored
      删除前端未支持的 timeout_seconds 字段,避免类型检查失败
      新增调度 outbox 回放集成测试
      调整调度默认等待超时断言
      
      测试: make test
      8c1958c9
    • yangjianbo's avatar
    • IanShaw027's avatar
      fix(ops): 修复Go代码格式问题 · e0cccf6e
      IanShaw027 authored
      e0cccf6e
    • IanShaw027's avatar
      fix(ops): 修复错误日志和请求详情模态框的布局问题 · 89c1a413
      IanShaw027 authored
      - 修复 OpsErrorDetailsModal 的内容溢出问题,使用 flex 布局确保正确显示
      - 修复 OpsErrorLogTable 的表格滚动问题,添加 min-h-0 确保正确的滚动行为
      - 修复 OpsRequestDetailsModal 的布局问题,添加 pageSize 初始化并优化 flex 布局
      - 统一使用 flex 布局模式,确保模态框内容在不同屏幕尺寸下正确显示
      89c1a413
    • yangjianbo's avatar
      fix(config): 提升粘性会话默认等待时长 · 202ec21b
      yangjianbo authored
      - 默认值调整为 120s
      - 同步示例配置与环境变量
      202ec21b
    • ianshaw's avatar
      fix(gateway): 自定义错误码触发停止调度 · 6dcb2763
      ianshaw authored
      - 修改 HandleUpstreamError 逻辑,启用自定义错误码时所有在列表中的错误码都会停止调度
      - 添加 handleCustomErrorCode 函数处理自定义错误码的账号停用
      - 前端添加 429/529 错误码的警告提示,因为这些错误码已有内置处理机制
      - 更新 EditAccountModal、CreateAccountModal、BulkEditAccountModal 的错误码添加逻辑
      6dcb2763