Releases: 822807097/codex-router
Release list
v1.13.1 · R4 发布复审修复(CSRF 防线收紧等 20 项)
v1.13.0 发布后的第四轮 ocr 自动复审(33 文件)产出 22 条 findings,其中 20 条属实全部修复,2 条经评估缓办(理由记录在审查报告)。
安全
- CSRF 防线收紧:
localhost/[::1]形态的 Origin 此前不校验端口,本机其他应用承载的页面可绕过跨站防线——现在三种回环 host 形态全部钉死到服务自身端口 - 旧版 macOS 隧道凭据文件(XDG 遗留路径,可能权限宽松)启动时自动清理
修复
- native 透传路径换 key 时冷却记录补读错误体:无 retry-after 头的耗尽型 429 不再落 5 分钟兜底冷却
- 诊断保真:通道缺密钥等终态配置问题不再因「错误形态替换」从诊断面板消失(客户端应答形态不变,另发替换事件留痕)
- 冷却解析链统一:模型级冷却 observe 复用 resolveQuotaRetryAt,消除双解析漂移
- 小数秒时间戳(12:44:16.123Z)时区误判、智谱 1310 错误码/北京时区偏移魔数具名化
- restore-custom.sh:孤儿顶层键(只有 model_catalog_json 无配套 provider)自动修复;[model_providers.router] 段改为刷新写回——段内容更新可经脚本生效
- restore 脚本 awk 锚点统一允许前导空白,与 JS 参考实现对齐
验证
node --check 全通过;restore 脚本三场景冒烟(孤儿修复/段刷新/幂等跳过);路由回归(healthz/非流式/流式工具)全绿。
完整审查报告: 见仓库 issues/ discussions 或本地 reviews 目录
v1.13.0 · Anthropic 兼容层与 Claude Desktop 网关 + 密钥池请求内换 key
主要新特性
Anthropic Messages 兼容层(Claude Desktop 第三方网关接入)
/v1/messages完整实现:SSE 流式状态机(thinking/text/tool_use 块)、工具调用、goal 参数安全截断- Claude Desktop 管理器:暴露模型白名单、role-form 别名(对齐官方模型目录 v831 在册 ID + labelOverride)、上下文/1M 变体按模型配置、探活多模型回退、面板一键重启
- 面板新增 Claude Desktop 卡片:状态/测试/暴露配置/别名/模型选项
通道密钥池增强
- 请求内换 key:一把订阅 key 撞 401/429 无缝切下一把(与官方账号池同构预算制),全池烧尽自动降级候选通道
- 分型冷却:突发限流 20s(retry-after 优先)、真实耗尽冷却到重置点(智谱中文报文按 UTC+8 解析周/月重置时间)、未知类型维持 5min
- 429 错误形态保真:池冷却的限流信息不再被兜底通道的缺钥 401 顶替
档位与上下文
- 推理档位全链路收敛:minimal/none→low,xhigh/max/ultra→high(官方 Responses 与 chat 上游均不接受越界档位)
- zhipu_thinking 二档映射、chat↔responses 桥接 reasoning 透传
修复
- 30 项 ocr 自动审查修复(2 high:ROLE_POOL 槽位耗尽别名空串、冷却分类器把 Google 每分钟配额误判耗尽)+ 管理端点 HTTP 方法守卫(GET 铸 key、GET 重启桌面端)
- 子代理对抗审查修复:exec 桥源流错误黑洞(进程崩溃级)、非流式 CJK 多字节解码、开放模式 CSRF 防线、官方账号池烧尽降级、探活定时器泄漏等
- restore 脚本与 JS 参考实现对齐(保留 [model_providers.router] 段,防旧会话打不开)
提交: 84ac97c
v1.12.1 · 原生门面工具补强
新增
- set_clipboard / get_clipboard:门面原生剪贴板读写(大段文本输入替代 type_text;命令行全固定字面量,文本走 stdin/临时文件,不进命令行)
- screenshot_screen:全屏/多屏截图(整个虚拟桌面,PNG 以 MCP image content 直返)
- wait_for(windows-computer-use 插件侧):轮询等待应用出现/消失指定文本,带预算竞态保护(单次桥调用挂起不会拖穿等待预算)
修复
- 门面执行面断链(重要):目录解析有桌面 config.toml 兜底而执行面没有——tools.mcpServers 未声明 windows_computer_use 时,门面所有 CU 工具调用在生产会落空;现目录与调用同源兜底(活体发现)
升级
- 无破坏性变更;chatgptWeb.nativeTools.enabled=false 仍为一键回退
v1.12.0 · 网页池原生 MCP(WebPool 2.0)
v1.12.0 · 网页池原生 MCP(WebPool 2.0)
本版本把网页池账号的工具能力升级为原生 MCP 通道:联网搜索 / 电脑操作以真·工具调用经官方安全隧道直达网页会话,工具截图自动回注对话,并带来按日聚合的指标面板与三步设置向导。全量测试 1045/1045 通过。
✨ 全新特性
原生工具通道
- 网页池账号可改走「网页连接器 → 官方安全 MCP 隧道 → 本机隧道客户端 → 路由门面(127.0.0.1)→ 现有工具执行面」的原生链路,不再靠文本协议翻译工具调用。
- 官方隧道客户端由路由自动托管:自动下载(HTTPS + 域白名单 + SHA256 校验)、启动、守护、异常退避重启。
- 逐账号开关:只有显式开启的账号走原生链路,其余账号照走文本协议。
- 空答 / 工具不可用泄漏自动降级回文本协议 30 分钟(TTL 到期自动重试),任务永不中断。
截图回注
- 电脑操作等工具产生的截图先上传、再以官方图片指针回注进网页会话,模型能「看见」自己操作的结果。
- 上传失败自动回落纯文本描述,不阻塞任务。
指标聚合与面板
- 新增按日聚合的原生 / 协议 / 降级 / 裁决 / 上传与门面调用计数(
GET /_admin/api/webpool/metrics)。 - 订阅页新增原生工具卡片与三步设置向导,配合一键自探(
POST /_admin/api/webpool/native-selftest)逐段校验门面 → 隧道 → 账号链路。
工具目录单一事实源
- 工具目录收敛为单一事实源,桌面端 MCP 插件、网页池文本协议注入与原生门面共用同一份工具定义,不再各自维护。
安全加固明细
- 门面 fail-closed:未配置
ROUTER_MCP_BEARER时拒绝监听,杜绝裸奔端口;仅回环 + JSON content-type 强制 + 拒绝带 Origin 请求(浏览器 CSRF 防线)+ Bearer 校验四层闸门。 - 隧道纯出站:不需要任何入站端口;下载走 HTTPS 域白名单并拒绝环回 / 私有 / 保留 IP 字面量。
- 下载校验:客户端压缩包按官方 SHA256SUMS 逐字节校验,缓存命中复算哈希比对。
- 日志脱敏:隧道 stderr 输出先做密钥剥离(Bearer 值 / 平台 Key / URL key 段 / 长 base64 串打码)再进日志。
- 电脑操作单飞队列:桌面单一资源排队执行,超时放弃不破坏互斥。
📋 启用前提(三步,前两步为人工项)
- 网页端:开启开发者模式并创建连接器(Connector),远程 MCP 地址填面板向导给出的门面 URL。
- 开发平台:创建 Tunnel 与 Runtime Key(权限只需 Tunnels Read + Use),写入系统环境变量
CONTROL_PLANE_TUNNEL_ID(tunnel_+ 32 位十六进制)与CONTROL_PLANE_API_KEY,并设置门面口令ROUTER_MCP_BEARER。 - 面板:订阅页原生工具卡片开启开关 → 点「自探」→ 按提示重启路由。
说明:连接器创建与 Tunnel 凭据申请必须人工完成,面板向导只负责指路与校验;个人账号的写工具能力边界以官方政策为准,超出边界时自动降级回文本协议兜底。详细配置键与端点见 docs/ADVANCED.md「网页池原生工具模式」(英文版 ADVANCED.en.md)。
⬆️ 升级与回退
- 升级:拉取本版本后重启路由即可,新增能力默认关闭、不影响现有行为;面板可检查更新一键升级。
- 一键回退:把
config.json的chatgptWeb.nativeTools.enabled改回false(或不在配置中写该键)并重启路由,即完全回到文本协议链路;逐账号开关也支持只对单个账号停用。
v1.11.0 — 桌面端 MCP 插件面板化、官方后端 09-12 适配、40+ 审计修复
重要适配
官方后端 2026-09-12 变更(本版本最重要的修复):
- SSE content-type 失真兜底:官方响应头不再标 event-stream,此前导致 usage 统计丢失(output 恒 0)、响应历史失效、大请求内存暴涨(实测 25 分钟 4GB)。现按响应首块正文嗅探判型,全部恢复。
- previous_response_id 已被官方移除:增量续聊默认关闭(config.json
officialIncremental.enabled: true可显式开启),运行时连续拒绝自动熔断,拒绝原因落日志。上游恢复后一行配置重开。 - store 强制 false:不再给官方请求强设 store。
新功能
- 桌面端 MCP 插件面板化管理:设置页新增「桌面端 MCP 插件」卡片,直接管理 config.toml 的
[mcp_servers.*](Codex 官方插件机制)——列表/启停(官方 enabled 键)/连接探测(真实拉起测工具清单)/增删改,识别官方全键位,兼容 codex++ 生态插件的 MCP 部分。含 Windows 电脑操作插件的路径提示。 - 网页池工具链增强:工具结果回注头尾截断(防吃满会话历史)、桥接轮次可配(
tools.maxBridgeRounds,默认 8,耗尽显式标注)、协议块宽容解析(尖括号变体识别)+ 坏块计数兜底(不再静默空响应)、注入开关(tools.webPoolInject)。 - 带认证代理端到端支持:SOCKS5 RFC 1929 用户名密码子协商 + HTTP CONNECT Proxy-Authorization,代理节点组装修复(socks5/http 账号密码、ss base64url 形态)。
- Windows 运维脚本修复:status/stop/restart 在 Git Bash 下此前形同虚设(lsof 不存在、SIGTERM 不投递)——跨平台端口探测助手、stop 委托 PowerShell 控制台事件、watchdog 维护标记生命周期闭环(stop 不再被 watchdog 拉起、标记残留不再永久静默守护)、restart 优雅窗口可配(
ROUTER_RESTART_GRACE_SEC,默认 120s)。
审计修复(40+ 项,三轮对抗自查)
- 核心链路:429 冷却分型覆盖全部路径(chat/桥接通道不再误封账号 30 分钟);官方增量回退基线快照(原实现发出 delta-only 请求静默丢上下文);增量缓存 64MB 上限(原无上限可 OOM);工具桥走 transport 统一出口(代理/中止/销毁守卫);死循环熔断器思考模型盲区修复(reasoning 项中断收集导致最需要防护的模型族裸奔);工具调用帧 id/index 撕裂归并;done-only 响应正文补发;转换链路 8MB 守卫。
- 管理面:账号代理/优先级落库(原重启即丢);fetch-models 改 revision CAS(原裸写并发丢更新、损坏目录按空池重建);模型删除联动入互斥锁;探针 key 死行清理;vault 写盘 0600;路径脱敏正则修复。
- 支撑层:谷歌桥工具名配对修复;会话同步原子写;TOML bearer token 完整转义 + 校验器转义检查;热力图时区口径统一;检查点 close 竞态;MCP 测试端点 spawn 容错(不再打穿进程熔断)。
- 面板:跨页测速卡死、密钥池编辑堵死、侧栏/设置页假状态与过期版本号、账号代理回显、弹窗移动端适配、中文 locale、接入示例跟随真实端口。
升级说明
- 拉取后
bash scripts/restart-router.sh(或面板优雅重启)即可;增量续聊关闭无需配置变更。 - 面板产物已随版本重建(设置页可核对版本 v1.11.0 与构建指纹)。
v1.10.8 — 桌面端慢操作进度提示
改进
「恢复官方直连」(~30 秒)、「重启 ChatGPT 桌面端」(~10 秒)、「修复历史会话」(~30 秒)执行期间此前只有按钮转圈,没有文字说明——用户会以为页面卡死。
现在三个操作都会显示分阶段进度文案 + 已进行秒数(如「正在迁移历史会话记录(会话多时需要半分钟)…(已 18 秒)」),按各阶段真实耗时推进,完成或失败即消失。
配合 v1.10.7 的超时放大(等待不再中途报错),慢操作从「黑盒等待」变成「可见的推进过程」。
Full Changelog: v1.10.7...v1.10.8
v1.10.7 — 恢复官方直连/重启桌面端按钮修复(慢接口超时放大)
修复
「恢复官方直连」「重启 ChatGPT 桌面端」按钮报失效:
两个接口的后端一直正常(实测 restore-official 成功返回 200),但耗时较长——恢复流程含桌面端会话迁移(4000+ 线程实测 ~30 秒)、重启要等进程排空(~10 秒),而前端沿用全局 15 秒超时:前端提前报错,服务端仍在后台写完配置——按钮看起来「失效」。
- 恢复官方直连 / 会话同步超时放大到 180 秒,重启桌面端放大到 60 秒;
- 顶栏「网关重连中」横幅不再被前端超时误触发(超时≠网关下线),改为明确的超时提示。
对照
与 v1.10.2 修复的「应用并接入路由」超时是同一病根(该接口当时已放大到 180 秒),本版把同类慢接口一次修齐。
Full Changelog: v1.10.6...v1.10.7
v1.10.6 — 自我审计修复批(注记时序 / 余量选号 / 面板保存链)
修复
本轮对路由核心改动、管理面板表单与 UI/UX、开源用户全流程做了三路并行自我审计,修复如下(完整清单见 docs/audit-2026-09-11.md):
运行时
- chat 通道:v1.10.5 的正文缓冲引入了官方调用注记的时序回归(注记被排到正文之后),已修复;
- 账号池:余量选号在最高优先级账号全体额度耗尽时会"磨死干涸账号"——现在耗尽账号自动让位给有余量的同伴;
- acquireAccount 并列轮询路径返回取错属性导致偶发 undefined 的缺陷一并修正。
管理面板
- 「保存压缩设置」此前只提交服务端强制压缩字段,默认压缩阈值的修改被静默丢弃——已接线并同时保存两者;
- 「编辑模型」的上下文窗口支持 k/M 简写(1M/272k),解析失败显式报错而非静默丢字段;
- 「编辑分组」的接口地址变更现在批量下发到同地址全部兄弟通道(谷歌一键接入的多通道场景路由不再分裂);
- OAuth 手动导入默认直连,不再预填 127.0.0.1:10808 死代理。
文档
- README 补充 Windows 执行策略放行命令、修正 npm start 措辞;ADVANCED 同步实际默认值。
Full Changelog: v1.10.5...v1.10.6
v1.10.5 — DeepSeek 思考模式会话级 reasoning_content 校验漏网形态修复
修复
v1.10.4 的 reasoning_content 回传存在漏网形态。桌面端每轮的真实形状是:
[reasoning 思考 → assistant 正文 → 工具调用 → 工具输出]
v1.10.4 把思考挂给了同轮的正文消息,导致同轮的工具调用消息依然缺失 reasoning_content。真实会话(96 条消息、含电脑插件 function_call 混合 custom_tool_call)实测:DeepSeek 思考模式做会话级一致性校验——只要任何一条 assistant 消息缺失该字段,整条请求即被 400 拒绝(单条缺失的最小复现反而能通过,这也是 v1.10.4 测试未能发现的原因)。
修复
- 同轮 reasoning + assistant 正文 + 工具调用合并为单条 assistant 消息(DeepSeek 原生形态:content + reasoning_content + tool_calls 同条);
- 思考会话中缺失字段的 assistant 消息自动补空串,保证全量覆盖;
passBackReasoning: false行为不变。
验证
用桌面端真实 rollout 重建完整失败对话:修复前转换结果必 400,修复后 200。
Full Changelog: v1.10.4...v1.10.5
v1.10.4 — DeepSeek 思考模式工具调用修复 + sub2api 式余量选号
修复
1. DeepSeek 思考模式多轮工具调用 400
deepseek-v4 系思考模式要求历史 assistant 消息携带 reasoning_content,缺失直接报:
The
reasoning_contentin the thinking mode must be passed back to the API.
桌面端多轮工具会话从第二轮起必现。路由现在会把历史里的思考链(reasoning 项)挂回同轮 assistant 消息回传给上游;passBackReasoning: false 可对不兼容上游关闭。
2. 账号池调度对齐 sub2api
- 余量感知选号:同优先级下优先使用周窗余量最大的账号(快照缺失/超 8h 按中性处理,并列维持轮询)——主动分流优于 429 后被动换号;
- 突发 429 冷却 60s → 15s:非窗口耗尽的限流恢复更跟手(窗口真实耗尽仍冷却到上游重置点,见 v1.10.3)。
升级说明
重启路由进程即生效,无需改配置。
Full Changelog: v1.10.3...v1.10.4