Repository navigation
v3.9.36
·
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 test4575 pass / 0 fail / 77 skipped(skip 全部带原因);- 突变规格 68 份 / 678 条,anchor 全唯一、基线全实测;
- 270/270 完整请求字节对拍(CI 执行);黄金帧哈希 12/12;
secret-scan干净; - 合入后另跑四路独立对抗审查(wire / 行为 / 安全图像 / 元声称):wire 6.4 万例差分零分歧;
审查发现的 3 个真缺陷(凭据锁孤儿、登录误报、淘汰 O(n))与 2 处自审缺陷均已在本版修掉。
破坏性变更
无公开接口、路由、字段或默认开关的变化。