Skip to content

v0.4.3

Latest

Choose a tag to compare

@ZhaoZeW ZhaoZeW released this 06 Oct 07:42
· 1 commit to main since this release

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 上实测:回退、回退后继续对话、重启前后预览一致

完整说明:https://github.com/ZhaoZeW/dsh-rollback#readme