yangjianbo
|
e2107ce45e
|
fix(build): Docker 构建注入版本号并同步 aicodex 镜像脚本
|
2026-02-14 21:16:21 +08:00 |
|
yangjianbo
|
5feff6b1e5
|
feat: 0.1.74.9
|
2026-02-14 13:23:26 +08:00 |
|
yangjianbo
|
06b0f62e79
|
feat(accounts): 自动刷新改为ETag增量同步并优化单账号更新体验
- 前端自动刷新改为 ETag/304 增量合并,减少全量重刷
- 单账号更新后增加静默窗口,避免刚更新即被自动刷新覆盖
- 列表筛选移除时改为待同步提示,不再立即触发全量补页
- 后端账号列表支持 If-None-Match,命中返回 304
- 单账号接口统一补充运行时容量字段并暴露 ETag 头
|
2026-02-14 13:22:51 +08:00 |
|
yangjianbo
|
40d110efe4
|
chore(logging): 删除过时的日志审计文档
|
2026-02-14 12:36:42 +08:00 |
|
yangjianbo
|
f23318fbcf
|
fix(frontend): 同步账号本地移除后的分页状态
|
2026-02-14 12:35:35 +08:00 |
|
yangjianbo
|
cbab49d65f
|
feat: 0.1.74.8
|
2026-02-14 12:10:20 +08:00 |
|
yangjianbo
|
b5a3b3db66
|
Merge branch 'test' into release
|
2026-02-14 12:07:19 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
9cafa46dd3
|
fix(accounts): 账号管理改为单行增量更新并避免全量刷新
- 将编辑与重新授权成功事件改为回传更新后的账号对象
- 在账号列表页按 id 就地补丁更新单行数据并保留运行时容量字段
- 单账号操作(刷新凭证/清错/清限流/临时不可调度重置)改为单行更新
- 后端增强 clear-rate-limit 接口,返回更新后的账号对象
- 同步前端 clearRateLimit API 类型定义
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 12:06:17 +08:00 |
|
yangjianbo
|
f6bff97d26
|
fix(frontend): 修复前端审计问题并补充回归测试
|
2026-02-14 11:56:08 +08:00 |
|
yangjianbo
|
d04b47b3ca
|
feat(backend): 提交后端审计修复与配套测试改动
|
2026-02-14 11:23:10 +08:00 |
|
yangjianbo
|
862199143e
|
fix(ops): 修复错误日志查询 q 过滤列名二义性
|
2026-02-14 11:21:30 +08:00 |
|
yangjianbo
|
57e8abcb63
|
fix(openai): 自动透传预检 instructions 并本地 403 拦截
|
2026-02-14 10:49:01 +08:00 |
|
yangjianbo
|
ed31c54961
|
fix(openai): 拒绝日志记录原始 User-Agent 便于攻击研判
|
2026-02-14 09:59:19 +08:00 |
|
yangjianbo
|
4bfa69bffa
|
fix(openai): 仅记录 codex_cli_only 拒绝日志并输出详细 User-Agent
|
2026-02-14 09:53:17 +08:00 |
|
yangjianbo
|
888f2936ad
|
feat: version 0.1.74.7
|
2026-02-13 19:28:12 +08:00 |
|
yangjianbo
|
4e894bac1f
|
Merge branch 'test' into release
|
2026-02-13 19:27:35 +08:00 |
|
yangjianbo
|
f96acf6e27
|
fix(ops): 修复日志级别过滤并增强OpenAI错误诊断日志
- 移除 warn 级别下 access info 的强制入库补写,确保运行时日志级别真实生效
- 将 OpenAI fallback matched 与 passthrough 断流提示按需求降级为 info
- 为 codex_cli_only 与 instructions required 场景补充请求诊断字段(含 User-Agent)
- 出于安全考虑移除请求体预览,仅保留 request_body_size 与白名单头信息
- 新增/更新回归测试,覆盖 Forward 入口到日志落库链路
|
2026-02-13 19:27:07 +08:00 |
|
yangjianbo
|
2459eafb71
|
feat: 完善日志
|
2026-02-13 13:35:47 +08:00 |
|
yangjianbo
|
ed681d0830
|
feat: 整理
|
2026-02-13 12:49:08 +08:00 |
|
yangjianbo
|
3734abed4c
|
feat(openai): 支持 gpt-5.3-codex-spark 并统一 gpt-5.3 到 codex 计费
|
2026-02-13 09:28:07 +08:00 |
|
yangjianbo
|
abf5de69fb
|
Merge branch 'main' into test
|
2026-02-12 23:43:47 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
7582dc53d2
|
fix(openai): 修复关闭 codex_cli_only 无法持久化问题
在编辑 OpenAI OAuth 账号时,若 codex_cli_only 从开启切换为关闭,
现改为显式写入 false,避免 extra 为空时后端忽略更新导致旧值残留。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 23:15:41 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
a9518cc5be
|
feat(openai): 增加 OAuth 账号 Codex 官方客户端限制开关
新增 codex_cli_only 开关并默认关闭,关闭时完全绕过限制逻辑。
在 OpenAI 网关引入统一检测入口,集中判定账号类型、开关与客户端族。
开启后仅放行 codex_cli_rs、codex_vscode、codex_app 客户端家族。
补充后端判定与网关分支测试,并在前端创建/编辑页增加开关配置与回显。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 22:32:59 +08:00 |
|
yangjianbo
|
2f190d812a
|
fix(openai): 透传OAuth强制store/stream并修复Codex识别
|
2026-02-12 21:02:52 +08:00 |
|
yangjianbo
|
d411cf4472
|
fix(openai): 收敛自动透传请求头并增强 OAuth 安全兜底
|
2026-02-12 20:12:15 +08:00 |
|
yangjianbo
|
1ae49b9ead
|
feat: version 0.1.74.5
|
2026-02-12 19:32:13 +08:00 |
|
yangjianbo
|
0bf162f64a
|
Merge branch 'dev' into release
|
2026-02-12 19:23:54 +08:00 |
|
yangjianbo
|
6423636177
|
Merge branch 'test' into dev
|
2026-02-12 19:23:35 +08:00 |
|
yangjianbo
|
b6aaee01ce
|
fix(logging): 修复 warn 级别下系统日志空白问题
- 新增 logger.WriteSinkEvent,支持旁路写入 sink,不受全局级别门控影响\n- 在 http.access 中间件中,当 info 被门控时补写 sink,保障 Ops 系统日志可索引\n- 增加 level=warn 场景回归测试,验证访问日志仍可入库
|
2026-02-12 19:19:11 +08:00 |
|
yangjianbo
|
3511376c2c
|
chore(logging): 默认使用 console 普通日志输出
- 将配置默认 log.format 从 json 调整为 console\n- 将 logger 初始化兜底默认格式调整为 console\n- 同步更新 deploy 配置示例
|
2026-02-12 19:07:16 +08:00 |
|
yangjianbo
|
584cfc3db2
|
chore(logging): 完成后端日志审计与结构化迁移
- 将高密度服务与处理器日志迁移到新日志系统(LegacyPrintf/结构化日志)
- 增加 stdlog bridge 与兼容测试,保留旧日志捕获能力
- 将 OpenAI 断流告警改为结构化 Warn 并改造对应测试为 sink 捕获
- 补齐后端相关文件 logger 引用并通过全量 go test
|
2026-02-12 19:01:09 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
eaa7d899f0
|
fix(ops): 优化系统日志展示为可读文本
解析 extra 字段(status_code/latency_ms/method/path 等)并拼成普通文本\n表格改为 3 列并固定时间/级别宽度,详情列填满后自动换行
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 18:00:16 +08:00 |
|
yangjianbo
|
84cc651b46
|
fix(logger): 修复 caller 字段与 OpsSystemLogSink 停止刷盘
修复点:
- zap logger 不再强制 AddCallerSkip(1),确保 caller 指向真实调用点
- slog handler 避免重复写 time 字段
- OpsSystemLogSink 优先从字段 component 识别业务组件;停止时 drain 队列并用可用 ctx 刷盘
补充:新增/完善对应单测
|
2026-02-12 17:42:29 +08:00 |
|
yangjianbo
|
b7243660c4
|
fix(deploy): 修复 Postgres 数据未持久化导致重启后无法登录
原因:postgres:18-alpine 默认 PGDATA 不在 /var/lib/postgresql/data,数据落到匿名卷,docker compose down/up 会触发 initdb 重新初始化。
修复:在 compose 中显式设置 PGDATA=/var/lib/postgresql/data,让数据落到 postgres_data 命名卷。
|
2026-02-12 17:42:18 +08:00 |
|
yangjianbo
|
e722992439
|
fix(setup): 数据库有用户时跳过管理员引导
|
2026-02-12 16:50:42 +08:00 |
|
yangjianbo
|
fff1d54858
|
feat(log): 落地统一日志底座与系统日志运维能力
|
2026-02-12 16:27:29 +08:00 |
|
yangjianbo
|
a5f29019d9
|
test(ops): 提升日志链路覆盖率并修复lint阻塞
|
2026-02-12 16:25:44 +08:00 |
|
yangjianbo
|
208c5380f4
|
fix(ops): 排除刷新信号避免分页重置页码
|
2026-02-12 15:00:22 +08:00 |
|
yangjianbo
|
29191af877
|
Merge branch 'dev' into release
|
2026-02-12 14:40:37 +08:00 |
|
yangjianbo
|
2d6066f985
|
Merge branch 'test' into dev
|
2026-02-12 14:40:22 +08:00 |
|
yangjianbo
|
3ea5e5c33a
|
feat: update build aicodex.sh
|
2026-02-12 14:40:05 +08:00 |
|
yangjianbo
|
dbd7969a3e
|
Merge branch 'test' into release
|
2026-02-12 14:27:58 +08:00 |
|
yangjianbo
|
af3069073a
|
chore(lint): 修复 golangci-lint unused
- 移除 OpenAIGatewayHandler 未使用字段
- 删除并发缓存中未使用的 Redis 脚本常量
- 将仅供 unit 测试使用的 parseIntegralNumber 移入 unit build tag 文件
|
2026-02-12 14:20:56 +08:00 |
|
yangjianbo
|
65661f24e2
|
feat(ops): 运维监控新增 OpenAI Token 请求统计表
- 新增管理端接口 /api/v1/admin/ops/dashboard/openai-token-stats,按模型聚合统计 gpt% 请求
- 支持 time_range=30m|1h|1d|15d|30d(默认 30d),支持 platform/group_id 过滤
- 支持分页(page/page_size)或 TopN(top_n)互斥查询
- 前端运维监控页新增统计表卡片,包含空态/错误态与分页/TopN 交互
- 补齐后端与前端测试
|
2026-02-12 14:20:14 +08:00 |
|
yangjianbo
|
ed2eba9028
|
fix(gateway): 默认过滤OpenAI透传超时头并补充断流告警
|
2026-02-12 14:16:18 +08:00 |
|
yangjianbo
|
10c1590b1d
|
Merge branch 'dev' into release
|
2026-02-12 12:12:40 +08:00 |
|
yangjianbo
|
114e172603
|
test(repository): 补充 JWT 密钥引导并发与兼容性单测
|
2026-02-12 12:07:20 +08:00 |
|
yangjianbo
|
09c8380b3d
|
fix(repository): 修复 JWT 密钥引导冲突一致性与并发读取竞态
|
2026-02-12 12:04:13 +08:00 |
|
yangjianbo
|
ba567babf4
|
:erge branch 'dev' into release
|
2026-02-12 11:45:11 +08:00 |
|
yangjianbo
|
9403aa9bd1
|
feat: version 0.1.74.4
|
2026-02-12 11:44:45 +08:00 |
|
yangjianbo
|
34b8bbcbe4
|
Merge branch 'dev' into release
|
2026-02-12 11:43:47 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
6b36992d34
|
feat(security): 启动时自动迁移并持久化JWT密钥
- 新增 security_secrets 表及 Ent schema 用于存储系统级密钥
- 启动阶段支持无 jwt.secret 配置并在数据库中自动生成持久化
- 在 Ent 初始化后补齐密钥并执行完整配置校验
- 增加并发与异常分支单元测试,覆盖密钥引导核心路径
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 11:41:20 +08:00 |
|
yangjianbo
|
6533a4647d
|
fix(openai): 增强自动透传命中日志
|
2026-02-12 11:41:06 +08:00 |
|
yangjianbo
|
9c910c2049
|
feat(openai): 支持自动透传开关并透传 User-Agent
- OpenAI OAuth/API Key 统一支持自动透传开关,编辑页可开关\n- 透传模式仅替换认证并保留计费/并发/审计,修复 API Key responses 端点拼接\n- Usage 页面显示原始 User-Agent 且不截断,补充回归测试与清单
|
2026-02-12 10:56:07 +08:00 |
|
yangjianbo
|
43dc23a47d
|
Merge branch 'test' into release
|
2026-02-12 09:49:05 +08:00 |
|
yangjianbo
|
61a2bf469a
|
feat(openai): 极致优化 OAuth 链路并补齐性能守护
- 优化 /v1/responses 热路径,减少重复解析与不必要拷贝\n- 优化并发与 token 竞争路径并补齐运行指标\n- 补充 OpenAI/Ops 相关单元测试与回归用例\n- 新增灰度阈值守护与压测脚本,支撑发布验收
|
2026-02-12 09:41:37 +08:00 |
|
yangjianbo
|
a88bb8684f
|
fix(openai): 修复 OAuth 透传流式断开与压缩头问题
- 透传流式在客户端断开后继续 drain 上游并解析 usage,避免计费信息丢失
- 阻断透传 accept-encoding,避免压缩响应影响 SSE/usage 解析
- 阻断 proxy-authorization,避免透传代理鉴权信息
- 补充回归测试:请求头阻断与断流后 usage 采集
|
2026-02-11 22:17:38 +08:00 |
|
yangjianbo
|
e2cdb6c758
|
feat: 优化build image
|
2026-02-11 18:07:50 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
f1e884ce2b
|
feat(openai): 增加 OAuth 透传开关
- 仅对 Codex CLI 且账号开启时走原样透传(只替换认证)
- 透传模式禁用工具修正/模型替换,并旁路解析 usage 用于计费
- 管理后台增加开关与文案,ops upstream error 记录 passthrough 标记
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-11 00:59:39 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
86f3124720
|
perf(service): 优化重试场景 thinking 过滤性能
- 避免全量 Unmarshal 请求体,改为仅解析 messages 子树
- 顶层 thinking 使用 sjson 直接删除,减少整体重写
- content 仅在需要修改时延迟分配 new slice
- 增加 FilterThinkingBlocksForRetry 基准测试
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-11 00:47:26 +08:00 |
|
yangjianbo
|
4b309fa8b5
|
fix(gateway): 优化 ParseGatewayRequest 函数,使用 unsafe 提高性能并增加 JSON 校验
|
2026-02-10 22:12:24 +08:00 |
|
yangjianbo
|
166080b29c
|
chore: 更新版本号至 0.1.74.3
|
2026-02-10 18:02:02 +08:00 |
|
yangjianbo
|
3b0910f664
|
Merge branch 'main' into test-sora
|
2026-02-10 18:01:17 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
e489996713
|
test(backend): 补充改动代码单元测试覆盖率至 85%+
新增 48 个测试用例覆盖修复代码的各分支路径:
- subscription_maintenance_queue: nil receiver/task、Stop 幂等、零值参数 (+6)
- billing_service: CalculateCostWithConfig、错误传播、SoraImageCost 等 (+12)
- timing_wheel_service: Schedule/ScheduleRecurring after Stop (+3)
- sora_media_cleanup_service: nil guard、Start/Stop 各分支、timezone (+10)
- sora_gateway_service: normalizeSoraMediaURLs、buildSoraContent 等辅助函数 (+17)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-10 17:52:10 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
54fe363257
|
fix(backend): 修复代码审核发现的 8 个确认问题
- P0-1: subscription_maintenance_queue 使用 RWMutex 防止 channel close/send 竞态
- P0-2: billing_service CalculateCostWithLongContext 修复被吞没的 out-range 错误
- P1-1: timing_wheel_service Schedule/ScheduleRecurring 添加 SetTimer 错误日志
- P1-2: sora_gateway_service StoreFromURLs 失败时降级使用原始 URL
- P1-3: concurrency_cache 用 Pipeline 替代 Lua 脚本兼容 Redis Cluster
- P1-6: sora_media_cleanup_service runCleanup 添加 nil cfg/storage 防护
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-10 17:51:49 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
5d1c51a37f
|
fix(handler): 修复 gjson 迁移后的请求校验语义回退
- OpenAI handler: 添加 gjson.ValidBytes 校验 JSON 合法性;model 校验改为
检查 gjson.String 类型而非仅判断非空(拒绝 model:123 等非法类型);stream
字段添加 True/False 类型检查;sjson.SetBytes 返回值显式处理错误
- Sora handler: 添加 gjson.ValidBytes 校验;model 校验同上改为类型检查;
messages 校验从 Exists+Type==JSON 改为 IsArray+len>0(拒绝空数组和对象)
- 补充 TestOpenAIHandler_GjsonValidation 和更新 TestSoraHandler_ValidationExtraction
覆盖新增的边界校验场景
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-10 09:13:20 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
58912d4ac5
|
perf(backend): 使用 gjson/sjson 优化热路径 JSON 处理
将 API 网关热路径中的 json.Unmarshal+json.Marshal 替换为 gjson 零拷贝查询和 sjson 精准写入:
- unwrapV1InternalResponse 性能提升 22x(4009ns→182ns),内存分配减少 28.5x
- unwrapGeminiResponse、extractGeminiUsage、estimateGeminiCountTokens、ParseGeminiRateLimitResetTime 改为接收 []byte 使用 gjson 提取
- ParseGatewayRequest 的 model/stream/metadata/thinking/max_tokens 改用 gjson 类型安全提取
- Handler 层(sora/openai)改用 gjson 提取字段、sjson 注入/修改字段,移除 map[string]any 中间变量
- Sora Client 响应解析改用 gjson ForEach 遍历,减少内存分配
- 新增约 100 个单元测试用例,所有改动函数覆盖率 >85%
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-10 08:59:30 +08:00 |
|
yangjianbo
|
29ca1290b3
|
chore(test): 清理测试用例与类型导入
|
2026-02-10 00:37:56 +08:00 |
|
yangjianbo
|
3fcb0cc37c
|
feat(subscription): 有界队列执行维护并改进鉴权解析
|
2026-02-10 00:37:47 +08:00 |
|
yangjianbo
|
2bfb16291f
|
fix(unit): 修复 unit tag 测试编译与账号选择用例
|
2026-02-09 21:35:41 +08:00 |
|
yangjianbo
|
d367d1cde6
|
Merge branch 'main' into test-sora
|
2026-02-09 20:40:09 +08:00 |
|
yangjianbo
|
3c46f7d266
|
fix: update .gitignore to include frontend coverage directory
|
2026-02-09 20:26:46 +08:00 |
|
yangjianbo
|
16131c3d3f
|
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
|
2026-02-09 20:26:03 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
d7011163b8
|
fix: 修复代码审核发现的安全和质量问题
安全修复(P0):
- 移除硬编码的 OAuth client_secret(Antigravity、Gemini CLI),
改为通过环境变量注入(ANTIGRAVITY_OAUTH_CLIENT_SECRET、
GEMINI_CLI_OAUTH_CLIENT_SECRET)
- 新增 logredact.RedactText() 对非结构化文本做敏感信息脱敏,
覆盖 GOCSPX-*/AIza* 令牌和常见 key=value 模式
- 日志中不再打印 org_uuid、account_uuid、email_address 等敏感值
安全修复(P1):
- URL 验证增强:新增 ValidateHTTPURL 统一入口,支持 allowlist 和
私网地址阻断(localhost/内网 IP)
- 代理回退安全:代理初始化失败时默认阻止直连回退,防止 IP 泄露,
可通过 security.proxy_fallback.allow_direct_on_error 显式开启
- Gemini OAuth 配置校验:client_id 与 client_secret 必须同时
设置或同时留空
其他改进:
- 新增 tools/secret_scan.py 密钥扫描工具和 Makefile secret-scan 目标
- 更新所有 docker-compose 和部署配置,传递 OAuth secret 环境变量
- google_one OAuth 类型使用固定 redirectURI,与 code_assist 对齐
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-09 09:58:13 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
fc8a39e0f5
|
test: 删除CI工作流,大幅提升后端单元测试覆盖率至50%+
删除因GitHub计费锁定而失败的CI工作流。
为6个核心Go源文件补充单元测试,全部达到50%以上覆盖率:
- response/response.go: 97.6%
- antigravity/oauth.go: 90.1%
- antigravity/client.go: 88.6% (新增27个HTTP客户端测试)
- geminicli/oauth.go: 91.8%
- service/oauth_service.go: 61.2%
- service/gemini_oauth_service.go: 51.9%
新增/增强8个测试文件,共计5600+行测试代码。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-09 09:07:58 +08:00 |
|
yangjianbo
|
9da80e9fda
|
feat: update
|
2026-02-08 12:13:29 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
bb5a5dd65e
|
test: 完善自动化测试体系(7个模块,73个任务)
系统性地修复、补充和强化项目的自动化测试能力:
1. 测试基础设施修复
- 修复 stubConcurrencyCache 缺失方法和构造函数参数不匹配
- 创建 testutil 共享包(stubs.go, fixtures.go, httptest.go)
- 为所有 Stub 添加编译期接口断言
2. 中间件测试补充
- 新增 JWT 认证中间件测试(有效/过期/篡改/缺失 Token)
- 补充 rate_limiter 和 recovery 中间件测试场景
3. 网关核心路径测试
- 新增账户选择、等待队列、流式响应、并发控制、计费、Claude Code 检测测试
- 覆盖负载均衡、粘性会话、SSE 转发、槽位管理等关键逻辑
4. 前端测试体系(11个新测试文件,163个测试用例)
- Pinia stores: auth, app, subscriptions
- API client: 请求拦截器、响应拦截器、401 刷新
- Router guards: 认证重定向、管理员权限、简易模式限制
- Composables: useForm, useTableLoader, useClipboard
- Components: LoginForm, ApiKeyCreate, Dashboard
5. CI/CD 流水线重构
- 重构 backend-ci.yml 为统一的 ci.yml
- 前后端 4 个并行 Job + Postgres/Redis services
- Race 检测、覆盖率收集与门禁、Docker 构建验证
6. E2E 自动化测试
- e2e-test.sh 自动化脚本(Docker 启动→健康检查→测试→清理)
- 用户注册→登录→API Key→网关调用完整链路测试
- Mock 模式和 API Key 脱敏支持
7. 修复预存问题
- tlsfingerprint dialer_test.go 缺失 build tag 导致集成测试编译冲突
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-08 12:05:39 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
53e1c8b268
|
perf(日志): 降噪优化,将常规成功日志降级为 Debug 级别
- GIN Logger 中间件跳过 /health 和 /setup/status 的请求日志
- UsageCleanup 空闲轮询(no_task)日志降级为 slog.Debug
- Scheduler 常规 rebuild ok 日志降级为 slog.Debug
- DashboardAggregation 常规聚合完成日志降级为 slog.Debug
- TokenRefresh 无刷新活动时周期日志降级为 slog.Debug
生产环境(Info 级别)下自动静默,debug 模式下仍可见。
错误、警告类日志保持原有级别不变。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 23:29:24 +08:00 |
|
yangjianbo
|
d876686a00
|
feat: update skills
|
2026-02-07 22:25:57 +08:00 |
|
yangjianbo
|
7546a56736
|
feat: update skills
|
2026-02-07 22:21:39 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
00caf0bcd8
|
test: 为代码审核修复添加详细单元测试(7个测试文件,50+测试用例)
新增测试文件:
- cors_test.go: CORS 条件化头部测试(12个测试,覆盖白名单/黑名单/通配符/凭证/多源/Vary)
- gateway_helper_backoff_test.go: nextBackoff 退避测试(6个测试+基准,验证指数增长/边界/抖动/收敛)
- billing_cache_jitter_test.go: jitteredTTL 抖动测试(5个测试+基准,验证范围/上界/方差/均值)
- subscription_calculate_progress_test.go: calculateProgress 纯函数测试(9个测试,覆盖日/周/月限额/超限截断/过期)
- openai_gateway_handler_test.go: SSE JSON 转义测试(7个子用例,验证双引号/反斜杠/换行符安全)
更新测试文件:
- response_transformer_test.go: 增强 generateRandomID 测试(7个测试,含并发/字符集/降级计数器)
- security_headers_test.go: 适配 GenerateNonce 新签名
- api_key_auth_test.go: 适配 NewSubscriptionService 新参数
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 22:14:07 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
9634494ba9
|
fix: 修复代码审核发现的10个问题(P0安全+P1数据一致性+P2性能优化)
P0: OpenAI SSE 错误消息 JSON 注入 — 使用 json.Marshal 替代 fmt.Sprintf
P1: subscription 续期包裹 Ent 事务确保原子性
P1: CSP nonce 生成处理 crypto/rand 错误,失败降级为 unsafe-inline
P1: singleflight 透传数据库真实错误,不再吞没为 not found
P1: GetUserSubscriptionsWithProgress 提取 calculateProgress 消除 N+1
P2: billing_cache/gateway_helper 迁移到 math/rand/v2 消除全局锁争用
P2: generateRandomID 降级分支增加原子计数器防碰撞
P2: CORS 非白名单 origin 不再设置 Allow-Headers/Methods/Max-Age
P2: Turnstile 验证移除 VerifyCode 空值跳过条件防绕过
P2: Redis Cluster Lua 脚本空 KEYS 添加兼容性警告注释
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 22:13:45 +08:00 |
|
yangjianbo
|
e1ac0db05c
|
feat: 优化skills
|
2026-02-07 21:57:29 +08:00 |
|
yangjianbo
|
6f3e77a2df
|
feat: update skills
|
2026-02-07 21:32:42 +08:00 |
|
yangjianbo
|
4a20a2a8ba
|
fix: 修复批量更新凭证明细与缓存TTL抖动
- BatchUpdateCredentials 返回 success/failed/results 及 success_ids/failed_ids
- billing jitteredTTL 改为只减不增,确保TTL不超上界
- crypto/rand 失败时随机ID降级避免 panic
- OpenAI SelectAccount 失败日志去重并补充字段
- 修复两处类型断言以通过 errcheck
|
2026-02-07 21:18:03 +08:00 |
|
yangjianbo
|
bc3ca5f068
|
chore: 更新版本号至 0.1.74.1
|
2026-02-07 20:39:06 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
fd43be8d0b
|
merge: 合并 main 分支到 test,解决 config 和 modelWhitelist 冲突
- config.go: 保留 Sora 配置,合入 SubscriptionCache 配置
- useModelWhitelist.ts: 同时保留 soraModels 和 antigravityModels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 20:18:07 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
836ba14b70
|
fix: 修复函数签名变更后的调用参数不匹配
- handleUpstreamError 补齐新增的三个参数 (0, "", false)
- handleStreamingResponse 移除已删除的 nil 参数
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 20:05:29 +08:00 |
|
yangjianbo
|
a14dfb769a
|
Merge branch 'dev-release'
|
2026-02-07 19:58:00 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
2588fa6a8f
|
fix(audit): 第二批审计修复 — P0 生产 Bug、安全加固、性能优化、缓存一致性、代码质量
基于 backend-code-audit 审计报告,修复剩余 P0/P1/P2 共 34 项问题:
P0 生产 Bug:
- 修复 time.Since(time.Now()) 计时逻辑错误 (P0-03)
- generateRandomID 改用 crypto/rand 替代固定索引 (P0-04)
- IncrementQuotaUsed 重写为 Ent 原子操作消除 TOCTOU 竞态 (P0-05)
安全加固:
- gateway/openai handler 错误响应替换为泛化消息,防止内部信息泄露 (P1-14)
- usage_log_repo dateFormat 参数改用白名单映射,防止 SQL 注入 (P1-16)
- 默认配置安全加固:sslmode=prefer、response_headers=true、mode=release (P1-18/19, P2-15)
性能优化:
- gateway handler 循环内 defer 替换为显式 releaseWait 闭包 (P1-02)
- group_repo/promo_code_repo Count 前 Clone 查询避免状态污染 (P1-03)
- usage_log_repo 四个查询添加 LIMIT 10000 防止 OOM (P1-07)
- GetBatchUsageStats 添加时间范围参数,默认最近 30 天 (P1-10)
- ip.go CIDR 预编译为包级变量 (P1-11)
- BatchUpdateCredentials 重构为先验证后更新 (P1-13)
缓存一致性:
- billing_cache 添加 jitteredTTL 防止缓存雪崩 (P2-10)
- DeductUserBalance/UpdateSubscriptionUsage 错误传播修复 (P2-12)
- UserService.UpdateBalance 成功后异步失效 billingCache (P2-13)
代码质量:
- search 截断改为按 rune 处理,支持多字节字符 (P2-01)
- TLS Handshake 改为 HandshakeContext 支持 context 取消 (P2-07)
- CORS 预检添加 Access-Control-Max-Age: 86400 (P2-16)
测试覆盖:
- 新增 user_service_test.go(UpdateBalance 缓存失效 6 个用例)
- 新增 batch_update_credentials_test.go(fail-fast + 类型验证 7 个用例)
- 新增 response_transformer_test.go、ip_test.go、usage_log_repo_unit_test.go、search_truncate_test.go
- 集成测试:IncrementQuotaUsed 并发测试、billing_cache 错误传播测试
- config_test.go 补充 server.mode/sslmode 默认值断言
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 19:46:42 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
f6ca701917
|
fix(oauth): SessionStore.Stop() 添加 sync.Once 防重入保护 (P1-05)
oauth 和 openai 包的 SessionStore.Stop() 直接调用 close(stopCh),
重复调用会导致 panic。使用 sync.Once 包裹确保幂等安全。
新增单元测试覆盖连续调用和 50 goroutine 并发调用场景。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 17:39:18 +08:00 |
|
yangjianbo
|
a84604dceb
|
fix(config): 禁止 server.frontend_url 携带 query/userinfo
|
2026-02-07 17:37:08 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
e75d3e3584
|
fix(security): 修复密码重置链接 Host Header 注入漏洞 (P0-07)
ForgotPassword 原来从 c.Request.Host 构建重置链接基础 URL,攻击者
可伪造 Host 头将重置链接指向恶意域名窃取 token。
修复方案:
- ServerConfig 新增 frontend_url 配置项
- auth_handler 改为从配置读取前端 URL,未配置时拒绝请求
- Validate() 校验 frontend_url 必须为绝对 HTTP(S) URL
- 新增 TestValidateServerFrontendURL 单元测试
- config.example.yaml 添加配置说明
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 17:15:26 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
8226a4ce4d
|
perf(service): 优化 model 替换函数,用 gjson/sjson 替代全量 JSON 序列化
SSE 热路径中 replaceModelInSSELine 和 replaceModelInResponseBody 原来
使用 json.Unmarshal/Marshal 对每个事件做全量反序列化再序列化,现改为
gjson.Get/sjson.Set 精确字段操作,消除 O(n) 中间 map 分配,保持 JSON
字段顺序不变。涉及 OpenAIGatewayService 和 GatewayService 两个服务。
新增 23 个单元测试覆盖:顶层/嵌套 model 替换、不匹配跳过、空行/[DONE]/
非法 JSON 等边界情况。
Fixes: P1-08
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 17:09:55 +08:00 |
|
yangjianbo
|
65c0d8b51f
|
fix(middleware): 管理员JWT增加TokenVersion校验
管理员改密后旧JWT会被拒绝,并补充单元测试覆盖。
|
2026-02-07 16:34:57 +08:00 |
|
yangjianbo
|
a9e256ce8c
|
fix(openai): 修复 usage 为空导致 panic(P0-02)
|
2026-02-07 16:15:30 +08:00 |
|
yangjianbo
|
7e1674e43a
|
chore(version): 更新版本号至 0.1.70.2
|
2026-02-07 14:58:52 +08:00 |
|
yangjianbo
|
fc104dfb56
|
feat:增加端口
|
2026-02-07 14:57:50 +08:00 |
|
 yangjianboandClaude Opus 4.6
|
0e514ed80b
|
perf(middleware): 优化订阅模式认证中间件,5次串行调用降至2步同步+1步异步
- 为 GetActiveSubscription 添加 ristretto L1 缓存 + singleflight 防击穿
- 合并 ValidateSubscription + CheckUsageLimits 为纯内存 ValidateAndCheckLimits
- 窗口维护操作(激活/重置)异步化,不再阻塞首字节
- 缓存返回浅拷贝,避免并发 data race 和缓存污染
- 所有管理操作(分配/续期/撤销/扩展/窗口重置)同步失效 L1 缓存
- 新增 SubscriptionCacheConfig 可配置 L1 缓存大小/TTL/抖动
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-07 14:43:12 +08:00 |
|
yangjianbo
|
782a54a8a1
|
chore(version): 更新版本号至 0.1.70.1
|
2026-02-07 11:17:46 +08:00 |
|