v2.0.6
第三轮全量审计 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,000。mimo-v2-pro/mimo-v2-flash已下线("Unsupported model"),但保留并改 1M 与 v2.5 系列同口径,老配置渠道命中也合理。 - 修复:
internal/client/model_context_window.go小米块 4 条128_000→1_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.go3 场景——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不可设)、验证过的常用配置(OpenAIservice_tier/ 采样参数 / 中转自定义识别头 / Cloudflare 头 / API 版本头)、值必须是字符串的坑、与「获取模型列表」的关系、常见误区。所有示例均对齐实际校验规则(validateHeadersJSON值必须字符串、blockedCustomHeaders/blockedExtraParamKeys大小写不敏感)。