## 1.1.1 **三个修复共享同一条判断标准**:能被上游确定性拒绝、或能被静默吞掉的问题,不该留到线上才暴露。这一版把它们挪到本地,并且让失败说得清楚。 - **断流不再被当成正常结束**:上游在半路关连接(有内容、没有 `finish_reason`、也没有 `[DONE]`)时,旧实现落到 `mapFinishReason` 的 default 分支,只要有内容就返回 `stop`——半截回答被当作成功,DSH 不会重试,用户也不知道少了一段。现在缺 `finish_reason` 又缺 `[DONE]` 一律以 `TRANSPORT` 结束并计入失败;只发 `[DONE]` 不填 `finish_reason` 的网关仍按正常结束处理。 - **工具名不合法时点名**:Qoder 网关对含点号、斜杠、空格或超过 64 字符的工具名回确定性 400,错误里通常不说是哪个工具,表现成"这轮对话突然失败"。现在在发往上游之前校验,错误消息直接给出工具名与原因。历史里重复带同一批工具仍按去重处理,不算错。 - **面板请求有超时了**:宿主半死时 `fetch` 可以一直挂着,按钮永远 busy。数据请求统一 20 秒超时并给出可读原因;试跑那条路径沿用调用方的取消信号,取消行为不变。 ### 升级 tgz(推荐,可核对 SHA-256): ```bash dsh plugin --profile desktop add ./qoder-to-dsh-1.1.1.tgz ``` GitHub 直装: ```bash dsh plugin --profile desktop add github:Ianzhyh/qoder-to-dsh ``` 装完**完全退出 dsh 再打开**(插件在宿主启动时加载;只重开面板不会换掉已加载的代码)。 - 资产 SHA-256:`97360c220423f107ee239be7883ea1de915cec1b67ddf747be713695b586c80d`(32 个文件,575.6 KB) - 完整变更见 [CHANGELOG](https://github.com/Ianzhyh/qoder-to-dsh/blob/v1.1.1/CHANGELOG.md)。 ### 验证 - `npm run release:check` 全绿:模块语法检查 + 91 个用例 + 安装自检 11/11(`--offline`) - `npm run verify:release` 13/13:产物内 32 个文件齐全、`lib/config.mjs` 的 `VERSION` 与 `package.json` 一致、patch 名与包名一致、`tests/` 未混入 - 新增回归:截断流归 `TRANSPORT`、`[DONE]` 单独出现算正常收尾、工具名校验(合法名 / 点号 / 空格 / 超长 / 历史重复) > 这一版改变了失败语义:以前会被当作成功的截断回复,现在会以 `TRANSPORT` 结束。如果你的上游网关本来就不发 `finish_reason` 也不发 `[DONE]`,升级后会看到明确的中断提示而不是"正常"的空回答——那正是这次要暴露的问题。 > 非官方互操作实现,只使用你自己合法授权的 Qoder 账号;上游协议可能随时变化。失效时先看设置里的「诊断」页。