Skip to content

v3.9.36

Choose a tag to compare

@github-actions github-actions released this 17 Sep 02:38
· 138 commits to master since this release

v3.9.36

这一版把 PR #271 合了进来,并落了六条独立审计线的成果:默认路径逐字节不变(270 组完整请求
Buffer 对拍,且这条现在由 CI 自动执行),无 API 破坏,ACU ^22 仍默认关。


用户可感知

并行工具调用之间的游离文本不再打断会话(#271,贡献者 @21hbguo)

Codex 的 Responses 路径每轮会在并行 tool_calls 之间重放一条 reasoning + 文本的 assistant 条目。
归一化后是 [call, call, text] 的同源 3 连,上游状态机拒——整个会话 500/529。现在这段文本被折进
首个调用回合的交错块里;两轮评审后又补掉三处:数组 content 不再被压平(图不再被静默丢弃)、
空 tool_call_id 不再与空结果配对、带自有字段(如 signature)的条目原样透传而不被折掉。

请求路径上的白给 CPU 被拿掉

  • 裸 API key 场景(默认)不再无条件计算响应缓存键——每请求省掉一次全量深拷贝 + sha256
    (仓库自测:400 条消息 1.09 ms、4 MB 图 2.96 ms);
  • /v1/messages 的 prompt 由逐字符走两遍变成一遍;
  • 上游请求编码器每字段只申请一次 Buffer;流式分帧在被拆包的大帧上由平方级变为线性
    (4 MiB 帧 152 ms → 0.9 ms);
  • 图片收缩不再为"量长度"而反复 base64(52 次 → 1 次)。

更少静默失败

  • 凭据库并发写不再可能静默丢记录(唯一 tmp + 串行化写 + 拒绝缩水式修复);写者中途死亡留下的锁
    可被安全回收(仅当同机 owner 确证已死);
  • 登录响应新增 credentialStored:要求存密码但实际没存上时,客户端能看见;
  • 流式失败的三个阶段(错误帧、[DONE]、日志)互相隔离,一个失败不再吞掉另一个;跨账号重试之间加了
    可取消的间隔(此前单请求可零间隔连打 9 次上游);
  • .env 行内注释告警不再把值打进日志;reveal-key 的账号邮箱改为遮罩。

安全边界收紧(全部默认关路径不变)

  • 账号的 apiServerUrl 变成上游主机时,只接受已知云端 origin(DEVIN_CONNECT_ACCOUNT_HOST=1 时生效),
    否则在发出任何上游请求之前拒绝,且该拒绝不消耗账号错误预算;
  • 凭据存储的"允许远程保存密码"判定改用可信客户端 IP(同机反代后不再误判);
  • 面板统计导入拒绝 __proto__/constructor 一类原型键。

工程与门禁

  • "默认路径字节不变"成为 CI 门禁:test/wire-byte-identity.test.js 对上一个 release 跑 270 组
    完整请求帧比较;缺基线不许静默跳过;
  • 5 个真实 Git 夹具文件从"本机常红"变成带原因的显式 skip,本机套件首次 0 fail;
  • npm run gate 一条命令跑本地门禁;突变 sweep 增加"VERDICT 数 == 规格数"断言;
    spec-baseline-audit 有了定时作业;secret-scan 覆盖未跟踪文件;docs 守卫只看已跟踪 markdown;
    测试发现改为递归(藏在子目录里的测试不再被静默忽略)。

验证

  • npm test 4575 pass / 0 fail / 77 skipped(skip 全部带原因);
  • 突变规格 68 份 / 678 条,anchor 全唯一、基线全实测;
  • 270/270 完整请求字节对拍(CI 执行);黄金帧哈希 12/12;secret-scan 干净;
  • 合入后另跑四路独立对抗审查(wire / 行为 / 安全图像 / 元声称):wire 6.4 万例差分零分歧;
    审查发现的 3 个真缺陷(凭据锁孤儿、登录误报、淘汰 O(n))与 2 处自审缺陷均已在本版修掉。

破坏性变更

无公开接口、路由、字段或默认开关的变化。