@xsj/dsh-rewind:DSH 会话回退到任意用户消息

前言

在 DSH 会话中,一条用户消息发出后,后续内容会沿着这条消息继续展开。如果希望从某条用户消息处重新组织输入,同时不破坏已有会话日志,也不想让回退状态在进程重启后丢失,就需要一个在会话层面做回退的插件。

@xsj/dsh-rewind 提供这种能力:选择任意一条用户消息,将该消息及其后的内容从聊天视图和模型上下文中截掉;该消息文本回到输入框中,可编辑、可取消;发送后,模型只看到截断后的历史和新消息。

插件定位

@xsj/dsh-rewind 是 DSH 会话回退插件,由 XSJUSTC 维护,许可证为 MIT。

它以永久 bundle 插件形态提供,包含宿主机半和 Web 客户端半,无任何 npm 依赖。仓库地址:

https://github.com/XSJUSTC/dsh-rewind

核心能力

该插件在 DSH 的 Web 客户端会话中提供回退入口,主要能力如下:

  1. 每条用户消息的操作行中出现回退图标。
  2. 如果模型正在思考或输出,点击回退会立即打断当前回合。
  3. 被选择的消息及其后的所有内容会在聊天视图中隐藏。
  4. 被选择的消息文本会自动填入输入框,未发送,可编辑。
  5. 回退待发送期间,输入框上方出现提示横幅。
  6. 发送按钮左侧出现「取消回溯」入口,点击后恢复被隐藏消息,草稿保持不变,不发送任何内容。
  7. 发送后回退生效,被隐藏消息不再出现在聊天视图和模型上下文中。
  8. 仅用户消息可回退,DSH 助手消息没有回退入口。
  9. 会话日志保持 append-only 事件流,从不删除原始消息。
  10. 进程重启后打开会话,Host 半会回放回退记录,重建隐藏区间。

安装与启用

插件要求 Node.js 环境满足:

engines.node >=20

Client 半会通过 window.__ModuleLoader__ 从外壳的冻结模块表获取以下模块:

react
@deepseek-ai/dsh-client-ui-primitives
@deepseek-ai/dsh-client-ui-attachment

安装时,先把仓库克隆到本地,然后在任意目录执行:

dsh plugin --profile web add <本仓库目录的绝对路径>

这里的 <本仓库目录的绝对路径> 是占位符,需要替换为本仓库在本地磁盘上的克隆位置。

安装后,重启 DSH 进程,并刷新浏览器页面。

使用流程

  1. 在 DSH 的 Web 客户端中打开一个会话。
  2. 找到任意一条用户消息,点击其操作行中的回退图标。
  3. 如果模型正在思考或输出,点击回退会立即打断当前回合。
  4. 被选择的消息及其后的内容会从聊天视图中隐藏。
  5. 被选择的消息文本会填入输入框,此时尚未发送,可以继续编辑。
  6. 如果决定放弃回退,点击发送按钮左侧的「取消回溯」,被隐藏的消息会恢复,草稿保持不变,不会发送任何内容。
  7. 如果确认回退,直接发送当前输入框中的消息。
  8. 发送后,被隐藏的消息不再出现在聊天视图中,也不会再进入模型上下文。

日志与重启

该插件不会删除会话日志中的原始消息。会话日志仍是 append-only 事件流。

每次状态变化会追加一条 hook/invoked 事件,负载包含:

source: 'xsj.rewind'
phase: 'mark' | 'cancel' | 'commit'
targetSeq
hiddenFrom?
hiddenTo?
preview?

hook/invoked 事件类型属于本构建的已知保留词条,无读写方,重载安全。

进程重启后打开会话,Host 半会回放这些记录,重建隐藏区间,使模型侧与 UI 侧的隐藏状态跨重启保持一致。

卸载

执行:

dsh plugin --profile web remove @xsj/dsh-rewind

然后重启 DSH 完成卸载。

卸载后,会话日志中已有的 rewind 记录会无害保留。

使用注意

  1. 仅用户消息可回退,DSH 助手消息没有回退入口。
  2. 该插件会介入 DSH 会话的聊天视图和模型上下文,安装前建议检查源码、依赖和 MIT 许可证。
  3. 插件以当前 DSH 进程权限运行,应确认其运行环境和仓库来源可信。
  4. 安装命令中的路径必须指向本地仓库克隆位置,不能只写仓库名。
  5. 回退待发送期间可以随时取消,取消不会发送内容。

小结

@xsj/dsh-rewind 的价值在于让 DSH 会话中的用户消息具备可恢复的回退能力:可以从任意用户消息处重新输入,发送前可取消,发送后截断生效,同时保留 append-only 会话日志,并在进程重启后恢复隐藏区间。

仓库地址:

https://github.com/XSJUSTC/dsh-rewind
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜