SunSeekerX
73a241df1a
Merge branch 'main' into feat/optimize
2026-01-21 11:56:02 +08:00
SunSeekerX
029bdf3719
1
2026-01-21 11:55:28 +08:00
SunSeekerX
76ecbe18a5
1
2026-01-19 20:24:47 +08:00
Richard Hao
81a3e26e27
fix: correct Bedrock SSE stream event format to match Claude API spec
...
- message_start: nest fields inside 'message' object with type: 'message'
- content_block_delta: add type field to data
- message_delta: add type field to data
- message_stop: remove usage field, just return type
- Extract usage from message_delta instead of message_stop
2026-01-18 11:38:38 +08:00
Richard Hao
64db4a270d
fix: handle bedrock content block start/stop events
2026-01-18 10:58:11 +08:00
root
189d53d793
style: fix ESLint prefer-const and formatting
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-12 10:46:08 +00:00
root
b148537428
style: fix prettier formatting
...
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-12 10:42:39 +00:00
root
b26027731e
fix(memory): clear bodyString after req.write() to prevent closure capture
...
Additional memory optimizations:
- Set bodyString = null after req.write() in both stream and non-stream requests
- Use let instead of const for bodyString to allow nullifying
- Store non-stream originalBodyString in bodyStore to avoid closure capture
- Clean up bodyStore in finally block for non-stream requests
This prevents V8 closures (res.on handlers) from retaining large request
body strings until stream completion.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-12 08:57:54 +00:00
root
f535b35a1c
fix(memory): use bodyStore to avoid closure capturing request body
...
Problem:
- Stream response handlers (res.on) captured requestOptions in closures
- requestOptions contained originalBodyString (~800KB per request)
- These strings couldn't be GC'd until stream completed
- With concurrent requests, memory accumulated rapidly
Solution:
- Store request body strings in this.bodyStore Map with unique ID
- Pass only bodyStoreId in requestOptions (not the 800KB string)
- Closures capture small ID, not large string
- Clean up bodyStore on request completion (success/error/timeout)
- Extract needed values before closures to avoid capturing body object
2026-01-12 08:31:47 +00:00
Wesley Liddick
fcc6ac4e22
Merge pull request #885 from junejuneli/feat/add_claude_aws_type
...
为 AWS Bedrock 账户添加 Bearer Token 认证支持
2026-01-10 16:56:13 +08:00
juenjunli
94f239b56a
feat: 添加 Claude 4.5 系列模型支持到 AWS Bedrock 映射表
...
为 AWS Bedrock 服务添加 Claude 4.5 系列模型的映射支持,包括:
- Claude 4.5 Opus (claude-opus-4-5)
- Claude 4.5 Sonnet (claude-sonnet-4-5)
- Claude 4.5 Haiku (claude-haiku-4-5)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Haiku 3.5 <noreply@anthropic.com >
2026-01-10 16:04:58 +08:00
juenjunli
549c95eb80
feat: 为 AWS Bedrock 账户添加 Bearer Token 认证支持
...
- 新增 credentialType 字段支持 access_key 和 bearer_token 两种认证方式
- 实现 Bedrock 账户的 testAccountConnection 方法,支持 SSE 流式测试
- 前端账户表单增加认证类型选择器,自动切换输入字段
- 前端测试模态框根据账户类型自动选择测试模型(Bearer Token 使用 Sonnet 4.5,Access Key 使用 Haiku)
- 改进测试接口错误处理,避免响应流重复关闭
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-10 14:13:36 +08:00
jett
b397954ea4
fix lint
2026-01-10 11:41:35 +08:00
jett
ed835d0c28
using TTL-based random suffix
2026-01-10 00:56:21 +08:00
jett
28b27e6a7b
fix: claude subscription detection
2026-01-10 00:31:17 +08:00
shaw
e20ce86ad4
feat: Antigravity 账号注入 systemInstruction 和 requestType header
...
- 在 antigravityClient.js 的请求 header 中添加 requestType: agent
- 在 anthropicGeminiBridgeService.js 中为 antigravity 账号前置注入系统提示词
2026-01-08 12:07:50 +08:00
QTom
6682e0a982
fix: 主动刷新等待重置的 Claude 账户 Token(防止 5小时/7天 等待期间 Token 过期)
...
防止非等待等待重置的账号刷新,导致大量错误消息通知问题
2026-01-08 00:05:47 +08: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
QTom
a749ddfede
fix: 主动刷新等待重置的 Claude 账户 Token(防止 5小时/7天 等待期间 Token 过期)
...
主动刷新等待重置的 Claude 账户 Token(防止 5小时/7天 等待期间 Token 过期)
2026-01-07 20:57:49 +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
SunSeekerX
f5e982632d
chore
2026-01-04 12:05:53 +08:00
SunSeekerX
90023d1551
Revert: 撤销 584fa8c 之后的所有提交
2026-01-03 23:24:59 +08:00
SunSeekerX
74e71d0afc
chore
2026-01-03 23:20:05 +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
SunSeekerX
d8a33f9aa7
chore
2026-01-01 12:42:47 +08:00
SunSeekerX
b4233033a6
chore
2025-12-31 02:17:10 +08:00
SunSeekerX
584fa8c9c1
feat: 大规模性能优化 - Redis Pipeline 批量操作、索引系统、连接池优化
2025-12-31 02:08:47 +08: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
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
67c20fa30e
feat: 为 claude-official 账户添加 403 错误重试机制
...
针对 OAuth 和 Setup Token 类型的 Claude 账户,遇到 403 错误时:
- 休息 2 秒后进行重试
- 最多重试 2 次(总共最多 3 次请求)
- 重试后仍是 403 才标记账户为 blocked
同时支持流式和非流式请求,并修复了流式请求中的竞态条件问题。
2025-12-24 19:54:25 +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
shaw
8ec8a59b07
feat: claude账号新增支持拦截预热请求
2025-12-21 22:28:22 +08:00
atoz03
f6f4b5cfec
feat(admin): 余额脚本驱动的余额/配额刷新与管理端体验修复
...
- 明确刷新语义:仅脚本启用且已配置时触发远程查询;未配置时前端禁用并提示\n- 新增余额脚本安全开关 BALANCE_SCRIPT_ENABLED(默认开启),脚本测试接口受控\n- Redis 增加单账户脚本配置存取,响应透出 scriptEnabled/scriptConfigured 供 UI 判定\n- accountBalanceService:本地统计汇总改用 SCAN+pipeline,避免 KEYS;仅缓存远程成功结果,避免失败/降级覆盖有效缓存\n- 管理端体验:刷新按钮按配置状态灰置;脚本弹窗内容可滚动、底部操作栏固定,并 append-to-body 使弹窗跟随当前视窗
2025-12-20 01:18:49 +08:00
atoz03
26ca696b91
fix:修复了重复声明 redis 导致的启动报错,并保留余额脚本功能接入账户
2025-12-20 01:18:49 +08:00
atoz03
ce496ed9e6
feat:单账户配置余额脚本 + 刷新按钮即用脚本”,并去掉独立页面/标签。
...
具体改动
- 后端
- src/models/redis.js:新增脚本配置存取 account_balance_script:{platform}:{accountId}。
- src/services/accountBalanceService.js:支持脚本查询。若账户有脚本配置且 queryApi=true,调用 balanceScriptService.execute 获取余额/配额,缓存后返回。
- src/routes/admin/accountBalance.js:新增接口
- GET /admin/accounts/:id/balance/script?platform=...
- PUT /admin/accounts/:id/balance/script?platform=...
- POST /admin/accounts/:id/balance/script/test?platform=...
- 前端
- 新增弹窗 AccountBalanceScriptModal,在账户管理页每个账户“余额/配额”下方有“配置余额脚本”按钮,支持填写 baseUrl/apiKey/token/extra/超时/自动间隔、编写脚本、测试、保存。
- 将余额脚本独立路由/标签移除。
- 格式/ lint 已通过(新组件及 AccountsView)。
2025-12-20 01:18:49 +08:00
atoz03
f6ed420401
feat(admin): 新增账户余额/配额查询与展示
...
- 新增 accountBalanceService 与多 Provider 适配(Claude/Claude Console/OpenAI Responses/通用)
- Redis 增加余额查询结果与本地统计缓存读写
- 管理端新增 /admin/accounts/balance 相关接口与汇总接口,并在应用启动时注册 Provider
- 后台前端新增余额组件与 Dashboard 余额/配额汇总、低余额/高使用提示
- 补充 accountBalanceService 单元测试
2025-12-20 01:15:33 +08:00
shaw
638d2ff189
feat: 支持claude单账户开启串行队列
2025-12-19 22:29:57 +08:00
guoyongchang
26bfdd6892
[feat/cron-test-support]optimize.
2025-12-19 14:03:31 +08:00
guoyongchang
cd3f51e9e2
refactor: optimize cron test support feature
...
**优化内容:**
1. **验证和安全性加强**
- 移除cron验证重复,统一使用accountTestSchedulerService.validateCronExpression()方法
- 添加model参数类型和长度验证(max 256 chars)
- 限制cronExpression长度至100字符防止DoS攻击
- 双层验证:service层和route层都进行长度检查
2. **性能优化**
- 优化_refreshAllTasks()使用Promise.all()并行加载所有平台配置(之前是顺序加载)
- 改进错误处理,平台加载失败时继续处理其他平台
3. **数据管理改进**
- 为test config添加1年TTL过期机制(之前没有过期设置)
- 保证test history已有30天TTL和5条记录限制
4. **错误响应标准化**
- 统一所有API响应格式,确保error状态都包含message字段
- 改进错误消息的可读性和上下文信息
5. **用户体验改进**
- Vue组件使用showToast()替代原生alert()
- 移除console.error()改用toast通知用户
- 成功保存时显示成功提示
6. **代码整理**
- 移除未使用的maxConcurrentTests变量及其getStatus()中的引用
- 保持代码整洁性
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2025-12-19 13:39:39 +08:00
guoyongchang
09cf951cdc
[feat/cron-test-support]done.
2025-12-19 10:25:43 +08:00
Guccbai
33ea26f2ac
feat(permissions): 服务权限从单选改为多选
...
- 将 API Key 的服务权限从单选改为多选,支持同时选择多个服务
- 移除"全部服务"选项,空数组表示允许访问全部服务
- 后端自动兼容旧格式('all' -> [], 'claude' -> ['claude'])
- 前端 radio 改为 checkbox,更新账户选择器联动逻辑
修改文件:
- apiKeyService.js: 添加 normalizePermissions/hasPermission 函数
- api.js, droidRoutes.js, openaiRoutes.js, unified.js, openaiGeminiRoutes.js, geminiHandlers.js: 使用新权限验证函数
- admin/apiKeys.js: 支持数组格式权限验证
- CreateApiKeyModal.vue, EditApiKeyModal.vue: UI 改为 checkbox 多选
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-17 11:35:11 +08:00
huajiwuyan
052e236a93
fix(scheduler): 恢复OpenAI 账号选择支持 priority + lastUsedAt
2025-12-15 23:17:44 +08:00
shaw
ce13e5ddb1
fix: console账号转发使用白名单透传header
2025-12-15 09:38:51 +08:00
DaydreamCoding
07633ddbf8
feat: enhance concurrency queue with health check and admin endpoints
...
- Add queue health check for fast-fail when overloaded (P90 > threshold)
- Implement socket identity verification with UUID token
- Add wait time statistics (P50/P90/P99) and queue stats tracking
- Add admin endpoints for queue stats and cleanup
- Add CLEAR_CONCURRENCY_QUEUES_ON_STARTUP config option
- Update documentation with troubleshooting and proxy config guide
2025-12-12 14:32:09 +08:00
LZY
51aa8dc381
fix:修复codex统计token问题
2025-12-10 22:56:25 +08:00