song
|
2220fd18ca
|
merge upstream main
|
2026-02-03 15:36:17 +08:00 |
|
Wesley Liddick
|
a09478f374
|
Merge pull request #316 from cyhhao/fix/claude-oauth-compat
fix(网关): 完善 Claude OAuth/Claude Code 兼容
|
2026-02-03 14:26:19 +08:00 |
|
song
|
3ecadf4aad
|
chore: apply stashed changes
|
2026-02-02 22:20:08 +08:00 |
|
song
|
0170d19fa7
|
merge upstream main
|
2026-02-02 22:13:50 +08:00 |
|
liuxiongfeng
|
45e1429ae8
|
feat(billing): 添加 Gemini 200K 长上下文双倍计费功能
- 新增 CalculateCostWithLongContext 方法支持阈值双倍计费
- 新增 RecordUsageWithLongContext 方法专用于 Gemini 计费
- Gemini 超过 200K token 的部分按 2 倍费率计算
- 其他平台(Claude/OpenAI)完全不受影响
|
2026-02-02 21:47:02 +08:00 |
|
liuxiongfeng
|
bbc7b4aeed
|
feat(gateway): Gemini API Key 账户跳过模型映射检查,直接透传
Gemini API Key 账户通常代理上游服务,模型支持由上游判断,
本地不需要预先配置模型映射。
|
2026-02-02 13:40:29 +08:00 |
|
cyhhao
|
adb77af1d9
|
fix: satisfy golangci-lint (nil checks, remove unused helpers)
|
2026-01-31 02:07:57 +08:00 |
|
cyhhao
|
3a34746668
|
refactor: stop rewriting tool descriptions; keep only system sentence rewrite
|
2026-01-31 02:01:51 +08:00 |
|
cyhhao
|
fe17058700
|
refactor: limit OpenCode keyword replacement to tool descriptions
|
2026-01-31 01:40:38 +08:00 |
|
cyhhao
|
fa454b1b99
|
fix: align Claude Code system banner with opencode latest
|
2026-01-29 15:37:07 +08:00 |
|
cyhhao
|
8375094c69
|
fix(oauth): match Claude CLI accept header and beta set
|
2026-01-29 15:31:29 +08:00 |
|
cyhhao
|
91079d3f15
|
chore(debug): emit Claude mimic fingerprint on credential-scope error
|
2026-01-29 15:17:46 +08:00 |
|
cyhhao
|
63412a9fcc
|
chore(debug): log Claude mimic fingerprint
|
2026-01-29 03:13:14 +08:00 |
|
cyhhao
|
d98648f03b
|
fix: rewrite OpenCode identity sentence to Claude Code
|
2026-01-29 03:03:40 +08:00 |
|
cyhhao
|
4d40fb6b60
|
fix(oauth): merge anthropic-beta and force Claude Code headers in mimic mode
|
2026-01-29 02:36:28 +08:00 |
|
cyhhao
|
be3b788b8f
|
fix: also prefix next system block with Claude Code banner
|
2026-01-29 02:03:54 +08:00 |
|
cyhhao
|
723e54013a
|
fix(oauth): mimic Claude Code metadata and beta headers
|
2026-01-29 01:49:51 +08:00 |
|
cyhhao
|
4d566f68b6
|
chore: gofmt
|
2026-01-29 01:34:58 +08:00 |
|
cyhhao
|
31f817d189
|
fix: add newline separation for Claude Code system prompt
|
2026-01-29 01:28:43 +08:00 |
|
cyhhao
|
59231668c5
|
Merge branch 'main' of github.com:Wei-Shaw/sub2api
|
2026-01-29 01:16:36 +08:00 |
|
shaw
|
cadca752c4
|
修复SSE流式响应中usage数据被覆盖的问题
|
2026-01-28 18:36:21 +08:00 |
|
cyhhao
|
ffe43f6098
|
Merge branch 'main' of github.com:Wei-Shaw/sub2api
|
2026-01-27 11:09:11 +08:00 |
|
shaw
|
56a1e29cdd
|
fix(gateway): 修复 SSE 流式响应 usage 统计错误
message_delta 应完全覆盖 message_start 的 usage 数据,
而非仅在值为 0 时才更新。
|
2026-01-27 09:16:34 +08:00 |
|
cyhhao
|
a161fcc89b
|
Merge branch 'main' of github.com:Wei-Shaw/sub2api
|
2026-01-26 10:44:38 +08:00 |
|
ianshaw
|
839975b0cf
|
feat(gemini): 支持 Gemini CLI 粘性会话与跨账号 thoughtSignature 清理
## 问题背景
1. Gemini CLI 没有明确的会话标识(如 Claude Code 的 metadata.user_id)
2. thoughtSignature 与具体上游账号强绑定,跨账号使用会导致 400 错误
3. 粘性会话切换账号或 cache 丢失时,旧签名会导致请求失败
## 解决方案
### 1. Gemini CLI 会话标识提取
- 从 `x-gemini-api-privileged-user-id` header 和请求体中的 tmp 目录哈希生成会话标识
- 组合策略:SHA256(privileged-user-id + ":" + tmp_dir_hash)
- 正则提取:`/\.gemini/tmp/([A-Fa-f0-9]{64})`
### 2. 跨账号 thoughtSignature 清理
实现三种场景的智能清理:
1. **Cache 命中 + 账号切换**
- 粘性会话绑定的账号与当前选择的账号不同时清理
2. **同一请求内 failover 切换**
- 通过 sessionBoundAccountID 跟踪,检测重试时的账号切换
3. **Gemini CLI + Cache 未命中 + 含签名**
- 预防性清理,避免 cache 丢失后首次转发就 400
- 仅对 Gemini CLI 请求且请求体包含 thoughtSignature 时触发
## 修改内容
### backend/internal/handler/gemini_v1beta_handler.go
- 添加 `extractGeminiCLISessionHash` 函数提取 Gemini CLI 会话标识
- 添加 `isGeminiCLIRequest` 函数识别 Gemini CLI 请求
- 实现账号切换检测与 thoughtSignature 清理逻辑
- 添加 `geminiCLITmpDirRegex` 正则表达式
### backend/internal/service/gateway_service.go
- 添加 `GetCachedSessionAccountID` 方法查询粘性会话绑定的账号 ID
### backend/internal/service/gemini_native_signature_cleaner.go (新增)
- 实现 `CleanGeminiNativeThoughtSignatures` 函数
- 递归清理 JSON 中的所有 thoughtSignature 字段
- 支持任意 JSON 顶层类型(object/array)
### backend/internal/handler/gemini_cli_session_test.go (新增)
- 测试 Gemini CLI 会话哈希提取逻辑
- 测试 tmp 目录正则匹配
- 覆盖有/无 privileged-user-id 的场景
## 影响范围
- 修复 Gemini CLI 多轮对话时账号切换导致的 400 错误
- 提高粘性会话的稳定性和容错能力
- 不影响其他客户端(Claude Code 等)的会话标识生成
## 测试
- 单元测试:go test -tags=unit ./internal/handler -run TestExtractGeminiCLISessionHash
- 单元测试:go test -tags=unit ./internal/handler -run TestGeminiCLITmpDirRegex
- 编译验证:go build ./cmd/server
|
2026-01-26 04:40:38 +08:00 |
|
song
|
fd0370c07a
|
Add invalid-request fallback routing
|
2026-01-23 22:24:46 +08:00 |
|
cyhhao
|
65e69738cc
|
Merge branch 'main' of github.com:Wei-Shaw/sub2api
|
2026-01-20 22:46:23 +08:00 |
|
yangjianbo
|
292f25f9ca
|
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
|
2026-01-20 14:02:08 +08:00 |
|
cyhhao
|
c8e2f614fa
|
Merge branch 'main' of github.com:Wei-Shaw/sub2api
|
2026-01-20 13:53:32 +08:00 |
|
yangjianbo
|
f6ed3d1456
|
Merge branch 'test' into dev
|
2026-01-20 11:59:13 +08:00 |
|
yangjianbo
|
91f01309da
|
fix(调度): 完善粘性会话清理与账号调度刷新
- Update/BulkUpdate 按不可调度字段触发缓存刷新
- GatewayCache 支持多前缀会话键清理
- 模型路由与混合调度优化粘性会话处理
- 补充调度与缓存相关测试覆盖
|
2026-01-20 11:40:55 +08:00 |
|
cyhhao
|
2f2e76f9c6
|
fix(gateway): gate streaming tool rewrites behind mimic
|
2026-01-19 16:20:24 +08:00 |
|
cyhhao
|
bba5b3c037
|
fix(网关): OAuth 请求统一 user_id 与指纹
|
2026-01-19 15:01:32 +08:00 |
|
shaw
|
ccfeaeb22d
|
feat: 新增会话ID伪装功能,优化日志系统
- 新增 session_id_masking_enabled 配置,启用后将在15分钟内固定
metadata.user_id 中的 session ID
- TLS fingerprint 模块日志从自定义 debugLog 迁移到 slog
- main.go 添加 slog 初始化,根据 gin mode 设置日志级别
- 前端创建/编辑账号模态框添加会话ID伪装开关
- 多语言支持(中英文)
|
2026-01-19 10:22:13 +08:00 |
|
Wesley Liddick
|
03c7578713
|
Merge pull request #325 from slovx2/main
fix(antigravity): 修复Antigravity 频繁429的问题,以及一系列优化,配置增强
|
2026-01-19 09:17:15 +08:00 |
|
shaw
|
de6797c560
|
fix: 修复5小时窗口费用不重置的问题
- 新增 GetCurrentWindowStartTime() 方法,当窗口过期时自动使用新的预测窗口开始时间
- UpdateSessionWindow 更新窗口时间后触发 outbox 事件同步调度器缓存
- 统一所有窗口费用查询入口使用新方法
|
2026-01-19 09:13:15 +08:00 |
|
cyhhao
|
eb7d830296
|
fix(网关): 修复流式 tool 输入参数转换
|
2026-01-19 03:57:33 +08:00 |
|
cyhhao
|
eca3898410
|
fix(网关): SSE 缓冲 input_json_delta 反向转换
|
2026-01-19 03:46:09 +08:00 |
|
shaw
|
f6360e0bf3
|
fix: 移除未使用的 extractSessionUUID 函数
修复 golangci-lint unused 检查报错
|
2026-01-18 20:15:02 +08:00 |
|
shaw
|
9abda1bc59
|
feat(tls): 新增 TLS 指纹模拟功能
|
2026-01-18 20:08:40 +08:00 |
|
shaw
|
a07174c191
|
fix: 修复会话限制功能并在创建账号时支持配额控制
|
2026-01-18 16:41:15 +08:00 |
|
cyhhao
|
6901b64fce
|
merge: sync upstream changes
|
2026-01-17 18:30:16 +08:00 |
|
cyhhao
|
32c47b1509
|
fix(gateway): satisfy golangci-lint checks
|
2026-01-17 18:16:34 +08:00 |
|
song
|
b9b4db3df5
|
Merge upstream/main
|
2026-01-17 18:00:07 +08:00 |
|
shaw
|
7379423325
|
feat: 添加5h窗口费用控制和会话数量限制
- 支持Anthropic OAuth/SetupToken账号的5h窗口费用阈值控制
- 支持账号级别的并发会话数量限制
- 使用Redis缓存窗口费用(30秒TTL)减少数据库压力
- 费用计算基于标准费用(不含账号倍率)
|
2026-01-16 23:36:52 +08:00 |
|
cyhhao
|
bd854e1750
|
fix(网关): Claude Code OAuth 补齐 oauth beta
|
2026-01-16 23:15:52 +08:00 |
|
song
|
1be3eacad5
|
feat(scheduling): 兜底层账户选择策略可配置
- gateway.scheduling.fallback_selection_mode: "last_used"(默认) 或 "random"
- last_used: 按最后使用时间排序(轮询效果)
- random: 同优先级内随机选择
|
2026-01-16 20:47:07 +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 |
|
cyhhao
|
65fd0d15ae
|
fix(网关): 补齐非 Claude Code OAuth 兼容
|
2026-01-16 00:42:31 +08:00 |
|
yangjianbo
|
f862ddc9ff
|
style: 修复 gofmt 格式化问题
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-01-15 19:42:18 +08:00 |
|