Skip to content

v2.3.0

Choose a tag to compare

@zhuweiyou zhuweiyou released this 03 Oct 04:30
· 18 commits to main since this release
1ad9db7

【新增】

  • 流式工具调用稳定 index 归一:上游常不下发 index(实测 10 轮中 12/36 帧缺失),现按 choice 独立维护映射,保证同一调用 index 稳定、不同调用不串线。已线上验证:一次请求返回两个并行调用,index 正确为 0/1。
  • response.test.js:新增 51 个用例,覆盖完成判定、工具索引、SSE 分块边界、背压、尾段 usage。
  • zen.test.js:新增 11 个用例,覆盖门禁条件、字段透传、危险键名、session 生命周期。
  • 请求门面校验:model 非空字符串、messages 非空数组,不合法直接 400 且不请求上游。
  • 危险键名过滤:__proto__ / constructor / prototype 不转发给上游。
  • 有界缓冲与超时分层:建连 60s、首帧 30s、空闲 120s、尾段 1s;无内容帧缓冲上限恒定,异常刷屏时内存保持 O(1)。
  • 多 choice 按 choice 独立判定:修「一个 choice 先 finish 吞掉其余 choice」。

【修复】

  • 修正正文被篡改:main 会剥离正文里的 <think> 标签和 thinking 词句。实测 main 下 "I am thinking about it" 被截成 "I am";本分支正文原样保留。
  • 修正多行 data: 帧丢内容:实测 main 解析为空串,本分支正确得到内容。
  • 修正截断伪装成成功:main 流式无条件补 [DONE],断流也会被当作正常完成。
  • 修正网络中断裸抛异常:main 遇 socket 错误直接抛未捕获异常,现归一为响应层错误。
  • 修正 finish_reason 归一:带工具调用却标 stop 时归一为 tool_calls(对齐 opencode 官方)。
  • 修正 reasoningEffort 别名:恢复 camelCase → snake_case 规范化。
  • 修正模型列表超时被误吞:超时不再伪装成其他错误。

【删除】

  • tests/node/thinking.test.js(301 行,10 个用例):随「正文剥离 think 标签」功能一并移除。相关保留语义(reasoning 归一、reasoning_effort 透传)已迁入 response.test.js / zen.test.js。
  • 正文 think 标签剥离逻辑:stripThinkBlocks / createOpenAIStreamNormalizer 等导出移除,正文不再被解析。
  • x-opencode-project: global 请求头:已实测无影响(真实请求 200)。

【变更】

  • 门禁工具 5 个 → 2 个:bash/edit/glob/grep/read 精简为 bash/read(已验证最小集,真实联调通过)。
  • UA:去掉 ai-sdk/provider-utils/... runtime/bun/... 后缀,仅保留 opencode/1.18.31。
  • 建连超时 5 分钟 → 60 秒。
  • 请求构造改为整体透传:main 只挑 8 个字段显式转发。
  • 异常响应状态码变化:截断、畸形 JSON 从 200 变为 429(见下方附注)。
  • .gitignore:忽略 .vercel(本地项目关联)和 .env*(环境变量,防密钥泄露)。