dsh-redo:编辑或重试已发送消息并原地重新生成

前言

DeepSeek Harness(DSH)是一个 append-only 的会话系统:消息一旦发出去,原生没有”改一下再发”的入口。dsh-redo 把这件事补上——选中任意一条自己发过的消息,改文字、删图、加图,或者原样再来一次,模型上下文会原地回到那条消息之前并重新生成,而不是开一个新会话。

这是什么

dsh-redo 是一个 DSH 客户端插件,由 Imzl-zl 维护。它的核心价值是:在不新建会话、不重开对话的前提下,编辑或重试已发送的用户消息,并原地重新生成。

DSH 0.2.x 系列中,消息一旦提交即追加到会话日志,没有撤销或重写的原生入口。dsh-redo 通过扩展点实现了一个完整的”撤回重发”流程:选中的消息连同它的回答立刻从对话里消失,文字和图片回到底部输入框,改完正常按发送就开始新的问答。

核心功能

  • 重新生成:任意一条用户消息都能重发,不限于失败的消息——一键,不经过输入框。
  • 编辑重发=点一下就地撤回:那条消息连同它的回答立刻从对话里消失,不再回来;文字和图片原样回到底部输入框,改完正常按发送就开始新的问答。用的就是原生 composer,不是插件自己的弹窗。
  • 图片跟着走:存的图读回字节、重新挂成草稿,发送时一起上送;文件附件除外。
  • 旧内容真正离开上下文:被重写的区间由 surface replace 遮蔽,旧消息和它之后的回答不再进入模型请求。
  • 整轮从时间线撤掉:被重写的那一轮——你的消息、回答、工具卡、用量行——当场消失,新消息落在同一个位置,看起来就像这条消息原地重新生成。/redo 命令卡也一起隐藏。刷新后依然如此:区间是从会话日志的 surface replace 读回来的,不靠内存。
  • 原生操作行:时间、复制、重新生成、编辑重发排在一起,尺寸、圆角、间距、悬停行为对齐原生。
  • 破坏性操作有确认:撤回中段消息前会提示「之后的 N 轮对话会离开上下文」;输入框里本来有内容时再问一句是否替换。
  • 不会误触发:撤回只影响你点的那条消息及其之后;其余会话、其余窗口不受影响。
  • 生成中禁用:回答还在生成时两个按钮置灰,先停止再重发——不会把重发塞进输入框的排队区。

不支持

  • 文件附件:prompt 的文件通道只接受本次会话上传换来的 receipt,客户端没有”按引用读取旧文件”的 RPC,所以带文件的消息两个按钮置灰,而不是静默丢内容。
  • 太久以前的撤回不留痕:区间是从事先加载的会话窗口里读的。一次重写如果发生在很早以前、已经落到窗口之外,刷新后那批旧消息会重新出现——模型上下文仍然是对的,丢的只是界面上的「撤掉」。
  • 命令行手动输入 /redo 也会被藏:命令卡按「它撤回的目标是否已被遮蔽」判断,插件发起的和你手敲的记录长得一样,所以一起隐藏。
  • 账本里仍留着原文:会话日志是只追加的,撤回追加一条 replace,不删原来那行。对模型和界面都已生效,但 dump-session 或任何回放仍能看到你撤回掉的那条文本。

安装与启用

需要 DSH >= 0.2.0-rc.1 < 0.3.0,并在 Web GUI 中使用。

从 npm 装(发布物已含构建好的 lib/,无需自己 build):

dsh plugin --profile <profile> add dsh-redo
dsh --profile <profile> --dump-config | grep redo   # 应看到 "== dsh-redo" 层
dsh --profile <profile>

或者从源码装(改代码、跟进未发布提交时用):

git clone https://github.com/Imzl-zl/dsh-redo.git
cd dsh-redo
npm install
npm run build

dsh plugin --profile <profile> add <本仓库绝对路径>

装完重启 GUI。想先拿独立 profile 试,可以用:

dsh --profile redo-test --from-default-profile web --dump-config
dsh plugin --profile redo-test add <本仓库绝对路径>
dsh --profile redo-test --no-open --port 3111

典型用法

  1. 鼠标移到任意一条自己发的消息上,气泡下方出现操作行。
  2. 点「重新生成」原样重发:一键,不经过输入框。
  3. 点「编辑重发」:这条消息立刻从对话里撤掉,文字和图片回到底部输入框。该问的会先问(中段消息说明之后还有几轮会跟着离开;输入框本来不是空的问是否替换)。
  4. 在输入框里改完(增删图片、改文字都行),正常按发送——这一次发送就是在重写那段对话,新的那条落在被撤掉的位置。撤掉这件事不设期限,草稿留着多久都行。

编辑不弹插件自己的对话框:内容进的是原生 composer,@ 引用、斜杠命令、图片预览、Esc 撤销全是原生行为。

带文件(非图片)的消息两个按钮置灰,因为客户端没有按引用读回旧文件的 RPC。

适用场景与注意

适合这些场景:

  • 消息发错了(错字、贴错内容、图配错)→ 改完重发。
  • 回答不满意 / 渠道抽风 → 原样重发,不必等失败才能点。
  • 想换一个问法继续同一段对话 → 从任意一条消息重写,后面的内容作废。

插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。MIT 许可证允许自由使用与修改。

结尾

dsh-redo 通过扩展点在 DSH 0.2.x 中实现了”撤回重发”的能力,让 append-only 的会话系统有了可编辑的入口。适合需要频繁修正消息或重试回答的场景。

  • 插件目录页:https://www.skillhub.cn/plugins/Imzl-zl/dsh-redo
  • GitHub 仓库:https://github.com/Imzl-zl/dsh-redo
羽毛球分组比赛记分
小程序二维码

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

小夜