## 1.1.0 **这一版的主题是开销**:每条消息的连接握手、模型首屏为目录等待、启动时为扫账号阻塞、以及每次请求体编码的字符串拼接,四个都在请求路径上,合起来就是「点什么都要等一下」的观感差。现在它们都不在关键路径上了。 - **聊天 SSE 走持久连接**:Node `fetch`(undici)默认约 4 秒回收空闲连接,而两条消息的间隔通常更长——旧路径等于每条消息重做一次 TCP + TLS 握手。改用 keep-alive Agent 后与官方 CLI 行为一致;服务端主动断开时仍正常重连,插件卸载时释放空闲连接。 - **模型目录先返回、过期后台刷新**:命中缓存时 `prepareCall` 只是内存查表,过期只触发后台刷新,并发调用合并成一次;显式刷新仍等待上游。后台拿到新目录后会通知 DSH 选择器更新,不需要重开。 - **启动不在主线程扫本机账号**:桌面端 DPAPI key 改为后台子进程预热,首次签到或账号页才读取候选账号;启动预热的判据从 `status().signedIn` 改成 `client.auth`。 - **凭据与用量异步落盘**:PowerShell DPAPI 调用移到子进程,不再占主事件循环;用量记录内存合并后异步写入,不阻塞消息结束(正常退出仍同步补写)。 - **请求体编码走 Buffer 码表**:签名热路径不再逐字符做 Map 查找与字符串拼接,改成分段哈希,避免为算 MD5 把整个请求体拼成一个大字符串。 - **修掉一个切换账号的竞态**:切换或退出时在途的目录请求仍会返回,旧结果过去可能盖掉新账号的目录。现在按 generation 丢弃,并允许新账号立即发起自己的刷新。 - **自动签到不再拖慢事件循环**:签到路径直接用 `client.auth` 取当前账号与区域,不再调用会扫描本机账号的 `status()`。 ### 升级 tgz(推荐,可核对 SHA-256): ```bash dsh plugin --profile desktop add ./qoder-to-dsh-1.1.0.tgz ``` GitHub 直装: ```bash dsh plugin --profile desktop add github:Ianzhyh/qoder-to-dsh ``` 装完**完全退出 dsh 再打开**(插件在宿主启动时加载;只重开面板不会换掉已加载的代码)。 - 资产 SHA-256:`9e3a9981758b1e2a871d1435a1d434c5114f6d48cbf65fdbccafcaffe1620d00`(32 个文件,573.9 KB) - 完整变更见 [CHANGELOG](https://github.com/Ianzhyh/qoder-to-dsh/blob/v1.1.0/CHANGELOG.md)。 ### 验证 - `npm run release:check` 全绿:模块语法检查 + 87 个用例 + 安装自检 11/11(`--offline`) - `npm run verify:release` 13/13:产物内 32 个文件齐全(含 `lib/baseprompt.json` 58.2 KB)、`lib/config.mjs` 的 `VERSION` 与 `package.json` 一致、patch 名与包名一致、`tests/` 未混入 - 新增回归:keep-alive 连接复用、SSE 逐帧下发、挂起请求的中止与 socket 释放、目录 generation、用量合并写、Buffer 码表编码与码表外字符的等价性 > 非官方互操作实现,只使用你自己合法授权的 Qoder 账号;上游协议可能随时变化。失效时先看设置里的「诊断」页。