- 16 Jan, 2026 8 commits
-
-
IanShaw027 authored
-
IanShaw027 authored
- 移除已弃用的 1.5 系列模型 - 调整模型优先级顺序(2.0 Flash > 2.5 Flash > 2.5 Pro > 3.0 Preview) - 同步前后端模型配置 - 更新相关测试用例和默认模型选择逻辑
-
longgexx authored
-
longgexx authored
支持为分组配置模型路由规则,可以指定特定模型模式优先使用的账号列表。 - 新增 model_routing 字段存储路由配置(JSONB格式,支持通配符匹配) - 新增 model_routing_enabled 字段控制是否启用路由 - 更新后端 handler/service/repository 支持路由配置的增删改查 - 更新前端 GroupsView 添加路由配置界面 - 添加数据库迁移脚本 040/041
-
yangjianbo authored
- 添加 enhanceCSPPolicy() 自动增强任何 CSP 策略 - 自动添加 nonce 占位符(如果策略中没有) - 自动添加 Cloudflare Insights 域名 - 即使配置文件使用旧策略也能正常工作 - 添加 enhanceCSPPolicy 和 addToDirective 单元测试 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
yangjianbo authored
- 添加 GenerateNonce() 生成加密安全的随机 nonce - SecurityHeaders 中间件为每个请求生成唯一 nonce - CSP 策略支持 __CSP_NONCE__ 占位符动态替换 - embed_on.go 注入的内联脚本添加 nonce 属性 - 添加 Cloudflare Insights 域名到 CSP 允许列表 - 添加完整单元测试,覆盖率达到 89.8% 解决的问题: - 内联脚本违反 CSP script-src 指令 - Cloudflare Insights beacon.min.js 加载被阻止 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
yangjianbo authored
- NewTimingWheelService 改为返回 error,避免 panic - ProvideTimingWheelService 透传 error 并更新 wire 生成代码 - 补充定时任务调度/取消/周期任务相关单元测试
-
wfunc authored
-
- 15 Jan, 2026 17 commits
-
-
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 错误都已修复。 -
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 检查通过✅ - 代码编译正常✅ -
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 -
IanShaw027 authored
- 将业务健康和基础设施健康的权重从80/20调整为70/30 - 使基础设施故障(DB/Redis)对总分影响更明显 - 修复三个失败的测试用例: * DB故障: 92→88 (期望70-90) * Redis故障: 96→94 (期望85-95) * 业务降级: 82→84.5 (期望84-85)
-
IanShaw027 authored
后端改动: - 添加 ops_job_heartbeats.last_result 字段记录任务执行结果 - 优化告警评估器统计信息(规则数/事件数/邮件数) - 统一各定时任务的心跳记录格式 前端改动: - 重构 OpsConcurrencyCard 使用父组件统一控制刷新节奏 - 移除独立的 5 秒刷新定时器,改用 refreshToken 机制 - 修复 TypeScript 类型错误
-
IanShaw027 authored
- 业务健康权重从 70% 提升到 80% - 基础设施健康权重从 30% 降低到 20% - 更加关注业务指标(SLA、错误率等)对整体健康的影响
-
yangjianbo authored
Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
yangjianbo authored
- Gemini 缓存键统一增加 gemini: 前缀,避免与其他平台命名空间冲突 - OAuth 账号 401 错误时设置 expires_at=now 并持久化,强制下次请求刷新 token - Redis 锁获取失败时降级为无锁刷新,仅在 token 接近过期时执行,并检查 ctx 取消状态 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
yangjianbo authored
新增 OpenAI/Claude TokenProvider 与缓存键生成 扩展 OAuth 缓存失效覆盖更多平台 统一 OAuth 缓存前缀与依赖注入
-
LLLLLLiulei authored
-
yangjianbo authored
-
yangjianbo authored
- OAuth 401 清理缓存并设置错误状态 - 移除 oauth_401_cooldown_minutes 配置及示例 - 更新 401 相关单测 破坏性变更: OAuth 401 不再临时不可调度,需手动恢复
-
LLLLLLiulei authored
This reverts commit 09c4f82927ddce1c9528c146a26457f53d02b034.
-
LLLLLLiulei authored
-
longgexx authored
在 usage_log_repo_integration_test.go 中添加本地的 truncateToDayUTC 辅助函数,修复因主代码重命名该函数导致的测试编译错误。 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
longgexx authored
将 dashboard_aggregation_repo.go 和 usage_log_repo.go 中的时区处理 从 UTC 改为使用服务器配置时区(默认 Asia/Shanghai),确保"今日" 统计数据与用户预期一致。 Co-Authored-By:Claude Opus 4.5 <noreply@anthropic.com>
-
longgexx authored
将仪表盘统计中的"今日"时间范围从UTC时区改为服务器配置时区, 使其与使用记录页面保持一致。 修改内容: - GetDashboardStats: 使用 timezone.Now() 和 timezone.Today() - GetDashboardStatsWithRange: 同上 影响的统计项: - 今日请求 (TodayRequests) - 今日 Token (TodayTokens) - 今日费用 (TodayCost/TodayActualCost) - 今日新用户 (TodayNewUsers) - 今日活跃用户 (ActiveUsers)
-
- 14 Jan, 2026 15 commits
-
-
IanShaw027 authored
-
IanShaw027 authored
- 在错误日志列表和详情中显示用户邮箱 - 在 GetErrorLogByID 中关联 users 表获取用户邮箱 - 在 OpsErrorLogFilter 中添加 UserQuery 字段 - 在 buildOpsErrorLogsWhere 中添加用户邮箱搜索条件 - 在 GetErrorLogs handler 中支持 user_query 参数
-
IanShaw027 authored
- 在 OpsUpstreamErrorEvent 中添加 UpstreamResponseBody 字段 - 用于存储上游服务返回的响应内容 - 区分客户端响应和上游响应
-
IanShaw027 authored
- 在 GetErrorLogByID 查询中添加 LEFT JOIN 关联查询 - 关联 accounts 和 groups 表获取名称 - 填充 AccountName 和 GroupName 字段
-
IanShaw027 authored
- 格式化代码(gofmt) - 修复空指针检查(staticcheck) - 删除未使用的函数(unused)
-
IanShaw027 authored
- 业务健康分数:错误率 50% + TTFT 50% - TTFT 阈值:1s → 100分,3s → 0分 - TTFT 对 AI 服务的用户体验更有意义 - 更新所有相关测试用例期望值
-
IanShaw027 authored
- 移除 SLA 组件(与错误率重复) - 恢复延迟组件,阈值调整为 1s-2s - 错误率阈值调整为 1%-10%(更宽松) - 业务健康分数:错误率 50% + 延迟 50% - 更新所有相关测试用例期望值
-
IanShaw027 authored
- 更新 TestComputeBusinessHealth 中 SLA 95% 边界测试的期望值 - 更新 TestComputeDashboardHealthScore 中中等健康度测试的期望值 - 适配移除延迟组件后的新健康分数计算逻辑
-
IanShaw027 authored
- 新增 GetErrorLogByID 接口用于获取单个错误日志详情 - 优化 GetErrorLogs 过滤逻辑,简化参数处理 - 简化前端错误详情模态框代码,提升可维护性 - 更新相关 API 接口和 i18n 翻译
-
longgexx authored
更新 usage_log_repo_integration_test.go 中的测试用例, 使其与 GetUsageTrendWithFilters 和 GetModelStatsWithFilters 方法的新签名保持一致。
-
longgexx authored
修复两个问题: 1. Token使用趋势图和模型分布图未响应筛选条件 2. 上午时段选择今天刷新后日期回退到前一天 前端修改: - 更新 dashboard API 类型定义,添加 model、account_id、group_id、stream 参数支持 - 修改 UsageView 趋势图加载逻辑,传递所有筛选参数到后端 - 修复日期格式化函数,使用本地时区避免 UTC 转换导致的日期偏移 后端修改: - Handler 层:接收并解析所有筛选参数(model、account_id、group_id、stream) - Service 层:传递完整的筛选参数到 Repository 层 - Repository 层:SQL 查询动态添加所有过滤条件 - 更新接口定义和测试 mock 以保持一致性 影响范围: - /admin/dashboard/trend 端点现支持完整筛选 - /admin/dashboard/models 端点现支持完整筛选 - 用户在后台使用记录页面选择任意筛选条件时,趋势图和模型分布图会实时响应 - 日期选择器在任何时区下都能正确保持今天的选择
-
longgexx authored
修复两个问题: 1. Token使用趋势图和模型分布图未响应筛选条件 2. 上午时段选择今天刷新后日期回退到前一天 前端修改: - 更新 dashboard API 类型定义,添加 model、account_id、group_id、stream 参数支持 - 修改 UsageView 趋势图加载逻辑,传递所有筛选参数到后端 - 修复日期格式化函数,使用本地时区避免 UTC 转换导致的日期偏移 后端修改: - Handler 层:接收并解析所有筛选参数(model、account_id、group_id、stream) - Service 层:传递完整的筛选参数到 Repository 层 - Repository 层:SQL 查询动态添加所有过滤条件 - 更新接口定义和所有调用点以保持一致性 影响范围: - /admin/dashboard/trend 端点现支持完整筛选 - /admin/dashboard/models 端点现支持完整筛选 - 用户在后台使用记录页面选择任意筛选条件时,趋势图和模型分布图会实时响应 - 日期选择器在任何时区下都能正确保持今天的选择
-
LLLLLLiulei authored
-
LLLLLLiulei authored
-
IanShaw027 authored
后端改动: - 添加 resolved 参数默认值处理(向后兼容,默认显示未解决错误) - 新增 status_codes_other 查询参数支持 - 移除 service 层的高级设置过滤逻辑,简化错误日志查询流程 前端改动: - 完善错误日志相关组件的国际化支持 - 优化 Ops 监控面板和设置对话框的用户体验
-