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
Wenaixi
e764075cd9
fix: 修复审查发现的两个问题
...
1. 移除 api-server.js 中重复的启动健康检查代码
2. 恢复 ClaudeConverter 和 OpenAIConverter 中对 googleSearch、url_context、googleMaps 扩展工具的支持
2026-03-31 01:23:22 +08:00
Wenaixi
9172401a50
fix: 简化健康检查逻辑,支持热更新interval,修复provider-tag点击问题
...
- 移除checkHealth per-instance flag,简化逻辑为只依赖providerTypes勾选
- performHealthChecks启动检查也遵循providerTypes过滤
- 优化健康检查日志:显示耗时、通过/失败计数
- 支持修改interval后热更新,无需重启(globalThis.reloadHealthCheckTimer)
- 移除openai-iflow选项(未注册的provider)
- 修复config-manager.js中scheduledHealthCheckProviders点击不生效问题
- providerTypes配置修改后下次检查自动生效
2026-03-31 01:14:44 +08:00
Wenaixi
df9a36291c
fix: 添加配置验证防止格式错误的数据
...
1. config-api.js: 添加 SCHEDULED_HEALTH_CHECK 结构验证
2. config-manager.js: 添加 interval 值范围验证 (60000-3600000ms)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-30 23:41:49 +08:00
Wenaixi
1bc193f5eb
feat: 添加定时健康检查供应商类型选择功能
...
类似启用代理的提供商,现在可以选择对哪些供应商类型进行定时健康检查
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-30 23:28:19 +08:00
Wenaixi
21c92ff214
fix: 修复定时健康检查两个bug
...
1. startupRun配置现在会在启动时立即运行健康检查
2. 修复快捷按钮重复绑定事件监听器的问题
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-30 23:20:07 +08:00
Wenaixi
129b4f688f
fix: 修复定时健康检查enabled检查bug
...
将scheduledConfig?.disabled改为!scheduledConfig?.enabled
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-30 23:13:47 +08:00
Wenaixi
1e7e391b0d
feat: 添加 SCHEDULED_HEALTH_CHECK 配置管理支持
...
允许通过 UI API 查看和修改定时健康检查配置
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-30 22:58:04 +08:00
Wenaixi
b6206a5d5c
feat: 添加定时健康检查功能
...
实现对供应商节点进行周期性健康测试,失败1次立即标记unhealthy
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-30 01:14:49 +08:00
hex2077
6eee878574
fix(gemini): 确保请求thinking时始终包含includeThoughts字段
...
当上游请求gemini-3的thinking功能时,可能未显式设置includeThoughts字段,
导致无法稳定接收thought parts。添加兜底逻辑,在检测到thinkingLevel或
thinkingBudget非零时自动设置includeThoughts=true,确保思考功能正常工作。
2026-03-29 20:40:45 +08:00
yin1245
88523e099c
fix: use per-model context window size for accurate input_tokens estimation
...
Different Claude models have different context window sizes:
- Opus 4.5/4.6: 1M tokens
- Sonnet 4.5/4.6: 200K tokens
- Haiku 4.5: 200K tokens
The current implementation uses a single hardcoded TOTAL_CONTEXT_TOKENS
constant for all models, which causes input_tokens to be overestimated
for small-context models or underestimated for large-context models.
This change adds a MODEL_CONTEXT_TOKENS mapping and a helper function
getContextTokensForModel() that selects the correct context window size
based on the model being used, falling back to KIRO_CONSTANTS.TOTAL_CONTEXT_TOKENS
for unknown models.
2026-03-29 12:31:46 +08:00
wsyh4567
4ee01706aa
fix: Responses API 工具调用事件格式错误导致 Codex CLI 无法多轮工作
...
修复 6 个问题:
1. requestId 未传入 convertStreamChunk, 每个 chunk 生成新 UUID,
导致 state 不共享, response.completed 时 fullText 为空
2. TOTAL_CONTEXT_TOKENS=1000000 但 Claude 实际上下文只有 200K,
token 数虚报 5 倍触发异常压缩
3. 默认模型名硬编码为 gpt-4.1-2025-04-14
4. 工具调用参数事件类型用了 response.custom_tool_call_input.delta,
应为 response.function_call_arguments.delta
5. response.completed 的 output 只有空 message, 缺少 function_call 项,
Codex 收不到工具调用结果无法进入多轮
6. 缺少 response.function_call_arguments.done 和工具专属
response.output_item.done 事件
2026-03-28 11:40:29 +08:00
hex2077
9bbde40e4c
fix(provider): 修复令牌刷新机制中的并发和状态问题
...
修复 provider-pool-manager 中令牌刷新逻辑的多个问题:
- 将最大刷新次数从 3 更正为 5 以匹配注释
- 添加防并发机制,避免同一节点重复刷新
- 刷新成功后统一重置 needsRefresh、refreshCount 并记录 lastRefreshTime
- 在 Grok 服务中添加重置刷新状态的调用
- 防止 30 秒内的重复刷新请求
这些更改解决了因 401 错误滞后导致的重复刷新、状态不一致以及节点被过早标记为不健康的问题。
2026-03-26 12:32:09 +08:00
yin1245
a362243fdd
fix: update TOTAL_CONTEXT_TOKENS to 1M for Kiro context window upgrade
...
Kiro has upgraded its context window from 173k to 1M tokens. The hardcoded
TOTAL_CONTEXT_TOKENS: 172500 causes input_tokens in the converted Claude
SSE response to be severely underestimated (~17% of actual value).
input_tokens is calculated as:
totalTokens = TOTAL_CONTEXT_TOKENS * contextUsagePercentage / 100
inputTokens = totalTokens - outputTokens
With the old 172500 constant, a request with real input of 169,944 tokens
gets reported as ~35,000 tokens, causing downstream billing systems to
undercharge by ~5x.
2026-03-25 19:29:54 +08:00
hex2077
d345ec67b7
fix(provider): 清除刷新标记避免节点卡死并更新模型列表
...
当 provider 报错时,清除 needsRefresh 和 refreshCount 标记,防止健康检查逻辑陷入刷新循环导致节点卡死。同时更新 provider-models.js 中的模型列表,添加 gpt-5.4-mini 模型,并更新项目版本号至 2.11.8。
2026-03-25 12:48:54 +08:00
hex2077
d15de54e79
chore: 移除Grok API的初始使用量同步调用
...
移除初始化时自动获取使用量限制的逻辑,避免因API调用失败导致的警告日志干扰
2026-03-20 22:57:56 +08:00
hex2077
19b81381b8
Revert "refactor(grok): 移除流式请求重试逻辑并简化错误处理"
...
This reverts commit 807e3670b1 .
2026-03-20 22:56:27 +08:00
hex2077
807e3670b1
refactor(grok): 移除流式请求重试逻辑并简化错误处理
...
移除 generateContentStream 方法中的重试机制及相关辅助方法,将错误处理简化为仅处理认证错误。版本号更新至 2.11.7.1。
2026-03-20 22:45:46 +08:00
hex2077
46038a5459
feat: 优化OAuth授权流程并更新UI样式
...
- 在OAuth授权成功页面添加倒计时自动关闭功能,提升用户体验
- 改进授权弹窗通信机制,支持postMessage方式主动关闭窗口
- 更新Gemini OAuth回调页面,添加提供商标识和跨窗口通信
- 重构Grok API错误处理和重试逻辑,增强网络稳定性
- 修改头部组件购买链接为AI账号购买,并更新对应样式
2026-03-20 22:39:52 +08:00
hex2077
2a3312df15
feat(providers): 更新 Claude Kiro 版本并增强 Grok API 重试机制
...
- 升级 Claude Kiro 版本至 0.11.63 并更新 AWS SDK 版本
- 为 Grok API 添加统一的重试机制,支持 429/5xx 状态码和网络错误
- 在 Claude Kiro 请求头中添加 agentTaskType 和 x-amzn-codewhisperer-optout
- 优化 Grok 错误处理,网络错误时触发凭证切换但不增加错误计数
2026-03-20 20:52:00 +08:00
hex2077
82c667ac5d
fix(gemini): 修复认证初始化顺序和令牌刷新逻辑
...
调整 initializeAuth 方法中凭证加载和令牌刷新检查的顺序,确保在评估令牌过期前已加载凭证。添加 isTokenExpiringSoon 方法用于主动检查令牌过期状态,防止使用即将过期的令牌。同时修复 Antigravity 服务中模型别名转换的逻辑错误。
2026-03-16 22:54:45 +08:00
hex2077
e62cc8278a
feat(gemini): 添加 Gemini 2.5 Flash 系列模型支持
...
更新 provider-models.js 以包含新的 Gemini 2.5 Flash 系列模型标识符。
同时,将 antigravity-core.js 中的默认回退模型从可用模型列表的第一个元素硬编码为 'gemini-3-flash',以提高默认行为的可预测性和稳定性。
2026-03-16 19:53:02 +08:00