Commit graph

123 commits

Author SHA1 Message Date
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
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
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
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
hex2077
602c6be836 feat: 增强TLS sidecar支持并更新模型列表
- 扩展TLS sidecar配置,支持按提供商启用和设置上游代理
- 更新gemini-antigravity提供商模型列表至最新版本
- 修复JSON schema转换中数组type的处理以兼容Google Gemini API
- 为所有主要提供商集成TLS sidecar支持
- 修复CodexConverter中系统消息重复问题
- 改进gemini-core的错误处理和请求头设置
2026-03-16 18:26:16 +08:00
Ömer Burak Dağlı
0969fad37e fix(grok): avoid blocking first request on usage sync 2026-03-14 18:12:46 +03:00
hex2077
90ffd83c78 fix(grok): 移除请求体中的tools字段以兼容API
Grok API不支持tools参数,在构建请求负载时主动删除该字段,避免调用失败。
2026-03-13 12:13:19 +08:00
hex2077
f82b781214 perf(provider-pool-manager): 优化节点评分算法以提升选择性能
- 重构 _calculateNodeScore 方法,简化评分逻辑并减少重复计算
- 提前计算池中最小序列号,避免排序时重复 O(N) 计算
- 统一新鲜节点和普通节点的评分基准,确保轮询公平性
- 更新版本号至 2.11.4.1
2026-03-12 16:08:35 +08:00
hex2077
0bef99ef4f feat(upload-config): 添加配置文件下载功能并显示节点状态
- 新增配置文件下载 API 端点,支持安全下载 configs 目录下的文件
- 在用量管理界面为每个实例添加下载按钮,可直接下载关联的授权文件
- 在配置文件管理界面添加下载按钮,支持单独下载配置文件
- 为关联节点显示健康状态标签(正常/异常/禁用),使用不同颜色区分
- 更新 Claude Kiro 模型映射,修正 sonnet-4-5 模型名称
- 添加相关国际化翻译和样式支持
2026-03-11 11:29:13 +08:00
hex2077
f2f02b365f refactor(providers): 重构 Codex 认证刷新机制以支持后台异步刷新
- 将直接调用 refreshAccessToken 改为调用 initializeAuth(true) 以统一认证流程
- 新增 triggerBackgroundRefresh 方法,在 token 即将过期或收到 401 时异步触发刷新
- 移除多处重复的 PoolManager 标记逻辑,统一由 triggerBackgroundRefresh 处理
- 优化 initializeAuth 方法,仅在需要时加载凭证,避免不必要的阻塞
- 更新版本号至 2.11.0
2026-03-09 19:00:15 +08:00
hex2077
8fb4d59b23 fix(openai): 修复 prepareRequestBody 异步调用问题并添加监控钩子
将 prepareRequestBody 方法改为异步以支持插件钩子调用,修复因缺少 await 导致的潜在问题。同时添加内部请求转换监控钩子,便于跟踪请求处理流程。
2026-03-08 22:23:43 +08:00
hex2077
7726ca1f38 fix(openai): 修复fast模型上游请求中模型名称错误问题
确保传给上游的模型名称正确移除-fast后缀,避免因模型名称不匹配导致的API调用失败。当检测到fast模型时,会记录转换日志以便追踪。
2026-03-08 22:11:38 +08:00
hex2077
d9396ef56c fix(openai): 修复推理努力参数在快速模型上的设置
当使用快速模型时,始终使用默认的推理努力值,而不是从请求体中读取。这确保了快速模型的一致性行为。
2026-03-08 21:36:40 +08:00
hex2077
dd8f30f5a8 fix(openai): 修复fast模型后缀处理逻辑
修复模型名称处理逻辑,使其能够正确处理大小写不敏感的"-fast"后缀。使用正则表达式进行匹配,避免因大小写问题导致的模型识别错误。
2026-03-08 21:19:07 +08:00
hex2077
76e8a81b3d fix: 修复非 priority 服务层级时错误传递 service_tier 参数
当 service_tier 不是 'priority' 时,从请求体中删除该字段,避免向 OpenAI API 发送无效参数。
2026-03-08 21:10:43 +08:00
hex2077
4715acf5db fix(grok): 修复媒体模型请求负载中缺少enable_nsfw和aspect_ratio字段的问题
移除图像模型toolOverrides中冗余的disableNsfwFilter设置,统一在构建请求负载时处理NSFW逻辑。对于非视频的媒体模型,现在会正确添加enable_nsfw字段,并支持从请求体传递aspect_ratio参数。
2026-03-08 20:47:34 +08:00
hex2077
3f3c9e1a45 feat: 新增模型支持并扩展功能配置
- 添加 Gemini 3.1 Flash Lite 模型到 provider-models 和别名映射
- 扩展 Codex 转换器以支持 reasoning 配置和服务层级传递
- 为 Codex 模型添加 -fast 后缀变体,自动设置优先级服务层级和高推理强度
- 扩展 Grok 模型以支持 -nsfw 后缀变体,并添加账户级 NSFW 设置流程
- 放宽 Gemini 模型思考功能检测条件以包含所有 gemini-3 系列模型
2026-03-08 20:20:16 +08:00
hex2077
25bcb5a232 feat(oauth): 新增 Codex Token 批量导入功能并优化 OAuth 服务器关闭逻辑
- 添加 Codex Token 批量导入功能,支持 SSE 实时进度显示
- 统一各 OAuth 服务器关闭逻辑,添加超时机制和错误处理
- 更新 Codex 支持的模型列表,添加 gpt-5.4 模型
- 优化 Codex API 版本管理,修复模型回退逻辑
- 添加前端批量导入界面及多语言支持
2026-03-06 12:46:12 +08:00
hex2077
8947f93471 refactor: 移除 Ollama 协议支持并重构模型路由
- 删除 Ollama 协议相关代码,包括处理器、转换器、文档和常量
- 重构模型列表获取逻辑,支持 auto 模式下的多提供商聚合
- 新增 token 计算工具函数,统一各提供商 token 计数逻辑
- 改进模型前缀路由解析,增强 auto 模式的健壮性
- 更新多语言文档,移除 Ollama 相关内容
2026-03-03 23:09:04 +08:00
hex2077
05df61df74 feat: 添加 TLS Sidecar 支持并重构前端提供商配置系统
- 新增 TLS Sidecar 功能文档,支持绕过 Grok 等服务的 Cloudflare 403 封锁
- 重构前端提供商配置管理,实现动态配置缓存和统一数据源
- 升级配置文件管理界面 UI,优化信息展示和交互体验
- 改进 Claude Kiro 工具调用流式响应,实时推送 content_block 事件
- 修复 Codex 配额重置时间格式问题

主要变更:
- README 文档新增 TLS Sidecar 配置说明和使用指南
- 新增 tutorial-manager.js 模块,动态渲染 OAuth 授权路径
- routing-examples.js 支持动态生成路径路由示例卡片
- upload-config-manager.js 重构列表项布局,支持节点关联信息展示
- config-manager、models-manager、usage-manager 统一使用提供商配置缓存
- i18n 新增多语言翻译键,更新 Gemini 模型版本信息
2026-03-03 20:05:51 +08:00
hex2077
698c6e11d3 fix(codex): 修复凭据刷新和过期时间处理逻辑
- 记录加载凭据的路径,确保刷新后写回同一文件
- 修复 token 刷新时过期时间字段名错误(expired vs expire)
- 增加 expiresAt 有效性检查,防止 NaN 导致刷新永不触发
- 优化凭据保存路径逻辑,避免读写不一致问题
2026-03-02 22:11:45 +08:00
hex2077
0b071f261d feat(converter): 为Grok协议添加完整的转换支持
- 在GeminiConverter、ClaudeConverter和OpenAIResponsesConverter中增加toGrokRequest方法
- 扩展GrokConverter以支持向Gemini、OpenAI Responses、Codex等协议的响应转换
- 移除IFLOW_API适配器的注册以清理未使用的代码
- 修复Grok媒体URL处理中不必要的SSO令牌追加逻辑
2026-03-02 19:47:43 +08:00
hex2077
3f8fdc0b8e feat(grok): 使用 UUID 替换 SSO token 进行资源代理以提高安全性
- 在 Grok 资源代理接口中优先使用 UUID 获取 token,避免 token 泄露在 URL 中
- 为 ProviderPoolManager 添加 findProviderByUuid 方法,支持通过 UUID 查找配置
- 重构 GrokConverter,将 SSO token 依赖改为 UUID 依赖
- 更新 VERSION 文件至 2.10.2.1
2026-03-02 00:14:37 +08:00
hex2077
c91d2ce3ab feat(grok): 添加资源代理功能并优化用量显示
- 新增 Grok 资源代理接口,将 assets.grok.com 的资源通过本地代理访问
- 在请求处理中注入 requestBaseUrl 配置,供转换器生成正确的代理链接
- 统一各提供商核心服务中删除 _requestBaseUrl 字段的逻辑
- 优化 Grok 用量显示逻辑,支持按 token 或 query 显示剩余额度
- 更新 UI 管理器,允许 /api/grok/assets 接口免认证访问
- 改进 Grok 转换器,在流式输出中智能处理被截断的 URL
2026-03-01 23:55:07 +08:00
hex2077
517120a000 fix: 修复Claude内容处理和iFlow模型验证问题
- 修复ClaudeConverter中字符串内容处理逻辑,确保字符串能正确转换为OpenAI格式
- 移除claude-kiro.js中重复的内容处理代码,避免重复计算tokens
- 修复iFlow模型验证逻辑,当模型不存在时使用默认模型
- 优化插件状态提示信息,使用通用的"已启用/已禁用"翻译
2026-02-28 17:52:45 +08:00
hex2077
81dd6a3f86 feat(tls): 添加 Go uTLS sidecar 以绕过 Cloudflare TLS 指纹检测
- 新增 Go 语言编写的 TLS sidecar 服务,使用 uTLS 库模拟 Chrome 指纹
- 在 Dockerfile 中添加多阶段构建以编译 sidecar 二进制文件
- 扩展配置系统,支持启用/禁用 sidecar 及自定义端口
- 修改 Grok 提供商,使其请求可通过 sidecar 转发
- 在前端界面添加 TLS sidecar 配置选项和国际化支持
- 服务启动时自动启动 sidecar,关闭时优雅停止
2026-02-28 00:02:12 +08:00
hex2077
89e80148d0 fix(grok): 禁用 HTTP/2 协商以适配 axios
axios 底层仅支持 HTTP/1.1,强制协商 h2 会导致服务端返回的 H2 帧解析失败。将 ALPN 协议列表修改为仅 'http/1.1' 以确保连接兼容性。
2026-02-27 22:32:11 +08:00
hex2077
f0445d96e4 feat(grok): 模拟 Chrome TLS 指纹以绕过 Cloudflare 检测
- 引入 TLS 模块并配置 HTTPS agent 以精确匹配 Chrome 136 的加密套件、签名算法和 ALPN 顺序
- 更新默认 User-Agent 至 Chrome 136 并动态生成更真实的 Statsig ID
- 优化请求头,根据 UA 自动填充 sec-ch-ua 系列字段,增强指纹一致性
- 移除调试日志并调整 Cloudflare 令牌缺失的日志级别
2026-02-27 22:23:48 +08:00
hex2077
68719879c5 feat(architecture): 重构适配器注册机制并引入并发控制系统
建立可扩展的提供商适配器注册表,实现动态服务发现与插槽管理:

架构改进:
- 采用 Map 注册表替代 switch-case 硬编码,支持热插拔适配器
- 实现 acquireSlot/releaseSlot 机制,精确追踪活跃请求与等待队列
- 新增节点评分算法,综合考量并发数、队列长度、健康状态

核心能力:
- 支持并发限制与队列等待,避免单节点过载 (concurrencyLimit/queueLimit)
- 实现 Fallback 链式调用,429 错误自动切换备用凭证
- 添加请求级 IP 追踪,日志格式优化为 `clientIp:requestId`

配套更新:
- 管理界面新增并发/队列配置字段与 Grok 逆向提供商选项
- 用量查询服务扩展 Grok 支持,同步剩余查询次数 (固定总量 80)
- 新增并发测试脚本 (tests/concurrent-test.js),支持自定义并发数与 RPM 限制

配置项:
- GROK_COOKIE_TOKEN, GROK_CF_CLEARANCE, GROK_USER_AGENT, GROK_BASE_URL
2026-02-26 18:19:38 +08:00
lly835
022e345d68 fix: 修复同会话跨模型缓存键不命中问题
移除 prepareRequestBody 中非 default sessionId 时的 model 前缀拼接,
使同一会话内切换模型时能复用缓存,与注释中'弱化 model 依赖'的设计意图一致。

Closes #328
2026-02-26 01:18:32 +08:00
hex2077
ed8b889586 fix: 确保工具结果消息内容在转换时被正确序列化
- 修复 OpenAIConverter 中工具结果消息内容为对象时未序列化为字符串的问题
- 修复 ClaudeConverter 中工具结果消息内容为对象时未序列化为字符串的问题
- 修复 Kiro 提供程序中工具描述为空时导致请求失败的问题
- 更新 README 文档,添加 Kiro 扩展思考和提供商优先级配置说明
- 清理过时和未使用的测试文件以保持代码库整洁
2026-02-20 19:52:50 +08:00
何夕2077
f16f972d97
Merge pull request #320 from Asoubra12/pr/kiro-extended-thinking-slim
feat(kiro): add extended thinking passthrough and structured reasoning outputs
2026-02-20 19:27:04 +08:00
hex2077
71372495e0 feat(gemini): 添加 gemini-3.1-pro-preview 模型支持
在 provider-models.js 和 antigravity-core.js 中添加了新模型 gemini-3.1-pro-preview 的配置,使其可用于 gemini 和 gemini-antigravity 提供商。同时更新了模型别名映射,确保模型标识符能正确映射。
2026-02-20 19:18:15 +08:00
hex2077
fbc5357519 feat(claude): 添加 claude-sonnet-4-6 模型支持
更新模型列表和映射以支持新的 Claude Sonnet 4.6 模型。
2026-02-18 22:19:04 +08:00
hex2077
55879396c8 feat(converters): 为请求添加 metadata 支持并优化会话缓存
- 在 CodexConverter 和 ClaudeConverter 中增加 metadata 字段,透传上游元数据
- 重构 CodexApiService 的缓存键生成逻辑,优先使用 session_id 或 conversation_id
- 从上游请求体中移除 metadata 避免透传,仅用于生成缓存键
2026-02-15 11:21:26 +08:00
hex2077
105bb39c1a fix(provider-pool-manager): 优化节点选择策略,防止序列号导致长期排挤
引入相对序列号机制,计算节点序列号相对于池中最小序列号的偏移量并封顶,避免全局自增序列号在长时间周期内对节点选择造成过度惩罚,确保公平性。同时修复重置节点时未清零序列号的问题。
2026-02-14 23:20:39 +08:00
hex2077
f27c9d8732 fix(providers): 统一错误日志格式并修复提供商模型引用
修复多个API服务中错误日志格式不一致的问题,统一使用error.message替代data字段
修正多个提供商模型引用方式,使用MODEL_PROVIDER常量替代硬编码字符串
更新Codex API请求头配置,修复流式响应处理逻辑
为iFlow API添加签名验证机制,增强请求安全性
添加GLM-5和MiniMax M2.5等新模型支持
修复400错误状态码检查逻辑,使用error.response?.status替代error.code
2026-02-14 19:54:53 +08:00