dsh-keine:DSH 对话记录的撤回与编辑重发(图片不丢)

前言

在 DeepSeek Harness(DSH)里做智能体或多轮调试时,会话日志是 append-only 的:说错的提示词、配错的图会一直留在上下文中,后续每一轮都会被污染。官方提供的是整段压缩(/compact),没有单条消息级别的撤回或改字重发。社区里也有删除、分支重发类插件,但常见问题是重发时把内容写成纯文本导致图片丢失,或只遮住文本行而图片气泡仍留在界面上。下面介绍一款面向 web 客户端的插件 dsh-keine,用官方 surface-replace 契约做「吞食历史」与「创造历史」,并在编辑重发时保留原有图片附件。

这是什么

dsh-keine 由 SaigyoujYuyuko 维护,归类为 DSH 客户端插件。名字取自《东方 Project》的上白泽慧音;插件定位是:为 DSH 对话记录提供撤回整轮和编辑后重发,且图片附件随消息一起走,不单独丢通道。

带图消息在日志里对应一个 user/message 事件,内容由图片块与文本块组成;插件据此实现「吞掉消息 = 吞掉图片,重发消息 = 图片原样引用 attachmentId」,无需重新上传。

核心功能

操作 效果
吞食历史(撤回整轮) 从所选消息到会话末尾整段遮蔽:用户消息、模型回复、工具调用、过程行一并离开表面上下文
创造历史(编辑重发) 遮蔽同样区间后,用修改后的文字与原有图片通过 agent.followup() 开启新回合
改图 编辑弹窗中可预览缩略图、移除图片(✕)、添加图片(+ 或粘贴);新图走官方附件入库

遮蔽使用官方 surfaceOp: { op: 'replace', startSeq, endSeq },与 /compact 同一套契约;载体记录 sourceEventSeqs 便于追溯被遮蔽的 seq。原始事件与 ~/.dsh/attachments 中的对象并未从磁盘删除——对模型不可见,对本地日志仍是 append-only。

安装与启用

安装命令以仓库 README 为准:

# 从 GitHub 装
dsh plugin --profile web add github:SaigyoujYuyuko/dsh-keine

# 或者本地开发(link,改完代码重启即生效)
dsh plugin --profile web add link:/path/to/dsh-keine

装完后需要完全重启 dsh,再对页面做硬刷新。宿主侧只在启动时读取插件树;客户端 bundle 按文件 mtime 缓存,仅刷新页面不一定能加载到新 bundle。

package.json 声明:node 引擎 >=22,插件对 DSH 的要求为 >=0.1.7-rc.1;README 记载在 DSH 0.2.0-rc.2(web profile,Windows)上实测。许可证为 MIT。

典型用法

  1. 鼠标悬停在你自己发送的消息上,气泡下方控制条会出现 ✎(编辑重发)和 ↩(撤回)。
  2. 点 ↩ 并确认后,该轮及其之后的内容从表面上下文中消失。
  3. 点 ✎ 打开弹窗:改文字、删图或粘图,再选择「保存并重发」。

按钮仅在悬停时显示,平时不占界面空间。

适用场景与注意

适合谁: 经常在 web profile 下调试长对话、需要改某条用户消息或撤回从某轮到末尾整段、且消息里带图片的 DSH 用户。

边界(README 原文要点):

  • 不是隐私擦除工具:原始日志与附件文件仍在本地。
  • 「撤回」范围是从当前消息到会话末尾,不是只删单轮。
  • 只能在已打开的会话上操作。
  • 没有「反撤回」;append-only 下若要还原需从原始日志重建。
  • 编辑重发时若 agent.followup() 失败,遮蔽可能已发生——同类插件的共同代价。

插件以当前 dsh 进程权限运行,安装前建议自行阅读源码与 MIT 许可证。DSH 生态理念是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-keine 把单条级别的撤回与编辑重发补到 DSH web 客户端,并透过官方 surface-replace 与内容寻址的 attachmentId 避免图片在重发时丢失。进一步了解可看目录页与源码:

  • 目录页:https://www.skillhub.cn/plugins/SaigyoujYuyuko/dsh-keine
  • GitHub:https://github.com/SaigyoujYuyuko/dsh-keine
羽毛球分组比赛记分
小程序二维码

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

Xiaoye