1. 18 Jan, 2026 7 commits
  2. 17 Jan, 2026 2 commits
    • ianshaw's avatar
      fix(ops): 统一 request-errors 和 SLA 的错误分类逻辑 · bc1d7edc
      ianshaw authored
      修复 request-errors 接口与 Dashboard Overview SLA 计算不一致的问题:
      - errors 视图现在只排除业务限制错误(余额不足、并发限制等)
      - 上游 429/529 错误现在包含在 errors 视图中,与 SLA 计算保持一致
      - excluded 视图现在只显示业务限制错误
      
      这确保了 request-errors 接口和 Dashboard 的 error_count_sla 使用相同的过滤逻辑。
      bc1d7edc
    • IanShaw027's avatar
      fix(openai): 增强 Codex 工具过滤和参数标准化 · a61cc2cb
      IanShaw027 authored
      - codex_transform: 过滤无效工具,支持 Responses-style 和 ChatCompletions-style 格式
      - tool_corrector: 添加 fetch 工具映射,修正 bash/edit 参数命名规范
      a61cc2cb
  3. 16 Jan, 2026 28 commits
  4. 15 Jan, 2026 3 commits
    • IanShaw027's avatar
      fix(lint): 修复剩余的errcheck错误 · 41584008
      IanShaw027 authored
      修复了测试文件中剩余的6处类型断言未检查错误:
      - 第115-118行:choices.message.tool_calls 的类型断言链
      - 第140和145行:multiple tool calls 测试的类型断言
      - 第343和345行:ComplexSSEData 测试的类型断言
      
      **修复模式:**
      所有类型断言都改为使用 ok 检查:
      ```go
      // 修复前
      choices := payload["choices"].([]any)
      
      // 修复后
      choices, ok := payload["choices"].([]any)
      if !ok || len(choices) == 0 {
          t.Fatal("No choices found in result")
      }
      ```
      
      **测试验证:**
      -  TestCorrectToolCallsInSSEData - 所有子测试通过
      -  TestComplexSSEData - 通过
      -  TestCorrectToolParameters - 通过
      -  所有类型断言都有 ok 检查
      -  添加了数组长度验证
      
      现在所有 errcheck 错误都已修复。
      41584008
    • IanShaw027's avatar
      fix(lint): 修复golangci-lint检查发现的问题 · c4f6c89b
      IanShaw027 authored
      修复了4个lint问题:
      1. errcheck (3处): 在测试中添加类型断言的ok检查
      2. govet copylocks (1处): 将mutex从ToolCorrectionStats移到CodexToolCorrector
      
      **详细修改:**
      
      1. **openai_tool_corrector_test.go**
         - 添加了类型断言的ok检查,避免panic
         - 在解析JSON后检查payload结构的有效性
         - 改进错误处理和测试可靠性
      
      2. **openai_tool_corrector.go**
         - 将sync.RWMutex从ToolCorrectionStats移到CodexToolCorrector
         - 避免在GetStats()返回时复制mutex
         - 保持线程安全的同时符合Go最佳实践
      
      **测试验证:**
      - 所有单元测试通过 
      - go vet 检查通过 
      - 代码编译正常 
      c4f6c89b
    • IanShaw027's avatar
      feat(openai): 添加Codex工具调用自动修正功能 · 539b41f4
      IanShaw027 authored
      实现了完整的Codex工具调用拦截和自动修正系统,解决OpenCode使用Codex模型时的工具调用兼容性问题。
      
      **核心功能:**
      
      1. **工具名称自动映射**
         - apply_patch/applyPatch → edit
         - update_plan/updatePlan → todowrite
         - read_plan/readPlan → todoread
         - search_files/searchFiles → grep
         - list_files/listFiles → glob
         - read_file/readFile → read
         - write_file/writeFile → write
         - execute_bash/executeBash/exec_bash/execBash → bash
      
      2. **工具参数自动修正**
         - bash: 自动移除不支持的 workdir/work_dir 参数
         - edit: 自动将 path 参数重命名为 file_path
         - 支持 JSON 字符串和对象两种参数格式
      
      3. **流式响应集成**
         - 在 SSE 数据流中实时修正工具调用
         - 支持多种 JSON 结构(tool_calls, function_call, delta, choices等)
         - 不影响响应性能和用户体验
      
      4. **统计和监控**
         - 记录每次工具修正的详细信息
         - 提供修正统计数据查询
         - 便于问题排查和性能优化
      
      **实现文件:**
      - `openai_tool_corrector.go`: 工具修正核心逻辑(250行)
      - `openai_tool_corrector_test.go`: 完整的单元测试(380+行)
      - `openai_gateway_service.go`: 流式响应集成
      - `openai_gateway_service_tool_correction_test.go`: 集成测试
      
      **测试覆盖:**
      - 工具名称映射测试(18个映射规则)
      - 参数修正测试(bash workdir、edit path等)
      - SSE数据修正测试(多种JSON结构)
      - 统计功能测试
      - 所有测试通过 
      
      **解决的问题:**
      修复了 OpenCode 使用 sub2api 中转 Codex 时,因工具名称和参数不兼容导致的工具调用失败问题。
      Codex 模型有时会忽略指令文件中的工具映射说明,导致调用不存在的工具(如 apply_patch)。
      现在通过流式响应拦截,自动将错误的工具调用修正为 OpenCode 兼容的格式。
      
      **参考文档:**
      - OpenCode 工具规范: https://opencode.ai/docs/
      - Codex Bridge 指令: backend/internal/service/prompts/codex_opencode_bridge.txt
      539b41f4