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
shaw
2ff74c21d2
Merge branch 'antigravity'
2026-01-07 21:55:15 +08:00
shaw
adf2890f65
fix: 去除context_management会导致压缩失败还原逻辑 [skip ci]
2026-01-07 21:24:39 +08:00
Wesley Liddick
dbd4fb19cf
Merge branch 'main' into antigravity
2026-01-07 03:49:14 -05:00
shaw
2693fd77b7
fix: 移除context_management字段,避免报错
2026-01-07 16:21:41 +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
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
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
982cca1020
fix: 修复鉴权检测的重大安全漏洞
2025-12-25 14:23:35 +08: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
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
84f19b348b
fix: 适配cc遥测端点
2025-12-21 22:29:36 +08:00
shaw
8ec8a59b07
feat: claude账号新增支持拦截预热请求
2025-12-21 22:28:22 +08:00
shaw
00d8ac4bec
Merge branch 'main' into dev
2025-12-21 21:35:16 +08:00
atoz03
b6f3459522
修复 eslint
2025-12-20 01:40:41 +08:00
atoz03
4c6879a9c2
Prettier 格式化
2025-12-20 01:24:08 +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
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
dd8a0c95c3
fix: use template literals instead of string concatenation
...
- Convert string concatenation to template literals per ESLint prefer-template rule
- Fixes ESLint errors in sessionKeyPrefix logging (lines 281, 330)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2025-12-19 15:46:38 +08:00
guoyongchang
126eee3712
feat/cron-test-support format fix.
2025-12-19 14:59:47 +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
sususu
4863a37328
feat: 添加 Claude Code 遥测端点并优化日志级别
...
- 添加 /api/event_logging/batch 端点处理客户端遥测请求
- 将遥测相关请求日志改为 debug 级别,减少日志噪音
2025-12-16 18:31:07 +08:00
XiaoXice
c79ea19aa1
fix: 全时间api-token统计因为日token记录过期导致不准的问题
2025-12-15 15:14:09 +08:00
John Doe
baafebbf7b
fix: correct API key cost calculation and UI display issues
...
- Fix admin panel cost display for "all time" period using permanent Redis key
- Fix user statistics total cost limit to show complete history
- Fix restricted models list overflow with scrollable container
Backend changes:
- src/routes/admin/apiKeys.js: Use allTimeCost for timeRange='all' instead of scanning TTL keys
- src/routes/apiStats.js: Prioritize permanent usage:cost:total key over monthly keys
Frontend changes:
- web/admin-spa/src/components/apistats/LimitConfig.vue: Add overflow-visible and scrolling to model list
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-12-12 18:11:02 +03: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
QTom
e3ca555df7
fix(security): add authenticateAdmin middleware to concurrency routes
...
fix(security): add authenticateAdmin middleware to concurrency routes
All concurrency management endpoints were missing authentication,
allowing unauthenticated access to view and clear concurrency data.
2025-12-10 13:59:25 +08:00
QTom
dc96447d72
style: 格式化文件以符合 Prettier 规范
2025-12-09 17:18:43 +08:00
QTom
f5d1c25295
feat: 添加用户消息串行队列功能,防止同账户并发请求触发限流
...
- 新增 userMessageQueueService.js 实现基于 Redis 的队列锁机制
- 在 claudeRelayService、claudeConsoleRelayService、bedrockRelayService、ccrRelayService 中集成队列锁
- 添加 Redis 原子性 Lua 脚本:acquireUserMessageLock、releaseUserMessageLock、refreshUserMessageLock
- 支持锁续租机制,防止长时间请求锁过期
- 添加可配置参数:USER_MESSAGE_QUEUE_ENABLED、USER_MESSAGE_QUEUE_DELAY_MS、USER_MESSAGE_QUEUE_TIMEOUT_MS
- 添加 Web 管理界面配置入口
- 添加 logger.performance 方法用于结构化性能日志
- 添加完整单元测试 (tests/userMessageQueue.test.js)
2025-12-09 17:04:01 +08:00
shaw
aa71c58400
fix: 修复强制会话绑定首次会话的bug
2025-12-08 21:05:21 +08:00
shaw
c79fdc4d71
feat: 增加Claude会话强制绑定
2025-12-08 16:06:23 +08:00
shaw
bab7073822
fix: 修复api-keys页面窗口费率显示问题
2025-12-08 09:58:54 +08:00
shaw
d49cc0cec8
fix: 修复api-keys页面窗口费率显示问题
2025-12-08 09:45:19 +08:00
Wesley Liddick
eb2341fb16
Merge pull request #771 from DaydreamCoding/patch-2 [skip ci]
...
Update model filtering to use blacklist approach
2025-12-06 22:43:52 -05:00
Wesley Liddick
e89e2964e7
Merge pull request #773 from DaydreamCoding/feature/concurrency [skip ci]
...
feat(concurrencyManagement): implement concurrency status management …
2025-12-06 22:43:29 -05:00
SunSeekerX
0828746281
fix: 修复 ESLint 错误 - if 语句花括号和箭头函数简写
2025-12-06 18:30:44 +08:00
SunSeekerX
e1df90684a
fix: 合并冲突 - 保留多选支持并添加暗黑模式样式
2025-12-06 18:28:03 +08:00
DaydreamCoding
f74f77ef65
feat(concurrencyManagement): implement concurrency status management API and enhance concurrency handling in middleware
2025-12-06 17:23:42 +08:00
QTom
b63c3217bc
Update model filtering to use blacklist approach
...
Change model filtering logic to blacklist restricted models.
2025-12-06 14:20:06 +08:00
Wesley Liddick
01c63bf5df
Merge pull request #760 from IanShaw027/upstream-pr-account-full [skip ci]
...
feat: 增强账户管理功能
2025-12-05 21:45:37 -05:00