yangjianbo
771baa66ee
feat(界面): 优化分页跳转与页大小显示
...
分页组件支持隐藏每页条数选择器并新增跳转页输入
清理任务列表启用跳转页并固定每页 5 条
补充中英文分页文案
2026-01-18 14:31:22 +08:00
yangjianbo
bd18f4b8ef
feat(清理任务): 引入Ent存储并补充日志与测试
...
新增 usage_cleanup_task Ent schema 与仓储实现,支持清理任务排序分页
补充清理任务全链路日志、仪表盘重算触发及 UI 过滤调整
完善 repository/service 单测并引入 sqlite 测试依赖
2026-01-18 14:18:28 +08:00
yangjianbo
bf7b79f2f0
fix(数据库): 优化任务状态更新查询,使用别名提高可读性
2026-01-18 11:58:53 +08:00
yangjianbo
8391d480c9
fix(数据库): 补充分组列回填前置保护
2026-01-18 11:52:59 +08:00
yangjianbo
d17f853a5f
fix(数据库): 补充允许分组列兼容迁移
2026-01-18 11:45:43 +08:00
yangjianbo
ef5a41057f
feat(usage): 添加清理任务与统计过滤
2026-01-18 10:52:18 +08:00
yangjianbo
74a3c74514
perf(Caddy): 添加静态资源长期缓存配置
...
- 为 /assets/* 设置 1 年缓存 + immutable 标记
- 包含 logo.png 和 favicon.ico
- 移除可能干扰缓存的 Pragma/Expires 头
效果:
- 浏览器缓存命中后不再发送请求
- Cloudflare CDN 可正确缓存静态资源
- 重复访问页面秒开
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-16 22:49:05 +08:00
程序猿MT
3d6d131889
Merge branch 'Wei-Shaw:main' into main
2026-01-16 22:31:14 +08:00
yangjianbo
b0569d873a
perf(路由预加载): 修复静态 import 导致入口文件膨胀问题
...
问题:
- 原实现使用静态 import() 映射表
- Rollup 静态分析时将所有 37 个视图组件引用打包进 index.js
- 导致首次加载时需要解析大量未使用的 import 语句
修复:
- 移除静态 import() 映射,改用纯路径字符串邻接表
- 通过 router.getRoutes() 动态获取组件的 import 函数
- 延迟初始化 routePrefetch,首次导航时才创建实例
- 更新测试文件使用 mock router
效果:
- index.js 中动态 import 引用从 37 个减少到 1 个
- 首次加载不再包含未使用的视图组件引用
- 41 个测试全部通过
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-16 22:07:39 +08:00
yangjianbo
d9433699db
Merge branch 'dev' of https://github.com/mt21625457/aicodex2api into dev
2026-01-16 21:49:28 +08:00
yangjianbo
92234857f7
perf(前端): 优化页面加载性能和用户体验
...
- 添加路由预加载功能,使用 requestIdleCallback 在浏览器空闲时预加载
- 配置 Vite manualChunks 分离 vendor 库(vue/ui/chart/i18n/misc)
- 新增 NavigationProgress 导航进度条组件,支持防闪烁和无障碍
- 集成 Vitest 测试框架,添加 40 个单元测试和集成测试
- 支持 prefers-reduced-motion 和暗色模式
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-16 21:48:57 +08:00
yangjianbo
8efa361728
perf(前端): 优化页面加载性能和用户体验
...
- 添加路由预加载功能,使用 requestIdleCallback 在浏览器空闲时预加载
- 配置 Vite manualChunks 分离 vendor 库(vue/ui/chart/i18n/misc)
- 新增 NavigationProgress 导航进度条组件,支持防闪烁和无障碍
- 集成 Vitest 测试框架,添加 40 个单元测试和集成测试
- 支持 prefers-reduced-motion 和暗色模式
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-16 21:43:39 +08:00
yangjianbo
eb432a49ed
perf(前端): 移除 Google Fonts 改用系统字体栈
...
- 删除 Google Fonts @import,解决国内访问阻塞问题
- 使用 system-ui 优先的系统字体栈
- 添加中文字体支持(苹方、冬青黑、微软雅黑)
- 移除 Inter 字体专用的 font-feature-settings
此改动可显著提升国内用户的页面加载速度,避免因 Google Fonts
被墙导致的渲染阻塞问题。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-16 19:49:33 +08:00
Wesley Liddick
04811c00cb
Merge pull request #313 from mt21625457/main
...
fix(ci): 修复各类bug
2026-01-16 19:30:07 +08:00
Wesley Liddick
06093d4f79
Merge pull request #311 from longgexx/main
...
添加分组级别模型路由配置功能(Anthropic平台)
2026-01-16 19:22:12 +08:00
longgexx
577ee16108
Merge branch 'main' of github.com:longgexx/sub2api
2026-01-16 17:35:44 +08:00
longgexx
392a8ac7ea
修复格式问题。
2026-01-16 17:35:17 +08:00
longgexx
226920064b
Merge branch 'Wei-Shaw:main' into main
2026-01-16 17:26:54 +08:00
longgexx
19865b865f
feat(group): 添加分组级别模型路由配置功能
...
支持为分组配置模型路由规则,可以指定特定模型模式优先使用的账号列表。
- 新增 model_routing 字段存储路由配置(JSONB格式,支持通配符匹配)
- 新增 model_routing_enabled 字段控制是否启用路由
- 更新后端 handler/service/repository 支持路由配置的增删改查
- 更新前端 GroupsView 添加路由配置界面
- 添加数据库迁移脚本 040/041
2026-01-16 17:26:05 +08:00
yangjianbo
e3f812c2fe
fix(安全): CSP 策略自动增强,无需配置文件修改即可生效
...
- 添加 enhanceCSPPolicy() 自动增强任何 CSP 策略
- 自动添加 nonce 占位符(如果策略中没有)
- 自动添加 Cloudflare Insights 域名
- 即使配置文件使用旧策略也能正常工作
- 添加 enhanceCSPPolicy 和 addToDirective 单元测试
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-16 17:20:39 +08:00
yangjianbo
c9f79dee66
feat(安全): 实现 CSP nonce 支持解决内联脚本安全问题
...
- 添加 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 >
2026-01-16 17:05:49 +08:00
yangjianbo
c659788022
fix(前端路由): 添加 chunk 加载错误自动恢复机制
...
- 检测动态导入模块加载失败错误
- 自动刷新页面获取最新资源
- 使用 sessionStorage 防止无限刷新循环(10秒冷却)
- 解决前端重新部署后用户缓存导致的加载失败问题
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-16 16:20:10 +08:00
yangjianbo
aeb987ceb1
Merge branch 'dev'
2026-01-16 15:35:38 +08:00
yangjianbo
b478982484
style(界面): 修复 AccountsView ESLint 报错
...
移除多余分号并整理 onMounted 代码块,确保 lint:check 通过。
2026-01-16 15:25:47 +08:00
yangjianbo
fe71ee57b3
fix(定时轮): 初始化失败返回错误并补充单测
...
- NewTimingWheelService 改为返回 error,避免 panic
- ProvideTimingWheelService 透传 error 并更新 wire 生成代码
- 补充定时任务调度/取消/周期任务相关单元测试
2026-01-16 15:25:33 +08:00
wfunc
452fa53c0d
feat: Claude Sonnet 429 仅限模型限流
2026-01-16 13:03:04 +08:00
Wesley Liddick
c02c8646a6
Merge pull request #304 from IanShaw027/feature/codex-tool-correction
...
feat(openai): 添加Codex工具调用自动修正功能
2026-01-16 08:50:11 +08:00
Wesley Liddick
3ff2ca8d41
Merge pull request #303 from IanShaw027/feature/ops-account-health-score
...
feat(ops): 运维监控功能增强与优化
2026-01-16 08:49:52 +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
Wesley Liddick
b36f3db9de
Merge pull request #300 from mt21625457/main
...
feat(网关): 引入 OpenAI/Claude OAuth token 缓存
2026-01-15 20:10:16 +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
yangjianbo
f862ddc9ff
style: 修复 gofmt 格式化问题
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-15 19:42:18 +08:00
程序猿MT
b59032304c
Merge branch 'Wei-Shaw:main' into main
2026-01-15 19:34:11 +08:00
yangjianbo
3ba4d535e3
Merge branch 'dev'
2026-01-15 19:33:32 +08:00
yangjianbo
5b37e9aea4
fix(OAuth缓存): 修复缓存键冲突、401强制刷新及Redis降级处理
...
- Gemini 缓存键统一增加 gemini: 前缀,避免与其他平台命名空间冲突
- OAuth 账号 401 错误时设置 expires_at=now 并持久化,强制下次请求刷新 token
- Redis 锁获取失败时降级为无锁刷新,仅在 token 接近过期时执行,并检查 ctx 取消状态
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-15 19:08:07 +08:00
yangjianbo
1820389a05
feat(网关): 引入 OpenAI/Claude OAuth token 缓存
...
新增 OpenAI/Claude TokenProvider 与缓存键生成
扩展 OAuth 缓存失效覆盖更多平台
统一 OAuth 缓存前缀与依赖注入
2026-01-15 18:27:06 +08:00
yangjianbo
35e3a89385
fix(忽略文件): 添加 .serena 目录到 .gitignore
2026-01-15 16:34:42 +08:00
shaw
5f890e85e7
Merge PR #296 : OAuth token cache invalidation on 401 and refresh
2026-01-15 16:31:37 +08:00
Wesley Liddick
10bc7f7042
Merge pull request #297 from LLLLLLiulei/feat/ip-management-enhancements
...
feat: add proxy geo location
2026-01-15 16:06:36 +08:00
yangjianbo
a65fd9dee8
Merge branch 'test'
2026-01-15 15:58:47 +08:00
yangjianbo
1bb4c76deb
fix(账号管理): 移除调度切换后的冗余列表刷新
...
切换账号调度状态后,updateSchedulableInList 已完成局部更新,
无需再调用 load() 刷新整个列表。此修改减少不必要的 API 请求,
避免 UI 闪烁。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-15 15:57:47 +08:00