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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo and Claude 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
yangjianbo
4e01126ff2
test(codex): 清理无用的 opencode 缓存测试
...
移除不再需要的 setupCodexCache 调用与辅助函数(已不再回源/读写缓存)
2026-02-07 09:53:01 +08:00
yangjianbo
55b56328da
feat(codex): 移除 opencode 指令回源与缓存
...
- 不再从 GitHub 拉取 opencode codex_header.txt\n- 删除 ~/.opencode 缓存与异步刷新逻辑\n- 所有 instructions 统一使用内置 codex_cli_instructions.md
2026-02-07 09:28:32 +08:00
yangjianbo
ce764bf2d9
feat(gateway): 支持强制 Codex CLI 模式并伪装 UA
...
- Codex CLI 请求仅使用内置 instructions,不再读取 opencode 缓存/回源\n- 新增 gateway.force_codex_cli(环境变量 GATEWAY_FORCE_CODEX_CLI)\n- ForceCodexCLI=true 时转发上游强制 User-Agent=codex_cli_rs/0.0.0\n- 更新 deploy 示例配置
2026-02-07 09:21:15 +08:00
yangjianbo and Claude Opus 4.6
d71537d431
perf(service): SSE Scanner buffer 改用 sync.Pool 复用,减少高并发 GC 压力
...
将流式响应中 bufio.Scanner 的 64KB buffer 从每次 make 分配改为
sync.Pool 复用,统一切片表达式为 [:0]、变量命名为 scanBuf,
并补充对应的单元测试。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-06 22:55:12 +08:00
yangjianbo
ae1ba45350
perf(service): jitterTTL 改用 rand/v2 并移除锁
2026-02-06 21:22:38 +08:00
yangjianbo
c4182f8c33
perf(service): 移除 jitter 随机数全局锁
2026-02-06 21:20:25 +08:00
yangjianbo
028f8aaa97
feat: 优化.env参数
2026-02-06 21:01:30 +08:00
yangjianbo
d3f11fdbd3
chore(deploy): aicodex 默认 max_conns_per_host=8192
2026-02-06 20:50:44 +08:00
yangjianbo
8672b2f3ec
chore(gateway): 提升 max_idle_conns 并补齐 env
2026-02-06 20:48:48 +08:00
yangjianbo
de753a149e
chore(deploy): 补齐连接池默认与 8G 参数
2026-02-06 20:44:08 +08:00
yangjianbo
2d4bbbf49d
feat: 优化codex冷启动, 还有连接池数据库配置信息
2026-02-06 20:31:42 +08:00
yangjianbo
792bef615c
Merge branch 'main' into test
2026-02-06 09:59:15 +08:00
yangjianbo
ee01f80dc1
test(backend): 修复 usage 类型断言未检查
2026-02-06 09:54:29 +08:00
yangjianbo
98671a73f4
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
...
# Conflicts:
# backend/internal/service/gateway_cached_tokens_test.go
2026-02-06 09:35:46 +08:00
yangjianbo and Claude Opus 4.6
f33a950103
fix(兼容): 将 Kimi cached_tokens 映射到 Claude 标准 cache_read_input_tokens
...
Kimi 等 Claude 兼容 API 返回缓存信息使用 OpenAI 风格的 cached_tokens 字段,
而非 Claude 标准的 cache_read_input_tokens,导致客户端收不到缓存命中信息且
内部计费缓存折扣为 0。
新增 reconcileCachedTokens 辅助函数,在 cache_read_input_tokens == 0 且
cached_tokens > 0 时自动填充,覆盖流式(message_start/message_delta)和
非流式两种响应路径。对 Claude 原生上游无影响。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-06 09:27:42 +08:00
yangjianbo
000a943cce
Merge branch 'main' into test
2026-02-06 08:43:42 +08:00
yangjianbo and Claude Opus 4.6
c6a456c7c7
fix(兼容): 将 Kimi cached_tokens 映射到 Claude 标准 cache_read_input_tokens
...
Kimi 等 Claude 兼容 API 返回缓存信息使用 OpenAI 风格的 cached_tokens 字段,
而非 Claude 标准的 cache_read_input_tokens,导致客户端收不到缓存命中信息且
内部计费缓存折扣为 0。
新增 reconcileCachedTokens 辅助函数,在 cache_read_input_tokens == 0 且
cached_tokens > 0 时自动填充,覆盖流式(message_start/message_delta)和
非流式两种响应路径。对 Claude 原生上游无影响。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-06 08:42:55 +08:00
yangjianbo
f82e346f02
Merge branch 'main' into test
2026-02-06 08:12:40 +08:00
yangjianbo
a113dd4def
feat: vesion -> 0.1.70
2026-02-06 07:55:30 +08:00
yangjianbo
98f793155f
build(工具链): 升级 Go 到 1.25.7
2026-02-06 07:41:23 +08:00
yangjianbo
a38bd413ab
fix(计费): gpt-5.3-codex 定价回退到 gpt-5.2-codex
2026-02-06 07:40:38 +08:00
yangjianbo
9e1535e203
feat(模型): 添加 gpt-5.3 Codex 映射与价格配置
2026-02-06 07:14:46 +08:00
yangjianbo
d8e405511e
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
2026-02-06 06:56:23 +08:00
yangjianbo
74d35f0860
chore(ent): 重新生成代码
2026-02-04 20:41:26 +08:00