Repository navigation
0.4.3 — 文档与兼容矩阵(无行为变更)
支持 DSH 0.2.0-rc.2 —— 官方桌面版当前捆绑的构建,已实测。
本版没有逻辑改动(lib/*.js 与 0.4.2 的差异仅限版本字符串)。为什么还是发一版:npm 页面上的介绍是发布时烘进 tarball 的 README,只有重新发布才能刷新;这次把「它解决什么问题 / 功能 / 修了什么」重写了一遍。
顺带把 0.4.2 的修复一并带到最新版 —— 如果你此前在 DSH 0.2.0 上用过回退,务必升级。
0.4.2 修的是什么(重要)
症状:用过一次回退之后,该会话每一轮都失败,报错原文是
format v4 message requires a producer-owned source kind
而且跟你选哪个模型无关:切到别的模型、再切回来,都是一样的错。这个会话从此写不进任何东西。
根因:回退标记是一条 user/message,0.4.1 及更早版本给它盖的来源是 source = { kind: 'plugin', plugin: 'rollback' }。DSH 0.2.0 启用了会话格式 v4,v4 要求每条消息的来源 kind 必须由产生者持有(plugin:<名字> 这种拼写),于是编码时被 assertV4MessageSources 拒绝。真正致命的不是「被拒绝」,而是拒绝发生的位置:它在持久化 drain 里,不在 append 的调用栈上 —— append 已经返回成功,失败的批次却被留在写队列头部,此后该会话每一次写入都要重新编码同一批次、抛同一个错。
修法:标记改写成 source = { kind: 'plugin:rollback' },与 DSH 自己 v3→v4 迁移时给未登记插件分配的拼写一致。读取端同时接受三种拼写({plugin:'rollback'}、{kind:'plugin',plugin:'rollback'}、{kind:'plugin:rollback'})—— 日志是 append-only 的,升级前写下的标记必须继续被识别,否则那些轮次会作为幽灵重新出现。
安装
dsh plugin --profile desktop add @nianchu/dsh-rollback或者直接用本页的 dsh-rollback.tgz:
dsh plugin --profile desktop add file:C:\path\to\dsh-rollback.tgz装完重启 DSH。
不能与上游
@domitor-syh/dsh-rollback同时安装 —— 两者注册同一个插件 id(rollback)与同一个/rollback命令。请二选一。
验证
- 280 项单元测试全绿,27 项产物断言全过,构建可复现(重建后产物逐字节一致)
- 用真实的 v4 编码器验证(从官方桌面版 app.asar 抽出
@deepseek-ai/dsh-session-format-v3-to-v4@0.2.0-rc.2):新拼写在assertV4RowAdmission与releasedV4SessionFormatCodec.encodeEvent两个入口都被准入;旧拼写两处都被拒绝 - 在本机官方桌面版 DSH 0.2.0-rc.2 上实测:回退、回退后继续对话、重启前后预览一致