Skip to content

v2.0.6

Choose a tag to compare

@github-actions github-actions released this 29 Jul 08:04
· 3 commits to main since this release

第三轮全量审计 P0–P3 全部闭合(N-01 ~ N-40)

2.0.6 收口 2026-07-29 第三轮全量静态审计(详见 docs/AUDIT_2026-07-29_全量.md)的全部可修项——P0/P1/P2/P3 逐条修复,每项独立 commit、全量 go test ./... 绿、审计文档内逐条 ✅ 标注 commit 号。按修复面归纳:

  • 正确性 / 计费:half-open 探测名额泄漏致渠道永久卡死(N-01)、turn_finalized 事件携带 ModelID/Provider 修复 dashboard 误标 CalibrationAnomaly(N-12)、anthropic 无参工具 input_schema 归一化(N-03/N-23)、AwaitShell 实现真正阻塞等待而非一次性快照(N-04)、@docs 上传抓取页面正文入库(N-21,复用 safehttp SSRF 防护)、EventID 分隔符 ::\x1f 消除 requestID 含 :: 时的跨 ID 计费串账(N-38)。
  • 路由 / 排障:放宽 401/403/404 failover 让 BYOK per-channel key 失效可切备用(N-02/F-07)、全候选熔断时保留并透传真实失败原因而非只剩 "circuit open"(N-39)、IsAvailable 改纯只读消除排序期提前触发 Open→HalfOpen 的副作用与并发双探测隐患(N-40)。
  • 崩溃一致性:A6 Cursor settings.json 接管/还原/崩溃恢复一致性加固(N-10/N-11/N-25/N-26/N-57)。
  • 性能热路径:工具 args 字段搜索增量偏移消除每 delta 全扫 O(n²)(N-07)、文本/思考 delta 累加改 strings.Builder(N-27)、artifacts 热路径 RWMutex 读锁 + debug 关闭短路(N-09)、消除 appendConversationEntries 双重克隆(N-05)、publishCheckpoint 合并重复 ProjectPromptReplay 投影(N-06)、usage_store 合并 Lookup+Upsert 为单次读改写(N-28)、GetThoughtAnnotation miss 回退按 recency 扫描并命中即短路(N-29)。
  • 云端一体化透传(默认关):codebase/docs 面新增 CredentialOriginalCursor 透传选项(N-33/N-35),默认仍全本地,仅当用户在「按路由面覆盖」显式设为直连才生效。
  • 可观测性:OpenAI Responses 加密 thinking 占位文案诚实化——本地无法解密的加密推理显式标注而非伪造明文(N-34);UsageDashboard 路由切走清理 setInterval 泄漏(N-37)。

未修项(架构决策 / 非纯代码)在审计文档中标注为待办,不阻断本次发版。

小米 MiMo 上下文窗口数据修复(消除 25K/128K 分母错误)

  • 问题:用户反馈小米 MiMo(如 mimo-v2.5-pro)在 Cursor 右下角显示 "25K/128K",但小米官方上下文窗口实际是 1M。根因:内置 contextWindowByModelID 表把小米 v2.5 系列全标 128_000——小米 /v1/models 端点不返回 context window 字段(大多数 OpenAI 兼容 provider 的通病),在线回退源 models.dev 又没收录小米,错误值无法被纠正,fetch-models 把错的 128K 回填给 Cursor。
  • 实测确认:直连 api.xiaomimimo.com 问模型本身,mimo-v2.5 / mimo-v2.5-pro / mimo-v2.5-pro-ultraspeed 均自报 1,000,000mimo-v2-pro / mimo-v2-flash 已下线("Unsupported model"),但保留并改 1M 与 v2.5 系列同口径,老配置渠道命中也合理。
  • 修复internal/client/model_context_window.go 小米块 4 条 128_0001_000_000,新增 mimo-v2.5-pro-ultraspeed。用户重新「获取模型列表」或重启后,分母显示为 1M("25K/1M"),比例恢复正常。
  • 关于 25K 分子:一句话对话就 25K 不是 bug——这是 Cursor 客户端本地估算的当前会话上下文占用(含 Cursor 自己注入的系统 prompt + 工具定义,本身就 10-20K token),与 cursor-switch 无关。分母 128K 才是 bug,已修。
  • 测试model_context_window_test.go 3 场景——MiMo 系列返回 1M / 带后缀变体候选匹配仍命中 1M / 硬断言不得回退 128K 错误值。

额外参数 / 自定义请求头教学文档

  • 问题:模型编辑器的「额外参数 JSON」「自定义请求头 JSON」字段大部分用户不会配也不理解,配错要么被静默丢弃(F-19 denylist)要么导致请求失败,此前没有任何教学。
  • 修复:新增 docs/额外参数与自定义请求头配置.md,README + README_EN 顶部文档条 + 主要功能「模型配置」段链接过去。内容含:字段语义、F-19 黑名单(stream/model/messages/input/tools/tool_choice/system/instructions/metadata 不可覆盖;Authorization/x-api-key/Host/Cookie 不可设)、验证过的常用配置(OpenAI service_tier / 采样参数 / 中转自定义识别头 / Cloudflare 头 / API 版本头)、值必须是字符串的坑、与「获取模型列表」的关系、常见误区。所有示例均对齐实际校验规则(validateHeadersJSON 值必须字符串、blockedCustomHeaders/blockedExtraParamKeys 大小写不敏感)。