QTom
|
1dad810d15
|
refactor: 统一权限检查逻辑,使用 apiKeyService.hasPermission
将散布在各处的权限检查逻辑(permissions || 'all')统一为
apiKeyService.hasPermission() 方法调用,确保:
- 权限检查的唯一真实来源
- 避免默认值不一致导致的安全问题
- 便于后续权限模型的扩展和维护
影响文件:
- geminiHandlers.js: key-info 端点
- apiStats.js: user-stats 统计端点
- openaiClaudeRoutes.js: 权限校验辅助函数
- openaiRoutes.js: key-info 端点
|
2026-01-09 14:36:31 +08:00 |
|
QTom
|
4723328be4
|
fix: 添加 OpenAI 兼容路由对 Claude Console 账户的支持
|
2026-01-09 14:31:06 +08:00 |
|
github-actions[bot]
|
114e9facee
|
chore: sync VERSION file with release v1.1.254 [skip ci]
v1.1.254
|
2026-01-08 04:08:28 +00:00 |
|
shaw
|
e20ce86ad4
|
feat: Antigravity 账号注入 systemInstruction 和 requestType header
- 在 antigravityClient.js 的请求 header 中添加 requestType: agent
- 在 anthropicGeminiBridgeService.js 中为 antigravity 账号前置注入系统提示词
|
2026-01-08 12:07:50 +08:00 |
|
shaw
|
6caabb5444
|
update readme
|
2026-01-08 08:58:16 +08:00 |
|
shaw
|
b924c3c559
|
update readme
|
2026-01-08 08:33:09 +08:00 |
|
QTom
|
6682e0a982
|
fix: 主动刷新等待重置的 Claude 账户 Token(防止 5小时/7天 等待期间 Token 过期)
防止非等待等待重置的账号刷新,导致大量错误消息通知问题
|
2026-01-08 00:05:47 +08:00 |
|
github-actions[bot]
|
b9c088ce58
|
chore: sync VERSION file with release v1.1.253 [skip ci]
v1.1.253
|
2026-01-07 14:12:03 +00:00 |
|
shaw
|
2ff74c21d2
|
Merge branch 'antigravity'
|
2026-01-07 21:55:15 +08:00 |
|
shaw
|
8a4dadbbc0
|
fix(security): 修复余额脚本功能的RCE和SSRF漏洞
- 将 BALANCE_SCRIPT_ENABLED 默认值改为 false,需显式启用
- 添加 isUrlSafe() SSRF防护,禁止访问:
- localhost/127.x
- 私有IP (10.x, 172.16-31.x, 192.168.x)
- AWS metadata (169.254.x)
- 非HTTP(S)协议
|
2026-01-07 21:55:08 +08:00 |
|
shaw
|
adf2890f65
|
fix: 去除context_management会导致压缩失败还原逻辑 [skip ci]
|
2026-01-07 21:24:39 +08:00 |
|
Wesley Liddick
|
7d892a69f1
|
Merge pull request #873 from DaydreamCoding/patch-5 [skip ci]
fix: 主动刷新等待重置的 Claude 账户 Token(防止 5小时/7天 等待期间 Token 过期)
|
2026-01-07 08:09:15 -05:00 |
|
QTom
|
a749ddfede
|
fix: 主动刷新等待重置的 Claude 账户 Token(防止 5小时/7天 等待期间 Token 过期)
主动刷新等待重置的 Claude 账户 Token(防止 5小时/7天 等待期间 Token 过期)
|
2026-01-07 20:57:49 +08:00 |
|
Wesley Liddick
|
dbd4fb19cf
|
Merge branch 'main' into antigravity
|
2026-01-07 03:49:14 -05:00 |
|
github-actions[bot]
|
39ba345a43
|
chore: sync VERSION file with release v1.1.252 [skip ci]
v1.1.252
|
2026-01-07 08:22:01 +00:00 |
|
shaw
|
2693fd77b7
|
fix: 移除context_management字段,避免报错
|
2026-01-07 16:21:41 +08:00 |
|
52227
|
3cc3219a90
|
docs: 更新中英文 README,完善模型配额查询与 Claude Code 适配说明
- 新增 Antigravity 账户额度与模型列表查询指南
- 完善 Claude Code 兼容性特性说明 (Thinking Signature, Zombie Stream Watchdog)
- 移除无关广告信息,优化文档结构
- 明确二开维护者信息
|
2026-01-05 23:07:04 +08:00 |
|
52227
|
1b834ffcdb
|
feat: 增强稳定性与Antigravity适配 (僵尸流看门狗/自动重试/签名缓存)
主要变更:
1. **僵尸流看门狗 (Zombie Stream Watchdog)**:
- 新增 resetActivityTimeout 机制,45秒无数据强制断开连接,防止服务假死。
2. **智能重试机制**:
- 针对 Antigravity 429 (Resource Exhausted) 错误,自动清理会话并切换账号重试。
- 涵盖流式 (Stream) 和非流式 (Non-stream) 请求。
3. **Thought Signature 增强**:
- 新增签名缓存与恢复机制 (signatureCache)。
- 增加 skip_thought_signature_validator 兜底签名策略。
- 强制补充 thought: true 标记以满足上游校验。
4. **系统稳定性与调试**:
- 使用 util.inspect 替代 JSON.stringify 打印错误日志,彻底修复循环引用导致的服务崩溃。
- 新增针对 Antigravity 参数错误 (400) 的详细请求结构分析日志。
- 优化日志写入为轮转模式 (safeRotatingAppend)。
5. **其他优化**:
- antigravityClient 数据处理安全增强 (safeDataToString)。
|
2026-01-05 09:37:39 +08:00 |
|
52227
|
41999f56b4
|
feat: 适配 Antigravity 账户余额查询与流式响应优化
1. Antigravity 账户适配:
- 新增 GeminiBalanceProvider,支持 Antigravity 账户的额度查询(API 模式)
- AccountBalanceService 增加 queryMode 逻辑与安全限制
- 前端 BalanceDisplay 适配 Antigravity 配额显示
2. 流式响应增强:
- 优化 thoughtSignature 捕获与回填,支持思维链透传
- 修复工具调用签名校验
3. 其他:
- 请求体大小限制提升至 100MB
- .gitignore 更新
|
2026-01-03 10:15:13 +08:00 |
|
52227
|
b81c2b946f
|
feat: 增强 Gemini 桥接处理并添加 Antigravity 响应转储工具
|
2026-01-01 15:24:12 +08:00 |
|
github-actions[bot]
|
0a59a0f9d4
|
chore: sync VERSION file with release v1.1.251 [skip ci]
v1.1.251
|
2026-01-01 05:57:53 +00:00 |
|
Chapoly1305
|
c4448db6ab
|
fix: 防止客户端断开连接时服务崩溃
当客户端在流式响应过程中断开连接时,catch 块尝试发送 JSON 错误响应
会触发 ERR_HTTP_HEADERS_SENT 错误,导致 unhandledRejection 使服务崩溃。
修复文件:
- src/routes/openaiClaudeRoutes.js
- src/routes/openaiGeminiRoutes.js
修复内容:
- 添加 res.headersSent 检查,避免在响应已发送后再次尝试发送
- 客户端断开连接使用 INFO 级别日志(不是 ERROR)
- 客户端断开使用 499 状态码 (Client Closed Request)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2025-12-30 01:18:06 -05:00 |
|
52227
|
c67d2bce9d
|
feat: 完善 Antigravity OAuth 功能与权限校验
新增功能:
- 实现 Antigravity OAuth 账户支持与路径分流
- 支持 /antigravity/api 路径自动分流到 Antigravity OAuth 账户
- 支持 gemini-antigravity 平台类型的账户创建和管理
修复问题:
- 修复 OAuthFlow 组件中 gemini-antigravity 平台授权页面空白的问题
- 修复 EditApiKeyModal 中 Redis 返回字符串格式 permissions 导致的 400 错误
- 统一使用 hasPermission 函数进行权限校验,支持数组格式
优化改进:
- 添加 Antigravity 调试环境变量说明
|
2025-12-29 14:23:43 +08:00 |
|
github-actions[bot]
|
a345812cd7
|
chore: sync VERSION file with release v1.1.250 [skip ci]
v1.1.250
|
2025-12-29 05:46:39 +00:00 |
|
shaw
|
a0cbafd759
|
Merge branch 'fix-authenticateUserOrAdmin-bypass'
|
2025-12-29 13:45:44 +08:00 |
|
Wesley Liddick
|
3c64038fa7
|
Create SECURITY.md for security policy [skip ci]
Add a security policy document outlining supported versions and vulnerability reporting.
|
2025-12-29 13:37:15 +08:00 |
|
Junming Chen
|
45b81bd478
|
fix: 修复 authenticateUserOrAdmin 认证绕过漏洞
- 添加 username 和 loginTime 字段验证(与 authenticateAdmin 保持一致)
- 无效/伪造会话自动删除并记录安全日志
- 删除未使用的 id 字段(死代码清理)
漏洞详情:
- 位置:src/middleware/auth.js:1569-1581
- 原因:只检查 Object.keys(session).length > 0,未验证必须字段
- 影响:攻击者可通过注入最小会话 {foo:'bar'} 绕过认证
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2025-12-28 23:56:05 -05:00 |
|
github-actions[bot]
|
fc57133230
|
chore: sync VERSION file with release v1.1.249 [skip ci]
v1.1.249
|
2025-12-26 11:26:14 +00:00 |
|
shaw
|
1f06af4a56
|
chore: trigger release [force release]
|
2025-12-26 19:25:53 +08:00 |
|
shaw
|
6165fad090
|
docs: 添加安全漏洞警告
|
2025-12-26 19:22:08 +08:00 |
|
shaw
|
d53a399d41
|
revert: 回退到安全漏洞修复版本
|
2025-12-26 19:15:50 +08:00 |
|
Wesley Liddick
|
3f98267738
|
Merge branch 'main' into antigravity
|
2025-12-26 00:56:27 -05:00 |
|
Wesley Liddick
|
e187b8946a
|
Merge pull request #825 from atoz03/feat/account-quota [skip ci]
Feat:account quota
|
2025-12-26 00:53:33 -05:00 |
|
Wesley Liddick
|
8917019a78
|
Merge pull request #814 from Guccbai/feature/multi-select-permissions [skip ci]
feat(permissions): 服务权限从单选改为多选
|
2025-12-26 00:52:42 -05:00 |
|
52227
|
9960f237b8
|
feat: 实现 Antigravity OAuth 账户支持与路径分流
|
2025-12-25 14:33:24 +08:00 |
|
shaw
|
b6da77cabe
|
docs: update readme
|
2025-12-25 14:27:23 +08:00 |
|
github-actions[bot]
|
e561387e81
|
chore: sync VERSION file with release v1.1.241 [skip ci]
v1.1.241
|
2025-12-25 06:23:55 +00:00 |
|
shaw
|
982cca1020
|
fix: 修复鉴权检测的重大安全漏洞
|
2025-12-25 14:23:35 +08:00 |
|
github-actions[bot]
|
792ba51290
|
chore: sync VERSION file with release v1.1.240 [skip ci]
v1.1.240
|
2025-12-25 02:46:09 +00:00 |
|
Wesley Liddick
|
74d138a2fb
|
Merge pull request #842 from IanShaw027/feat/account-export-api
feat(admin): 添加账户导出同步 API
|
2025-12-24 21:45:55 -05:00 |
|
IanShaw027
|
b88698191e
|
style(admin): fix ESLint curly rule violations in sync.js
为单行 if 语句添加花括号以符合 ESLint curly 规则要求
|
2025-12-24 17:57:30 -08:00 |
|
IanShaw027
|
11c38b23d1
|
style(admin): format sync.js with prettier
修复 CI 格式化检查失败问题
|
2025-12-24 17:52:51 -08:00 |
|
IanShaw027
|
b2dfc2eb25
|
feat(admin): 添加账户导出同步 API
- 新增 /api/accounts 端点,支持导出所有账户数据
- 新增 /api/proxies 端点,支持导出所有代理配置
- 支持 Sub2API 从 CRS 批量同步账户
- 包含完整的 credentials 和 extra 字段
- 提供账户类型标识 (oauth/setup_token/api_key)
相关 PR: Sub2API 端实现账户同步功能
|
2025-12-24 17:35:11 -08:00 |
|
github-actions[bot]
|
59ce0f091c
|
chore: sync VERSION file with release v1.1.239 [skip ci]
v1.1.239
|
2025-12-24 11:56:05 +00:00 |
|
shaw
|
67c20fa30e
|
feat: 为 claude-official 账户添加 403 错误重试机制
针对 OAuth 和 Setup Token 类型的 Claude 账户,遇到 403 错误时:
- 休息 2 秒后进行重试
- 最多重试 2 次(总共最多 3 次请求)
- 重试后仍是 403 才标记账户为 blocked
同时支持流式和非流式请求,并修复了流式请求中的竞态条件问题。
|
2025-12-24 19:54:25 +08:00 |
|
shaw
|
671451253f
|
fix: 修复并发清理任务 WRONGTYPE 错误
问题:
- 并发清理定时任务在遇到非 zset 类型的遗留键时报 WRONGTYPE 错误
- 错误键如 concurrency:wait:*, concurrency:user:*, concurrency:account:* 等
修复:
- app.js: 使用原子 Lua 脚本先检查键类型再执行清理,消除竞态条件
- redis.js: 为 6 个并发管理函数添加类型检查
- getAllConcurrencyStatus(): 跳过 queue 键 + 类型检查
- getConcurrencyStatus(): 类型检查,非 zset 返回 invalidType
- forceClearConcurrency(): 类型检查,任意类型都删除
- forceClearAllConcurrency(): 跳过 queue 键 + 类型检查
- cleanupExpiredConcurrency(): 跳过 queue 键 + 类型检查
- 遗留键会被自动识别并删除,同时记录日志
|
2025-12-24 17:51:19 +08:00 |
|
Guccbai
|
534fbf6ac2
|
fix(eslint): 修复 ESLint 检查错误
- 修复 apiKeyService.js 中 if 语句缺少大括号的 curly 错误
- 移除 openaiGeminiRoutes.js 中重复声明 apiKeyService 导致的 no-shadow 错误
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2025-12-23 20:26:18 +08:00 |
|
github-actions[bot]
|
0173ab224b
|
chore: sync VERSION file with release v1.1.238 [skip ci]
v1.1.238
|
2025-12-21 14:41:29 +00:00 |
|
shaw
|
11fb77c8bd
|
chore: trigger release [force release]
|
2025-12-21 22:41:03 +08:00 |
|
shaw
|
3d67f0b124
|
chore: update readme
|
2025-12-21 22:37:13 +08:00 |
|