@wengine-ai/llms 2.3.18 → 2.3.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -93,6 +93,7 @@ npm install -g @wengine-ai/claude-code-router-next@latest && ccr restart
93
93
 
94
94
  | 版本 | 发布内容 |
95
95
  | --- | --- |
96
+ | **v2.3.19** | <ul><li>**新增 OpenCode (opencode.ai) Transformer**: 为暴露 OpenAI 兼容 `/v1/chat/completions`、底层由 GLM/智谱驱动的 OpenCode 类 provider 新增专用 transformer,显式声明 `endPoint` 避免误触 bypass 把 Anthropic 格式工具发给 OpenAI 兼容接口;同时清理 GLM 不识别的 `cache_control`/`image_url`/`media_type`,转换 `reasoning_content` 为 thinking 格式,并把纯数字 `tool_call` ID 替换为 UUID。在 provider `transformer` 中配置 `"opencode"` 启用。</li><li>**设置页代理地址与 API 密钥输入框禁用浏览器自动填充**: 弹窗版与整页版设置的「代理地址」「API 密钥」此前会被 Chrome 用已保存表单数据/密码自动填充覆盖真实值;现在通过 `Input` 的 `disableAutofill` 提供随机 `name`、初始 `readOnly` 至首次聚焦解除、`autoComplete="off"` 及密码管理器忽略标记三重防护,并配合隐藏 honeypot 字段。</li></ul> |
96
97
  | **v2.3.18** | <ul><li>**模型族长上下文阈值继承主路由配置**: `ccr-opus`/`ccr-sonnet`/`ccr-haiku` 的 family routing 未配置族级阈值时会继承 `Router.longContextThreshold`,避免主路由设为 100k 时约 70k token 请求仍误进 `<family>/longContext`。</li><li>**fallback 候选模型也执行 Double-Check 重试**: 每个 fallback 候选第一次 `fetch failed`/空 SSE/隐藏错误后会先对同一候选重试一次,第二次仍失败才切到下一个,降低智谱等接口短暂不稳定导致的过早切换;同时修正失败记录的 `originalModel` 显示。</li><li>**全局配置保存后同步项目级 CCR 接管字段**: 跟随全局 Router 且已开启 CCR Takeover 的项目,在保存全局配置或切回使用全局配置时自动刷新 `.claude/settings.local.json` 中的模型族别名、auto-compact、状态栏与代理字段。</li><li>**默认降低日志量并保留最近 7 天**: 服务器日志默认级别从 `debug` 调整为 `error`,只在显式配置 `LOG_LEVEL=info/debug/trace` 时输出详细日志,并自动清理超过 7 天的 `ccr-*.log`。</li></ul> |
97
98
  | **v2.3.17** | <ul><li>**修复 fallback 触发时所有备用模型报 Invalid URL**: 主模型限流(如智谱套餐)触发 fallback 后,此前所有备用模型都报 `Invalid URL`;根因是 fallback 用了原始 `ConfigProvider[]`(无 `baseUrl`)而非已注册的 `LLMProvider[]`,改为 `providerService.getProviders()`。</li><li>**修复 fireworks 托管上游用量统计全 0**: fireworks 流式把真实 usage 放在 `finish_reason` 之后的 `choices:[]` 空 chunk 里,此前 `finish_reason` 块用 null usage 覆盖了已 merge 的真实值、且 `break` 丢弃了后续 usage chunk,导致 `input` 有值但 `output`/缓存命中为 0;现改为 finish 后继续读取、只设 stop_reason 不碰 usage、`break` 改 `hasFinished=true`,并修复下游三层用量捕获与 `??` 对 0 不 fallback 的问题。</li><li>**忽略已删除模型的残留路由,防止健康池污染**: 从 provider 配置删除模型后,路由与 fallback 中残留的 `provider,model` 仍被当作有效候选反复失败污染健康池;现在对无法匹配的候选直接返回 `null` 并在请求前校验,`ProviderHealthStore` 统一拦截空 provider/model 防畸形 key 污染,同时抽取 `findProviderModel` 共用函数。</li></ul> |
98
99
  | **v2.3.16** | <ul><li>**修复 system 消息顺序兼容 DeepSeek/vLLM**: OpenAI 兼容提供商(DeepSeek V4、GLM、vLLM)要求 `[system, user, assistant]` 顺序,此前 system 排在 user/assistant 之后会导致输出乱码;现在将 system 消息前置并去重。</li><li>**接管时去除 Attribution 动态头以提升缓存命中**: CCR 接管 Claude Code 时默认写入 `CLAUDE_CODE_ATTRIBUTION_HEADER=0`,去掉系统提示词开头随请求变化的 attribution 头(客户端版本 + prompt fingerprint),稳定上游 prompt 缓存前缀;可在设置页或 `disableAttributionHeader: false` 关闭。</li><li>**设置页布局紧凑化**: 「日志级别」下拉从独占整行移入两列网格,与「API 密钥」并排显示,减少纵向留白。</li></ul> |
@@ -102,7 +103,6 @@ npm install -g @wengine-ai/claude-code-router-next@latest && ccr restart
102
103
  | **v2.3.12** | <ul><li>**修复定时唤醒未真正触发计费周期**:唤醒请求由 `max_tokens: 1` 的 dummy ping 改为真实推理 prompt 与 `max_tokens: 10`,确保 Coding Plan 类提供商产生实际 token 消耗并激活日额度周期。</li><li>**修复 Codex 等 `/messages` 端点唤醒 404**:以 `baseUrl` 是否包含 `/messages` 判断 Anthropic 协议,且 `baseUrl` 作为完整路径直接使用,不再拼接后缀。</li><li>**唤醒/探测请求增加来源头**:新增 `x-claude-code-router-source` 与 `x-claude-code-router-version` 请求头,便于上游识别 CCR 内部探测/唤醒流量。</li></ul> |
103
104
  | **v2.3.11** | <ul><li>**修复新会话首个请求绕过项目级路由(会话检测竞态)**:新会话的第一个请求(如标题生成元请求,比主请求早到约十几毫秒)到达时 session 转写文件可能尚未落盘,导致项目匹配失败、回退全局 `Router`,使该请求绕过项目级路由(如项目已关 `enableFamilyRouting` 仍走全局模型族路由)。现在缓存未命中时短延迟重试(最多 3×50ms)给文件落盘留时间,并保证每个 session 仅重试一次,避免非托管会话每请求都被加延迟。</li></ul> |
104
105
  | **v2.3.10** | <ul><li>**修复标题生成等元请求误触发 `think` 场景路由**:`thinking: {type: "disabled"}` 是真值对象,此前会被误判为"已开启思考"并路由到 `think` 模型;现在仅当 `thinking.type === "enabled"` 时才进入 `think` 场景,避免关闭模型族路由的项目仍被路由到全局 think 模型。</li><li>**修复主模型熔断且无 fallback 时返回空模型**:`Router.default` 因健康检查熔断且无可用 fallback 时,此前直接返回空模型导致合成 "provider not found" 错误;现在会跳过健康检查兜底重试主模型,让 Claude Code 收到真实上游响应并自行重试。</li></ul> |
105
- | **v2.3.9** | <ul><li>**Codex 代管理账号令牌自动刷新**:新增后台调度器(启动 60 秒后首次执行,之后每 30 分钟一次),自动检查所有 Codex 代管理账号——无论是否为当前激活账号——当 `access_token` 距过期不足 24 小时,或自上次刷新已超过 7 天时,自动用 `refresh_token` 换取新 token 并写回账号存储;若为当前激活账号,同时同步覆盖 `~/.codex/auth.json`。可通过 `Clients.codex.autoRefreshTokens` 关闭(默认开启)。</li><li>**运行时 fallback 重试未遵循项目级 `enableFallback` 修复**:请求实际发出后失败(如限流)触发的重试 fallback 此前直接读取全局 `Router.enableFallback` 与全局顶层 `fallback` 配置,忽略项目级 `enableFallback: false` 与项目自定义 `Router.fallback`;现在运行时重试与路由阶段使用同一份项目级 fallback 配置。</li></ul> |
106
106
  > 仅保留最近 10 个版本,更早版本的发布摘要见 [CHANGELOG-archive.md](./CHANGELOG-archive.md),完整详细变更记录见 [CHANGELOG.md](./CHANGELOG.md)。
107
107
 
108
108
  ### 2. 配置