Commit graph

402 commits

Author SHA1 Message Date
liushize
952b20c9b7 功能(Grok):优化 GrokConverter 与 GrokApiService 中的使用量追踪及估算功能
在 GrokConverter 中新增方法,用于详细提取与估算使用量,包含上游使用量处理及降级机制。
在 GrokApiService 中添加功能,当上游令牌字段缺失时自动附加使用量估算数据。
优化多响应来源的使用量数据合并逻辑,确保追踪精准。
基于环境变量实现使用量统计日志记录,提升可监控性。
2026-04-11 18:34:30 +08:00
hex2077
51c0af2f15 chore: 更新版本号并移除已弃用的模型
移除 OpenAI Qwen OAuth 提供者中已弃用的模型 'qwen3.6-plus' 和 'qwen3.5-plus',同时将项目版本号更新至 2.13.5.1。
2026-04-10 16:49:07 +08:00
hex2077
093b05068d chore: 更新版本号至2.13.5并调整Qwen模型列表
- 将项目版本从2.13.4.1更新至2.13.5
- 更新Qwen API客户端版本至0.14.2
- 调整`openai-qwen-oauth`提供商模型列表顺序,将通用模型置于前列
2026-04-10 16:45:43 +08:00
hex2077
ba55ce3f3a fix(api-potluck): 修复使用量统计在多请求ID场景下的问题
重构获取待处理使用量的逻辑,提取公共函数避免重复代码。修复当同时存在插件请求ID和监控请求ID时,使用量统计可能被错误删除的问题。
2026-04-10 16:24:42 +08:00
hex2077
8afcb479fa fix(api-potluck): 修复令牌计数回退并改进显示格式
- 在 normalizeUsageCandidate 中添加缺失的令牌计数回退字段(inputTokenCount/outputTokenCount)
- 确保凭证切换重试上下文始终可用
- 为令牌数量添加紧凑格式化函数(K/M/G 单位),在多个统计页面中应用
- 更新版本号至 2.13.4
2026-04-10 15:55:31 +08:00
amarcin
e443d9d891 fix: /v1/responses endpoint drops tool calls (function_call) in non-streaming mode
Also fixes streaming tool call event type and response status.

Non-streaming:
- ClaudeConverter.toOpenAIResponsesResponse now handles tool_use
  content blocks, emitting function_call output items
- OpenAIConverter.toOpenAIResponsesResponse now handles
  message.tool_calls, emitting function_call output items
- Both set status to 'requires_action' when tool calls are present

Streaming:
- OpenAIConverter uses response.function_call_arguments.delta
  instead of response.custom_tool_call_input.delta
- generateResponseCompleted sets status to 'requires_action'
  when tool calls are tracked in stream state

Fixes #471
2026-04-09 17:40:22 -07:00
hex2077
82a6ec2f43 feat(plugin): 新增模型用量统计插件并增强 API Potluck 的 token 统计功能
- 新增 `model-usage-stats` 插件,提供模型级别的 token 用量统计和 API 接口
- 增强 API Potluck 插件,记录并展示 prompt、completion 和 total tokens 用量
- 更新插件管理器以支持禁用插件的路由拦截和静态文件访问控制
- 在前端页面中展示 token 用量统计数据
- 升级版本号至 2.13.3
2026-04-09 16:30:02 +08:00
hex2077
1754b6ce4e fix: 修复号池提供商空节点时错误读取默认配置的问题
- 在 provider-pool-manager.js 中,修复当号池类型提供商节点为空时错误读取全局默认配置的问题
- 在 service-manager.js 中,统一号池提供商的判断逻辑,确保号池类型提供商即使未显式配置也能正确使用号池
- 更新 Codex API 版本至 0.118.0,调整 user-agent 并增加默认 web_search 工具
- 优化错误处理,统一使用 handleError 函数返回符合客户端协议的错误响应
- 修复更新检查中日志记录错误信息的问题
2026-04-09 14:05:14 +08:00
hex2077
373ad4ee3b fix(providers): 修复 Codex OAuth 健康检查的请求格式转换
在 Codex OAuth 健康检查流程中,先构造标准的 OpenAI messages 格式请求,再通过 convertData 显式转换为 Codex API 所需的 responses input 格式,替代之前直接使用原生格式的方式,确保格式转换的一致性。
2026-04-09 00:15:51 +08:00
hex2077
2e59041ca0 fix(providers): 修复 Codex OAuth 健康检查的请求格式
健康检查调用原生适配器时需使用 Codex responses 原生 input 格式,而非标准 messages 格式。
2026-04-08 23:50:05 +08:00
Andres D. Molins
52321f0f3a Solved error with not tracked response.completed event where does't get all the deltas 2026-04-08 03:16:50 +02:00
hex2077
6b1a6bed4d chore: 更新版本号并调整Grok API请求参数
移除不再需要的请求字段,包括modelName、isFromGrokFiles等
更新viewportWidth为更合理的默认值1116
简化metadata结构,将request_metadata提升为顶级字段
2026-04-07 16:31:27 +08:00
hex2077
5c7831beb7 chore: 更新版本号至2.13.1并注释掉工具覆盖代码
移除GrokApiService中toolOverrides的展开操作符,改为注释,以避免潜在的配置覆盖问题。
2026-04-07 15:56:48 +08:00
hex2077
c5cb63a239 feat(grok): 新增并更新图片生成模型配置
新增 grok-imagine-1.0-fast 和 grok-imagine-1.0-fast-edit 模型及其 NSFW 变体到支持列表。
更新模型映射,将原有 imagine 模型的 modeId 从 'fast' 改为 'expert',并为新增的 fast 模型配置正确的映射。
简化图片生成启用逻辑,现在仅基于模型名称(包含 'imagine' 或 'edit' 但不包含 'video')进行判断,以提高准确性和可维护性。
更新版本号至 2.13.0。
2026-04-07 14:39:53 +08:00
hex2077
9d87e54837 feat(grok): 回滚对 Grok 4.1 系列模型的支持
添加 grok-4.1-mini、grok-4.1-thinking 及其 nsfw 变体到可用模型列表,并更新核心映射以支持这些新模型。
同时将项目版本号更新至 2.12.9。
2026-04-07 12:03:15 +08:00
hex2077
a069feea71 feat: 新增系统提示词内容替换功能并重构常量定义
- 新增 SYSTEM_PROMPT_REPLACEMENTS 配置项,支持在系统提示词中执行顺序内容替换
- 将 MODEL_PROVIDER 等常量从 common.js 迁移到独立的 constants.js 文件
- 为所有提供商策略(OpenAI、Claude、Gemini、Grok、Forward、Codex Responses)添加系统提示词替换支持
- 更新 UI 配置界面,添加替换规则管理功能
- 更新 Grok 提供商模型列表至 4.20 版本
2026-04-07 00:04:00 +08:00
hex2077
9f270e714d feat: 扩展管理模型列表提供商支持并优化健康检查
- 将 claude-custom 添加到管理模型列表提供商集合中
- 优化模型列表提取逻辑,避免不必要的协议转换
- 重构工具函数导入,提高代码组织性
- 增强暗黑主题下的模型选择器样式支持
- 改进健康检查逻辑,为管理模型列表提供商自动选择测试模型
- 添加文件锁机制防止配置持久化时的并发写入冲突
2026-04-06 16:59:09 +08:00
hex2077
fb26659c23 Merge branch 'main' of https://github.com/justlovemaki/AIClient-2-API 2026-04-06 16:10:30 +08:00
hex2077
77f73f0603 feat(grok): 增强图片生成功能并支持提供商置顶
- 更新 Grok 图片生成的 WebSocket 协议以适配最新服务端接口
- 扩展资源代理支持至 imagine-public.x.ai 和 grok.com 域名
- 在配置页面为预加载模型提供商添加置顶功能,可设置默认提供商
- 改进图片渲染逻辑,避免流式输出中的重复图片显示
- 更新相关界面文本以更准确描述预加载提供商功能
2026-04-06 16:08:13 +08:00
HenryZ-0302
a497aaaf19 feat: add per-node health check action in provider modal 2026-04-05 19:57:22 -07:00
HenryZ-0302
110720982f fix: read managed models from provider pools for model lists 2026-04-05 14:06:21 -07:00
HenryZ-0302
465bbaef2b fix: avoid common/provider-models circular import 2026-04-05 14:01:16 -07:00
HenryZ-0302
7ae03c814f fix: return configured managed models from model list endpoint 2026-04-05 13:56:55 -07:00
HenryZ-0302
75f2676236 feat: add managed model list picker for custom providers 2026-04-05 13:38:01 -07:00
何夕2077
ebf03d9e37
Revert "feat: model-router插件 + 安全增强 + embeddings支持" 2026-04-05 22:09:24 +08:00
何夕2077
429fc1b16f
Merge branch 'main' into feat/model-router-and-improvements 2026-04-05 22:04:46 +08:00
hex2077
1ee4ca37d1 feat(ui): 增强提供商刷新状态显示和版本选择功能
- 在提供商管理界面添加刷新状态徽章,显示“刷新中”状态
- 为更新功能添加版本选择下拉框,支持选择特定版本进行更新
- 在提供商状态中新增 needsRefresh 字段用于跟踪刷新状态
- 修复冷启动时刷新状态重置逻辑,避免持久化状态影响新会话
- 为刷新操作添加超时保护机制,防止适配器调用无限挂起
- 完善国际化翻译,添加相关状态和版本标签
2026-04-05 21:46:05 +08:00
product-manager-claude
4385421e11 feat: model-router插件 + 安全增强 + embeddings支持
- 新增 model-router 中间件插件(别名路由、热配置、管理面板)
- api-manager 支持 /v1/embeddings 端点透传
- auth.js 安全增强:原子写入、空数据防护、token清理防护
- GrokConverter 兼容性改进
- ecosystem.config.cjs PM2配置
2026-04-05 21:32:35 +08:00
hex2077
85d7b50cb1 fix: 修复Qwen API配额错误处理和Gemini初始化顺序问题
- 修复Qwen API的配额错误识别和速率限制,避免因配额耗尽导致服务中断
- 修正Gemini API服务初始化顺序,确保OAuth2客户端在HTTP代理配置后创建
- 优化提供商数据脱敏逻辑,防止保存时覆盖真实的敏感信息
- 增强前端错误处理,支持国际化错误消息的翻译和显示
- 移除Antigravity中冗余的思考签名修复代码,简化历史记录处理
- 修复服务管理器初始化逻辑,确保提供商池状态正确更新
- 统一日志下载文件名格式,改进文件下载错误处理
- 更新翻译文件,添加缺失的通用错误消息国际化支持
2026-04-05 17:50:11 +08:00
hex2077
8531343c2b Reapply "feat: 更新版本至2.12.3并修复多个问题"
This reverts commit ceff3771ea.
2026-04-05 15:23:09 +08:00
hex2077
02fdc39571 Reapply "feat: 支持动态提供商配置组和前缀匹配机制"
This reverts commit b8a983a3cd.
2026-04-05 15:20:48 +08:00
hex2077
b8a983a3cd Revert "feat: 支持动态提供商配置组和前缀匹配机制"
This reverts commit 0c9d52f537.
2026-04-04 22:49:52 +08:00
hex2077
ceff3771ea Revert "feat: 更新版本至2.12.3并修复多个问题"
This reverts commit 1570fbb096.
2026-04-04 22:49:44 +08:00
hex2077
1570fbb096 feat: 更新版本至2.12.3并修复多个问题
更新项目版本至2.12.3,新增赞助商LingtrueAPI信息至README文档。修复Qwen提供商缺少系统提示词时自动添加默认提示词的问题。优化Gemini和Antigravity提供商的OAuth2Client代理配置逻辑,根据baseURL自动选择HTTP/HTTPS agent。修复Antigravity提供商中thinking budget逻辑及历史记录中思考签名缺失的问题。将Windows安装脚本翻译为英文。
2026-04-03 23:21:32 +08:00
hex2077
0c9d52f537 feat: 支持动态提供商配置组和前缀匹配机制
- 添加动态提供商配置组功能,支持通过后缀创建自定义配置组
- 实现前缀匹配机制,使自定义配置组能继承基础类型的配置和模型
- 更新代理、TLS Sidecar、健康检查等系统以支持前缀匹配
- 添加提供商组管理界面,支持创建和显示自定义配置组
- 改进提供商状态API,支持显示所有配置组及其状态
- 升级axios依赖至v1.14.0以获取安全更新
2026-04-03 22:42:26 +08:00
Wenaixi
2a6e297238 fix: 修复 currentConfig 未定义错误
- 将 currentConfig?.CRON_NEAR_MINUTES 更正为 this.globalConfig?.CRON_NEAR_MINUTES
- 修复代码审查发现的变量引用错误

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 03:04:43 +08:00
Wenaixi
bc018cf16f fix: 修复代码审查中发现的关键问题
1. 修复方法名错误
   - 将 performScheduledHealthChecks() 改为 performHealthChecks()
   - 修复启动时健康检查调用错误

2. 改进路径遍历防护
   - 仅在 Windows 平台执行小写转换
   - 避免 Linux 平台路径大小写误判

3. 增强 XSS 防护
   - 扩展危险协议检测(data/javascript/vbscript)
   - 使用更安全的 HTML 标签移除方式
   - 添加 HTML 实体编码攻击防护

4. 为文件锁添加超时机制
   - 防止操作永久挂起导致锁链阻塞
   - 默认超时时间 30 秒
2026-04-03 02:56:34 +08:00
Wenaixi
1018750388 fix: 深度review后续修复——安全强化、i18n补全、代码清理
安全修复:
- PBKDF2迭代次数从100k提升至310k(OWASP 2023 SHA-512标准)
- 密码最小长度从8位提升至12位
- sanitizeProviderData正则加强:data:协议拒绝而非部分移除,
  on\w+事件处理器更严格,javascript:加单词边界防止误匹配
- withFileLock错误处理改为重新抛出,不再静默吞错误
- 后端interval上限校验(MAX_INTERVAL_MS)确保配置一致性

功能修复:
- 重命名performHealthChecks/performScheduledHealthChecks方法,
  明确区分初始化检查和定时检查的职责
- generateUUID回退方案兼容Node.js <14.17.0
- 凭据无expiry字段时强制刷新(安全措施)

代码清理:
- 移除未使用的RETRY.DEFAULT_RETRIES常量
- 添加定时健康检查完整英文i18n翻译
2026-04-03 02:56:34 +08:00
Wenaixi
740f930f34 fix: 深度代码审查修复——空队列泄漏、XSS防护、docker代理清理
- fix(provider-pool): 修复 ownsGlobalSlot=false 时空队列未清理的内存泄漏
- fix(provider-api): 新增 sanitizeProviderData/ProviderPools,对 customName 等用户输入字段做 HTML 转义,防止 XSS
- fix(docker): 删除 docker-compose.yml 中的代理硬编码配置
- fix(api-server): 重构定时健康检查 timer 管理,支持热更新 enabled 状态(stopHealthCheckTimer + 状态变化追踪)
- fix(constants): 提取 HEALTH_CHECK/PASSWORD/NETWORK/RETRY 常量到 constants.js
- style(api-server): 移除日志中密码长度记录,防止敏感元信息泄露
2026-04-03 02:56:34 +08:00
hex2077
617109f887 feat(grok): 添加WebSocket图片生成支持与多图并发处理
- 新增 WebSocket 图片生成服务类,支持流式生成图片
- 在常规 API 失败时自动回退到 WebSocket 方式生成图片
- 支持单次生成超过2张图片时自动拆分为并发请求
- 改进图片生成参数处理,支持返回 base64 格式图片
- 更新版本号至 2.12.2.2
2026-04-03 02:56:34 +08:00
hex2077
791303325b fix(grok): 修复流式响应中图片渲染和思考块处理问题
- 修复流式响应中图片 URL 被截断的问题,通过缓冲区累积完整 URL
- 改进卡片附件处理,支持从 cardAttachmentsJson 解析并渲染图片
- 优化思考块逻辑,避免在正式内容开始后显示无意义的内部注释
- 修复思考块未正确关闭的问题,确保格式完整性
- 更新文档中的模型列表,将 Qwen Code 替换为 Codex
2026-04-03 02:56:33 +08:00
Wenaixi
9d4864dfed fix: 修复代码审查发现的5个安全与正确性问题
- pbkdf2Sync 改为异步避免阻塞事件循环 (auth.js, config-api.js)
- 路径遍历检查改用 path.resolve 验证绝对路径在 cwd 内 (config-api.js)
- _activeInterval 移出配置对象避免序列化到 JSON (config-api.js, api-server.js)
- 删除 performScheduledHealthChecks 中冗余的 isDisabled 二次检查 (provider-pool-manager.js)
2026-04-03 02:56:33 +08:00
Wenaixi
fca9413f26 fix: 修复架构性问题——并发计数、文件锁、输入校验、密码哈希
- fix: provider-pool-manager: activeProviderRefreshes 计数器修复,情况1(已有队列)不持有全局槽位,通过 ownsGlobalSlot 闭包变量精确控制递减时机,防止出现负值
- fix: provider-api: 为 handleAddProvider/handleUpdateProvider/handleDeleteProvider/handleDisableEnableProvider 添加模块级 Promise 链文件锁(withFileLock),防止并发读写同一 JSON 文件导致数据丢失
- fix: config-api: handleUpdateConfig 添加输入类型校验——SERVER_PORT 校验整数范围、REQUEST_MAX_RETRIES 校验数值范围、SYSTEM_PROMPT_FILE_PATH 禁止路径遍历(含..)、REQUIRED_API_KEY 限定字符串类型
- fix: config-api/auth: 密码改为 PBKDF2(SHA-512, 100000轮) 哈希存储,格式 pbkdf2🧂hash,验证使用 timingSafeEqual 防时序攻击,兼容旧明文格式平滑迁移,并增加最小长度 8 位校验
- 所有修改均使用 Node.js 内置 crypto 模块,无新依赖
2026-04-03 02:56:33 +08:00
Wenaixi
a97b05dd2d fix: 修复代码审查发现的10个安全与正确性问题
- fix: provider-pool-manager: 移除 if(true) 占位符,改为读取凭据文件真实过期时间
- fix: provider-pool-manager: Math.min 展开大数组改为 reduce,防止栈溢出
- fix: provider-pool-manager: forceRefreshToken 调用前检查方法是否实现,不存在则 fallback
- fix: provider-api: handleAddProvider 默认路径统一为 configs/provider_pools.json
- fix: config-api: handleGetConfig 改为白名单字段过滤,REQUIRED_API_KEY 脱敏返回
- fix: api-server: 启动日志中 API Key 遮码处理
- fix: utils: generateUUID 改用 crypto.randomUUID() 替代 Math.random()
- fix: config-manager: renderProviderTags innerHTML 加 escHtml 防 XSS 注入
- fix: config-manager: PROVIDER_POOLS_FILE_PATH 未定义时加 || '' 兜底
- fix: section-config.css: white 改为 var(--bg-primary, white) 支持暗黑模式
- chore: .gitignore 添加 AGENTS.md
- chore: docker-compose.yml 添加代理环境变量
2026-04-03 02:56:33 +08:00
Wenaixi
801917b478 fix: 修复审查发现的3个问题
1. api-server.js: 更新过时的 performHealthChecks(true) 调用
   - 方法签名改了,不再接受 isInit 参数
   - 改为 performHealthChecks()

2. i18n.js: 更新描述以匹配实际行为
   - '留空则检查所有供应商' -> '留空则不进行任何检查'

3. provider-pool-manager.js & provider-api.js: 移除死代码
   - _checkProviderHealth 从不返回 null
   - 移除对 result === null 的检查
2026-03-31 22:46:30 +08:00
Wenaixi
714aee54bd docs: 添加设计决策注释说明有意为之的行为变更
- performHealthChecks: 如果没有选择任何 provider types 则不进行检查
- _checkProviderHealth: 不检查 per-provider checkHealth 标志,统一由 providerTypes 控制
- interval 验证: 后端不设最大值,允许通过 API 设置超长间隔
2026-03-31 22:37:27 +08:00
Wenaixi
bacf2baf40 chore: 移除 performHealthChecks 中未使用的 isInit 参数 2026-03-31 12:23:12 +08:00
Wenaixi
9f45e77448 fix: 修复健康检查的两个关键bug
1. 修复双重计数usage的问题:
   - 移除 _checkProviderHealth 中的 markProviderHealthy 调用
   - 使用量计数现在只由调用方处理

2. 修复热重载timer时的竞态条件:
   - reload时重置 isHealthCheckRunning 标志
   - 避免reload期间运行时导致新timer被跳过
2026-03-31 11:54:27 +08:00
Wenaixi
642c498544 fix: 如果没有选择任何provider types则不进行健康检查,而不是默认全选 2026-03-31 01:43:19 +08:00
Wenaixi
b2bb744916 chore: 更新健康检查注释,反映简化后的逻辑(只依赖providerTypes,不使用per-provider checkHealth flag) 2026-03-31 01:42:00 +08:00