 IanShawandGitHub
|
0bc3a521b5
|
Merge branch 'Wei-Shaw:main' into rebuild/auth-identity-foundation
|
2026-04-22 17:24:38 +08:00 |
|
 IanShawandGitHub
|
3718d6dcd4
|
Merge branch 'Wei-Shaw:main' into fix/open-issues-cleanup
|
2026-03-15 17:49:20 +08:00 |
|
IanShaw027
|
979114db45
|
fix(gemini): 修复已注册用户 OAuth 授权时错误调用 onboardUser 的问题
问题:Google One Ultra 等已注册用户在 OAuth 授权时,如果 LoadCodeAssist
返回了 currentTier/paidTier 但没有返回 cloudaicompanionProject,之前的
逻辑会继续调用 onboardUser,导致 INVALID_ARGUMENT 错误。
修复:对齐 Gemini CLI 的处理逻辑:
- 当检测到用户已注册(有 currentTier/paidTier)时,不再调用 onboardUser
- 先尝试从 Cloud Resource Manager 获取可用项目
- 如果仍无法获取,返回友好的错误提示,引导用户手动填写 Project ID
这个修复解决了 Google One 订阅用户无法正常授权的问题。
|
2026-02-05 13:57:02 +08:00 |
|
IanShaw027
|
a61cc2cb24
|
fix(openai): 增强 Codex 工具过滤和参数标准化
- codex_transform: 过滤无效工具,支持 Responses-style 和 ChatCompletions-style 格式
- tool_corrector: 添加 fetch 工具映射,修正 bash/edit 参数命名规范
|
2026-01-17 11:00:07 +08:00 |
|
IanShaw027
|
ae21db77ec
|
fix(openai): 使用 prompt_cache_key 兜底粘性会话
opencode 请求不带 session_id/conversation_id,导致粘性会话失效。现在按 header 优先、prompt_cache_key 兜底生成 session hash,并补充单测验证优先级。
|
2026-01-17 02:31:16 +08:00 |
|
IanShaw027
|
a7165b0f73
|
fix(group): SIMPLE 模式启动补齐默认分组
|
2026-01-17 01:53:51 +08:00 |
|
IanShaw027
|
28e46e0e7c
|
fix(gemini): 更新 Gemini 模型列表配置
- 移除已弃用的 1.5 系列模型
- 调整模型优先级顺序(2.0 Flash > 2.5 Flash > 2.5 Pro > 3.0 Preview)
- 同步前后端模型配置
- 更新相关测试用例和默认模型选择逻辑
|
2026-01-16 23:47:42 +08:00 |
|
IanShaw027
|
415840088e
|
fix(lint): 修复剩余的errcheck错误
修复了测试文件中剩余的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 错误都已修复。
|
2026-01-16 00:14:19 +08:00 |
|
IanShaw027
|
c4f6c89b65
|
fix(lint): 修复golangci-lint检查发现的问题
修复了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 检查通过 ✅
- 代码编译正常 ✅
|
2026-01-16 00:02:22 +08:00 |
|
IanShaw027
|
539b41f421
|
feat(openai): 添加Codex工具调用自动修正功能
实现了完整的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
|
2026-01-15 23:52:50 +08:00 |
|
IanShaw027
|
b2ff326ced
|
fix(ops): 调整健康分数权重以修复CI测试
- 将业务健康和基础设施健康的权重从80/20调整为70/30
- 使基础设施故障(DB/Redis)对总分影响更明显
- 修复三个失败的测试用例:
* DB故障: 92→88 (期望70-90)
* Redis故障: 96→94 (期望85-95)
* 业务降级: 82→84.5 (期望84-85)
|
2026-01-15 23:02:15 +08:00 |
|
IanShaw027
|
8b95d16220
|
refactor(ops): 简化自动刷新定时器逻辑
- 合并双定时器为单一倒计时定时器
- 倒计时归零时触发数据刷新
- 添加自定义时间范围的安全回退
|
2026-01-15 22:07:23 +08:00 |
|
IanShaw027
|
a478822b8e
|
refactor(ops): 优化文案显示
- TTFT 定义统一改为"首 Token"/"First Token"(而非"首字节"/"first byte")
- 请求时长卡片标题去掉"(毫秒)"/"(ms)"后缀
|
2026-01-15 21:37:35 +08:00 |
|
IanShaw027
|
23aa69f56f
|
refactor(ops): 优化任务心跳和组件刷新机制
后端改动:
- 添加 ops_job_heartbeats.last_result 字段记录任务执行结果
- 优化告警评估器统计信息(规则数/事件数/邮件数)
- 统一各定时任务的心跳记录格式
前端改动:
- 重构 OpsConcurrencyCard 使用父组件统一控制刷新节奏
- 移除独立的 5 秒刷新定时器,改用 refreshToken 机制
- 修复 TypeScript 类型错误
|
2026-01-15 21:31:55 +08:00 |
|
IanShaw027
|
e93f086485
|
fix(ops): 请求时长详情显示所有请求
- 移除请求时长卡片详情按钮的 min_duration_ms 参数限制
- 现在点击详情会显示所有请求,按时长倒序排列
- 不再只显示 P99 以上的请求
|
2026-01-15 19:57:19 +08:00 |
|
IanShaw027
|
930e9ee55c
|
feat(ops): 添加自定义时间范围选择功能
功能特性:
- 在时间段选择器中增加"自定义"选项
- 点击后弹出对话框,支持选择任意时间范围
- 使用 HTML5 datetime-local 输入框,体验友好
- 自定义时显示格式化的时间范围标签(MM-DD HH:mm ~ MM-DD HH:mm)
- 默认初始化为最近1小时
技术实现:
- 扩展 TimeRange 类型支持 'custom'
- 添加 customStartTime 和 customEndTime 状态管理
- 创建 buildApiParams 辅助函数统一处理 API 参数
- 当选择自定义时,使用 start_time 和 end_time 参数替代 time_range
- 更新所有相关 API 调用支持自定义时间范围
国际化:
- 添加"自定义"、"开始时间"、"结束时间"翻译
|
2026-01-15 19:50:47 +08:00 |
|
IanShaw027
|
38961ba10e
|
refactor(ops): 优化阈值检查系统和布局
阈值检查系统优化:
- 引入三级阈值系统(normal/warning/critical)
- 统一阈值判断逻辑,支持警告和严重两个级别
- 移除硬编码的 TTFT 颜色判断,改用阈值配置
- 新增 getThresholdColorClass 统一颜色映射
布局优化:
- 优化详细指标在卡片内的响应式布局
- 改进宽屏下的卡片布局显示
- 优化指标数值的对齐和间距
|
2026-01-15 19:50:31 +08:00 |
|
IanShaw027
|
93b5b7474b
|
refactor(ops): 调整健康得分权重
- 业务健康权重从 70% 提升到 80%
- 基础设施健康权重从 30% 降低到 20%
- 更加关注业务指标(SLA、错误率等)对整体健康的影响
|
2026-01-15 19:50:02 +08:00 |
|
IanShaw027
|
1d231c6cc3
|
fix(mobile): 修复 UsersView 更多菜单定位并统一逻辑
**问题描述**:
- UsersView 的"更多"菜单仍然出现在页面左上角错误位置
- UsersView 使用 actionButtonRefs Map 获取按钮元素,导致定位失败
- UsersView 和 AccountsView 的菜单定位逻辑不一致,难以维护
**解决方案**:
- 修改 openActionMenu 函数签名,添加 MouseEvent 参数
- 使用 e.currentTarget 直接从事件对象获取触发元素
- 移除不必要的 actionButtonRefs Map 和 setActionButtonRef 函数
- 统一菜单宽度为 200px(与 AccountsView 一致)
- 完全复制 AccountsView 的定位逻辑,确保两者行为一致
**技术要点**:
- 移动端:菜单居中对齐按钮,优先显示在按钮下方
- 桌面端:使用鼠标位置定位,添加边界检测
- 简化代码,移除不必要的防御性检查
- 两个组件的菜单定位逻辑完全一致,便于维护
|
2026-01-15 10:21:35 +08:00 |
|
IanShaw027
|
20c71acb3b
|
fix(mobile): 优化移动端表格、操作栏和弹窗显示
**问题描述**:
- 表格在移动端显示列过多,需要横向滚动,内容被截断
- 顶部操作栏按钮拥挤,占用过多空间
- 弹窗表单在小屏幕上布局不合理
- "更多"操作菜单定位错误,位置过高或超出屏幕
- 滚动页面时菜单不会自动关闭,与卡片分离
**解决方案**:
1. **DataTable 组件 - 移动端卡片视图**
- 在 < 768px 时自动切换到卡片布局
- 每个表格行渲染为独立卡片,所有字段清晰可见
- 操作按钮在卡片底部,触摸目标足够大
- 支持深色模式,包含加载和空状态
- 自动应用于所有使用 DataTable 的管理页面
2. **UsersView 顶部操作栏优化**
- 移动端:搜索框全宽 + 次要按钮显示为图标 + 创建按钮突出
- 桌面端:保持原有布局(图标 + 文字)
- 使用响应式 Tailwind classes
3. **UserCreateModal 弹窗优化**
- 余额/并发数字段:移动端单列,桌面端双列
- 弹窗边距:移动端 8px,桌面端 16px
4. **操作菜单定位修复**
- UsersView: 移动端菜单居中对齐按钮,智能定位
- AccountsView: 移动端菜单优先显示在按钮下方
- 所有情况下确保菜单不超出屏幕边界
- 添加滚动监听,滚动时自动关闭菜单
**影响范围**:
- 所有使用 DataTable 的管理页面(8 个页面)自动获得移动端卡片视图
- 用户管理和账号管理页面的操作菜单定位优化
- 创建用户弹窗的响应式布局优化
**技术要点**:
- 使用 Tailwind 响应式断点(md:, sm:)
- 触摸目标 ≥ 44px
- 完整支持深色模式
- 向后兼容,桌面端保持原有布局
|
2026-01-15 10:08:14 +08:00 |
|
IanShaw027
|
5354ba3662
|
fix(ops): 修复错误列表用户显示并区分上游错误和请求错误
- 修复错误列表中用户列显示 \n 的问题
- 上游错误显示账号(account),请求错误显示用户(user)
- 错误详情模态框同步调整显示逻辑
- 添加 accountId 国际化翻译
|
2026-01-15 00:11:44 +08:00 |
|
IanShaw027
|
2daf13c4c8
|
style(backend): 修复 ops_service.go 代码格式
|
2026-01-15 00:04:37 +08:00 |
|
IanShaw027
|
16a90f3d3a
|
fix(types): 在 OpsErrorLog 类型中添加 user_email 字段
- 修复 TypeScript 编译错误
- 添加 user_email 字段到 OpsErrorLog 接口
|
2026-01-15 00:03:34 +08:00 |
|
IanShaw027
|
8a0ff15242
|
feat(i18n): 添加用户相关的国际化翻译
- 在中英文 i18n 文件中添加 errorLog.user 和 errorLog.userId
- 在中英文 i18n 文件中添加 errorDetail.user
- 支持错误日志和详情中的用户信息显示
|
2026-01-15 00:02:32 +08:00 |
|
IanShaw027
|
8c993dfd35
|
refactor(frontend): 将账号显示替换为用户显示
- 在错误日志表格中将账号列替换为用户列
- 在错误详情模态框中将账号信息替换为用户信息
- 显示用户邮箱而不是账号名称
- 上游错误的账号信息保留在上游错误上下文中
|
2026-01-14 23:59:26 +08:00 |
|
IanShaw027
|
2a6fb1e456
|
feat(ops): 添加用户信息显示和搜索功能
- 在错误日志列表和详情中显示用户邮箱
- 在 GetErrorLogByID 中关联 users 表获取用户邮箱
- 在 OpsErrorLogFilter 中添加 UserQuery 字段
- 在 buildOpsErrorLogsWhere 中添加用户邮箱搜索条件
- 在 GetErrorLogs handler 中支持 user_query 参数
|
2026-01-14 23:56:45 +08:00 |
|
IanShaw027
|
9e6cd36af4
|
feat(ops): 添加上游响应体字段到错误事件
- 在 OpsUpstreamErrorEvent 中添加 UpstreamResponseBody 字段
- 用于存储上游服务返回的响应内容
- 区分客户端响应和上游响应
|
2026-01-14 23:52:36 +08:00 |
|
IanShaw027
|
f25f992a30
|
fix(ops): 错误详情中显示账号和分组名称
- 在 GetErrorLogByID 查询中添加 LEFT JOIN 关联查询
- 关联 accounts 和 groups 表获取名称
- 填充 AccountName 和 GroupName 字段
|
2026-01-14 23:52:00 +08:00 |
|
IanShaw027
|
841d7ef2f2
|
fix(lint): 修复 golangci-lint 检查问题
- 格式化代码(gofmt)
- 修复空指针检查(staticcheck)
- 删除未使用的函数(unused)
|
2026-01-14 23:49:27 +08:00 |
|
IanShaw027
|
a7a49be850
|
refactor(ops): 使用TTFT替代Duration作为健康分数指标
- 业务健康分数:错误率 50% + TTFT 50%
- TTFT 阈值:1s → 100分,3s → 0分
- TTFT 对 AI 服务的用户体验更有意义
- 更新所有相关测试用例期望值
|
2026-01-14 23:47:43 +08:00 |
|
IanShaw027
|
d5eab7da3b
|
refactor(ops): 优化健康分数计算逻辑和阈值
- 移除 SLA 组件(与错误率重复)
- 恢复延迟组件,阈值调整为 1s-2s
- 错误率阈值调整为 1%-10%(更宽松)
- 业务健康分数:错误率 50% + 延迟 50%
- 更新所有相关测试用例期望值
|
2026-01-14 23:43:12 +08:00 |
|
IanShaw027
|
9b10241561
|
test(ops): 修复健康分数测试用例期望值
- 更新 TestComputeBusinessHealth 中 SLA 95% 边界测试的期望值
- 更新 TestComputeDashboardHealthScore 中中等健康度测试的期望值
- 适配移除延迟组件后的新健康分数计算逻辑
|
2026-01-14 23:39:09 +08:00 |
|
IanShaw027
|
76448ab555
|
refactor(frontend): 优化ops看板骨架屏组件
- 添加 fullscreen 属性支持,适配全屏模式
- 优化骨架屏布局,更好地匹配实际看板结构
- 改进加载动画效果,提升用户体验
|
2026-01-14 23:26:34 +08:00 |
|
IanShaw027
|
9584af5cb4
|
fix(ops): 优化错误日志查询和详情展示
- 新增 GetErrorLogByID 接口用于获取单个错误日志详情
- 优化 GetErrorLogs 过滤逻辑,简化参数处理
- 简化前端错误详情模态框代码,提升可维护性
- 更新相关 API 接口和 i18n 翻译
|
2026-01-14 23:16:01 +08:00 |
|
IanShaw027
|
5432087d96
|
refactor(frontend): 优化ops错误详情模态框代码格式和功能
- 重构OpsErrorDetailModal.vue代码格式,提升可读性
- 添加上游错误tab显示功能
- 完善i18n翻译(upstream_http)
- 优化其他ops组件代码格式
|
2026-01-14 20:49:18 +08:00 |
|
IanShaw027
|
514c0562e0
|
refactor(frontend): 清理OpsDashboardHeader中的i18n翻译
将技术术语的i18n翻译键替换为硬编码文本:
- ms (P99) - 毫秒和百分位数标识
- TTFT - Time To First Token缩写
这些是通用技术术语,不需要国际化。
|
2026-01-14 19:02:02 +08:00 |
|
IanShaw027
|
371275ec34
|
refactor(frontend): 清理ops组件中未使用的i18n翻译
- 移除i18n文件中未使用的翻译键(cpu, redis, qps, ttft等)
- 将技术术语改为硬编码(QPS, CPU, TPS等不需要翻译)
- 简化OpsDashboardHeader、OpsErrorDetailModal等组件的i18n调用
|
2026-01-14 17:04:30 +08:00 |
|
IanShaw027
|
55e469c7fe
|
fix(ops): 优化错误日志过滤和查询逻辑
后端改动:
- 添加 resolved 参数默认值处理(向后兼容,默认显示未解决错误)
- 新增 status_codes_other 查询参数支持
- 移除 service 层的高级设置过滤逻辑,简化错误日志查询流程
前端改动:
- 完善错误日志相关组件的国际化支持
- 优化 Ops 监控面板和设置对话框的用户体验
|
2026-01-14 16:26:33 +08:00 |
|
IanShaw027
|
8d0767352b
|
fix(ops): 修复ops handler逻辑
|
2026-01-14 14:30:41 +08:00 |
|
IanShaw027
|
918a253851
|
feat(frontend): 完善ops监控面板和组件功能
|
2026-01-14 14:30:18 +08:00 |
|
IanShaw027
|
63711067e6
|
refactor(ops): 完善gateway服务ops集成
|
2026-01-14 14:30:00 +08:00 |
|
IanShaw027
|
7158b38897
|
refactor(ops): 优化ops repository数据访问层
|
2026-01-14 14:29:39 +08:00 |
|
IanShaw027
|
7f317b9093
|
feat(ops): 增强ops核心服务功能和重试机制
|
2026-01-14 14:29:19 +08:00 |
|
IanShaw027
|
7c4309ea24
|
feat(ops): 添加ops handler和路由配置
|
2026-01-14 14:29:01 +08:00 |
|
IanShaw027
|
5013290486
|
feat(frontend): 优化ops监控UI组件
|
2026-01-14 12:41:24 +08:00 |
|
IanShaw027
|
8cf3e9a620
|
feat(frontend): 更新ops API接口和国际化文案
|
2026-01-14 12:41:05 +08:00 |
|
IanShaw027
|
060699c3b8
|
refactor(ops): 更新gateway服务集成ops功能
|
2026-01-14 12:40:49 +08:00 |
|
IanShaw027
|
2ca6c631ac
|
refactor(ops): 重构ops handler和repository层
|
2026-01-14 12:40:34 +08:00 |
|
IanShaw027
|
967e25878f
|
refactor(ops): 重构ops核心服务层代码
|
2026-01-14 12:40:12 +08:00 |
|
IanShaw027
|
182683814b
|
refactor(ops): 移除duration相关告警指标,简化监控配置
主要改动:
- 移除 p95_latency_ms 和 p99_latency_ms 告警指标类型
- 移除配置中的 latency_p99_ms_max 阈值设置
- 简化健康分数计算(移除latency权重,重新归一化SLA和错误率)
- 移除duration相关的诊断规则和阈值检查
- 统一术语:延迟 → 请求时长
- 保留duration数据展示,但不再用于告警判断
- 聚焦TTFT作为主要的响应速度告警指标
影响范围:
- Backend: handler, service, models, tests
- Frontend: API types, i18n, components
|
2026-01-14 10:52:56 +08:00 |
|
IanShaw027
|
33f58d583d
|
fix(ops): 修复告警状态验证和错误处理逻辑
- 增强告警事件状态验证,添加合法状态值检查
- 移除重试逻辑中的遗留字段赋值
- 修正仓库不可用时的错误类型
- 格式化测试文件代码
|
2026-01-14 09:39:18 +08:00 |
|
IanShaw027
|
1e169685f4
|
feat(i18n): 添加ops新功能的国际化文案
- 新增告警静默相关的中英文翻译
- 补充错误分类和重试状态的文案
- 完善ops管理界面的提示信息
|
2026-01-14 09:04:09 +08:00 |
|
IanShaw027
|
f38a3e7585
|
feat(ui): 优化ops监控面板和组件功能
- 增强告警事件卡片的交互和静默功能
- 完善错误详情弹窗的展示和操作
- 优化错误日志表格的筛选和排序
- 新增重试和解决状态的UI支持
|
2026-01-14 09:03:59 +08:00 |
|
IanShaw027
|
b8da5d45ce
|
feat(api): 扩展前端ops API接口
- 新增告警静默相关API调用
- 增强错误日志查询和过滤接口
- 添加重试和解决状态管理接口
|
2026-01-14 09:03:45 +08:00 |
|
IanShaw027
|
659df6e220
|
feat(handler): 新增ops管理接口和路由
- 添加告警静默管理接口
- 扩展错误日志查询和操作接口
- 新增重试和解决状态相关端点
- 完善错误日志记录功能
|
2026-01-14 09:03:35 +08:00 |
|
IanShaw027
|
d601768016
|
feat(service): 增强ops业务逻辑和告警功能
- 实现告警静默功能的业务逻辑
- 优化错误分类和重试机制
- 扩展告警评估和通知功能
- 完善错误解决和重试结果处理
|
2026-01-14 09:03:16 +08:00 |
|
IanShaw027
|
16ddc6a83b
|
feat(repository): 扩展ops数据访问层功能
- 新增告警静默相关数据库操作
- 增强错误日志查询和统计功能
- 优化重试结果和解决状态的存储
|
2026-01-14 09:03:01 +08:00 |
|
IanShaw027
|
340dc9cadb
|
feat(db): 添加ops告警静默和错误分类优化迁移
- 添加ops告警静默功能的数据库结构
- 优化错误分类和重试结果字段标准化
|
2026-01-14 09:02:45 +08:00 |
|
IanShaw027
|
f9713e8733
|
fix(codex): 添加codex CLI instructions fallback机制
## 问题
- 使用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嵌入到二进制文件
|
2026-01-13 11:14:32 +08:00 |
|
IanShaw027
|
6ad29a470c
|
style(ops): 移除未使用的 isAutoRefreshActive 变量
|
2026-01-12 17:28:25 +08:00 |
|
IanShaw027
|
2d45e61a9b
|
style(ops): 修复代码格式问题以通过 golangci-lint
|
2026-01-12 17:18:49 +08:00 |
|
IanShaw027
|
b98fb013ae
|
feat(ops): 添加自动刷新配置功能
功能特性:
- 支持配置启用/禁用自动刷新
- 可配置刷新间隔(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 秒)
|
2026-01-12 17:07:07 +08:00 |
|
IanShaw027
|
345a965fa3
|
feat(ops): 添加 count_tokens 错误过滤功能
功能特性:
- 自动识别并标记 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)
- 健康分数计算
|
2026-01-12 17:06:12 +08:00 |
|
IanShaw027
|
c02c120579
|
feat(ops): 添加 count_tokens 错误标记数据库迁移
- 新增 is_count_tokens 布尔字段到 ops_error_logs 表
- 默认值为 false
- 支持后续动态过滤统计
|
2026-01-12 17:06:12 +08:00 |
|
IanShaw027
|
e0cccf6ed2
|
fix(ops): 修复Go代码格式问题
|
2026-01-12 14:36:32 +08:00 |
|
IanShaw027
|
89c1a41305
|
fix(ops): 修复错误日志和请求详情模态框的布局问题
- 修复 OpsErrorDetailsModal 的内容溢出问题,使用 flex 布局确保正确显示
- 修复 OpsErrorLogTable 的表格滚动问题,添加 min-h-0 确保正确的滚动行为
- 修复 OpsRequestDetailsModal 的布局问题,添加 pageSize 初始化并优化 flex 布局
- 统一使用 flex 布局模式,确保模态框内容在不同屏幕尺寸下正确显示
|
2026-01-12 14:31:21 +08:00 |
|
IanShaw027
|
5443efd7d7
|
feat(ops): 前端集成实时流量功能
- 添加实时流量API调用方法
- 优化OpsDashboard组件代码
|
2026-01-12 14:18:16 +08:00 |
|
IanShaw027
|
62771583e7
|
feat(ops): 集成实时流量API接口
- 添加实时流量handler处理逻辑
- 注册实时流量路由
- 扩展ops service接口定义
|
2026-01-12 14:17:58 +08:00 |
|
IanShaw027
|
5526f122b7
|
feat(ops): 新增实时流量数据层
- 添加实时流量repository层实现
- 添加实时流量service层逻辑
- 定义实时流量数据模型
|
2026-01-12 14:17:42 +08:00 |
|
IanShaw027
|
098bf5a1e8
|
fix(i18n): 补充缺失的英文翻译
- 添加 admin.ops.requestsTitle
- 添加 admin.ops.alertRules.manage 和 saveSuccess/deleteSuccess
- 添加 common.settings
- 添加完整的 admin.ops.settings 部分
- 添加 admin.ops.tooltips.totalRequests 和 upstreamErrors
|
2026-01-12 14:10:44 +08:00 |
|
IanShaw027
|
8e248e0853
|
fix(ops): 修正卡片标题翻译
- 卡片标题显示"请求"
- 卡片内部标签保持"请求数"
|
2026-01-12 14:05:10 +08:00 |
|
IanShaw027
|
f55ba3f6c1
|
fix(ops): 优化卡片标题和明细筛选逻辑
- 将"请求数"改为"请求"
- SLA卡片明细只显示错误请求(kind='error')
- TTFT卡片明细按延迟降序排序
|
2026-01-12 13:00:39 +08:00 |
|
IanShaw027
|
db51e65b42
|
chore: 添加ESLint忽略配置
- 添加.eslintignore文件
|
2026-01-12 11:44:34 +08:00 |
|
IanShaw027
|
72a2ed958b
|
feat(ops): 看板上应用指标阈值显示
- 在OpsDashboard中加载阈值配置
- 在OpsDashboardHeader中根据阈值判断指标是否超标
- 超出阈值的指标显示为红色(SLA低于阈值也显示红色)
- 用Icon组件替换emoji表情
|
2026-01-12 11:44:14 +08:00 |
|
IanShaw027
|
d0b91a40d4
|
feat(ops): 添加指标阈值配置UI
- 在OpsSettingsDialog中添加指标阈值配置表单
- 在OpsRuntimeSettingsCard中添加阈值配置区域
- 添加阈值验证逻辑
- 更新国际化文本
|
2026-01-12 11:43:54 +08:00 |
|
IanShaw027
|
bd74bf7994
|
fix(ops): 添加brain图标替换emoji表情
- 在Icon组件中添加brain图标
- 用于替换运维诊断中的emoji表情
|
2026-01-12 11:43:35 +08:00 |
|
IanShaw027
|
f28d4b78e7
|
feat(ops): 前端添加指标阈值类型定义和API
- 添加OpsMetricThresholds类型定义
- 新增getMetricThresholds和updateMetricThresholds API方法
|
2026-01-12 11:43:15 +08:00 |
|
IanShaw027
|
7536dbfee5
|
feat(ops): 后端添加指标阈值管理API
- 新增GetMetricThresholds和UpdateMetricThresholds接口
- 支持配置SLA、延迟P99、TTFT P99、请求错误率、上游错误率阈值
- 添加参数验证逻辑
- 提供默认阈值配置
|
2026-01-12 11:42:56 +08:00 |
|
IanShaw027
|
c48795a948
|
fix(ci): 修复最后一批CI错误
- 修复 ops_repo_trends.go 中剩余3处 Rows.Close 未检查错误
- 修复 ops_settings.go, ops_settings_models.go, ops_trends.go 的格式化问题
|
2026-01-12 00:02:19 +08:00 |
|
IanShaw027
|
19b67e89a2
|
fix(ci): 修复剩余的CI错误
- 修复 ops_repo_latency_histogram_buckets.go 中另一个函数的 WriteString 未检查错误
- 修复 ops_repo_request_details.go 和 ops_repo_trends.go 中的 Rows.Close 未检查错误
- 修复 ops_alert_models.go, ops_cleanup_service.go, ops_request_details.go 的格式化问题
- 移除 ops_retry.go 中未使用的 status 字段
- 修复 maxTime 函数重复声明(将测试文件中的函数重命名为 testMaxTime)
|
2026-01-11 23:57:20 +08:00 |
|
IanShaw027
|
f017fd97c1
|
fix(ci): 修复所有CI失败问题
- 修复 ops_ws_handler.go 代码格式问题
- 修复所有未检查的错误返回值(Rows.Close 和 WriteString)
- 更新 .golangci.yml 排除 ops 相关服务文件的 redis 导入检查
|
2026-01-11 23:49:03 +08:00 |
|
IanShaw027
|
ce3336e3f4
|
fix(lint): 修复代码格式和未使用变量问题
- 修复 ops_ws_handler.go 中的代码格式和返回值
- 移除 ops_repo_latency_histogram_buckets.go 中不必要的错误检查
- 修复 api_contract_test.go 缩进并添加运维监控配置项测试
- 移除 ops_cleanup_service.go 中未使用的变量
- 添加 ops_retry.go 中缺失的 status 字段
|
2026-01-11 23:40:09 +08:00 |
|
IanShaw027
|
54c5788b86
|
fix(lint): 修复所有golangci-lint错误
- 修复depguard错误:为ops service文件添加redis导入例外
- 修复errcheck错误:添加错误检查和类型断言检查
- 修复gofmt错误:格式化代码
- 修复ineffassign错误:移除无效的idx++赋值
- 修复staticcheck错误:合并条件赋值
- 修复unused错误:移除未使用的字段和函数
- ops_cleanup_service.go: entryID字段
- ops_retry.go: status字段
- ops_upstream_context.go: getOpsUpstreamErrors函数
|
2026-01-11 23:26:29 +08:00 |
|
IanShaw027
|
4cb7b26f03
|
fix: 移除未使用的os包导入
|
2026-01-11 23:18:00 +08:00 |
|
IanShaw027
|
3dfb62e996
|
merge: 合并main分支最新改动
解决冲突:
- backend/internal/config/config.go: 合并Ops和Dashboard配置
- backend/internal/server/api_contract_test.go: 合并handler初始化
- backend/internal/service/openai_gateway_service.go: 保留Ops错误追踪逻辑
- backend/internal/service/wire.go: 合并Ops和APIKeyAuth provider
主要合并内容:
- Dashboard缓存和预聚合功能
- API Key认证缓存优化
- Codex转换支持
- 使用日志分区表
|
2026-01-11 23:15:01 +08:00 |
|
IanShaw027
|
d5c711d081
|
refactor(ops): 从系统设置页面移除运维监控配置项
- 移除Ops Monitoring设置卡片及相关配置项
- 移除ops相关组件导入和展示逻辑
- 相关配置已迁移至运维监控页面统一管理
|
2026-01-11 23:03:21 +08:00 |
|
IanShaw027
|
73b62bb15c
|
feat(ops): 增强上游错误追踪和新增定时报告服务
- 优化错误日志中间件,即使请求成功也记录上游重试/故障转移事件
- 新增OpsScheduledReportService支持定时报告功能
- 使用Redis分布式锁确保定时任务单实例执行
- 完善依赖注入配置
- 优化前端错误趋势图表展示
|
2026-01-11 23:00:31 +08:00 |
|
IanShaw027
|
8fffcd8091
|
feat(ops): 优化健康评分算法和智能诊断机制
- 采用分层加权评分(业务70% + 基础设施30%),避免重复扣分
- 新增延迟诊断(P99 > 2s critical, > 1s warning)
- 新增资源诊断(CPU/内存/DB/Redis状态)
- 调整诊断阈值(上游错误率5% critical,请求错误率3% critical)
- 为每个诊断项添加可操作建议
- 添加完整的单元测试覆盖(30+测试用例)
- 完善中英文国际化文本
|
2026-01-11 21:42:02 +08:00 |
|
IanShaw027
|
c8e3a476fc
|
feat(ops): 限制告警规则最多显示6个,超出可滚动
|
2026-01-11 21:01:26 +08:00 |
|
IanShaw027
|
808cee9665
|
feat(ops): 限制并发卡片最多显示3组数据,超出可滚动
|
2026-01-11 20:59:27 +08:00 |
|
IanShaw027
|
92eafbc2a6
|
feat(ops): 优化运维监控界面组件功能和交互
|
2026-01-11 20:56:36 +08:00 |
|
IanShaw027
|
2548800c3f
|
feat(ui): 增强Select组件功能和样式
|
2026-01-11 20:56:27 +08:00 |
|
IanShaw027
|
9dce8a5388
|
i18n(ops): 添加运维监控相关国际化文本
|
2026-01-11 20:56:19 +08:00 |
|
IanShaw027
|
76484bd5c9
|
chore(ops): 更新依赖注入配置
|
2026-01-11 20:56:10 +08:00 |
|
IanShaw027
|
e4ed35fe01
|
feat(ops): 增强告警评估和指标收集服务功能
|
2026-01-11 20:56:02 +08:00 |
|
IanShaw027
|
f5e45c1a8a
|
refactor(ops): 优化运维监控数据仓库层查询逻辑
|
2026-01-11 20:55:52 +08:00 |
|
IanShaw027
|
a2f83ff032
|
test(ops): 添加告警评估服务单元测试
|
2026-01-11 20:55:44 +08:00 |
|
IanShaw027
|
1b938b2003
|
feat(ops): 统一弹窗组件并优化分页设置
- OpsErrorDetailsModal和OpsRequestDetailsModal改用BaseDialog统一弹窗组件
- 分页默认值从50改为20条,减少单页数据量
- OpsAlertEventsCard表格添加sticky表头,优化滚动体验
- 移除自定义Teleport和Transition实现,使用统一组件
|
2026-01-11 20:41:39 +08:00 |
|
IanShaw027
|
dd59e872ff
|
feat(ops): 添加分组和账号级别监控指标
- 后端新增 GetAccountAvailability 方法获取账号可用性数据
- 添加分组可用率和限流率计算辅助函数
- 前端支持分组和账号级别的监控指标类型
- 优化警报规则指标选择器,按类别分组显示
|
2026-01-11 20:33:52 +08:00 |
|
IanShaw027
|
c1a3dd41dd
|
feat(ops): 添加运维监控配置开关
- 在 .env.example 和 config.example.yaml 中添加 ops.enabled 配置项
- 默认值为 true,保持现有行为
- 当设置为 false 时,左侧栏隐藏运维监控菜单并禁用所有运维监控功能
- 修改后端 GetSettings API,让 ops_monitoring_enabled 受 config.ops.enabled 控制
- 数据清理和预聚合任务默认保持开启状态(通过运维监控设置对话框配置)
|
2026-01-11 20:10:08 +08:00 |
|