dsh-plugin-message-edit
ChatGPT-style message editing for DeepSeek Harness: edit a past prompt to rewind and branch the conversation, switch versions with a counter under the bubble, and browse branches in a tree.
What it is
ChatGPT-style message editing for DeepSeek Harness: edit a past prompt to rewind and branch the conversation, switch versions with a counter under the bubble, and browse branches in a tree.
How to install
Run this in the DSH web profile, then refresh the page.
$ dsh plugin --profile web add dsh-plugin-message-edit@1.6.0
DSH versions accepted
>=0.2.0-rc.2 <0.3.0-0 || 0.2.1-rc.2 || 0.2.1-rc.5 || 0.2.2-rc.1
Author and traction
SpookySandwich · ★ 30 · Updated 2026-11-07
About this plugin
dsh-plugin-message-edit
English | 简体中文
编辑一条已经发出的消息,对话会从那一刻 真正回溯并分叉——和 ChatGPT、Claude、DeepSeek 的做法一致。旧版本不会被覆盖:气泡下方出现 ‹ 2/4 › 计数,「版本」标签页则画出整棵树。
版本树分支展示
无论对话如何深层分叉、编辑多少次,「版本」标签页均会呈现清晰的轮次级分支图,当前会话所在路径实时高亮,点击任意节点即可平滑跳转:
功能 编辑并分叉:修改过去的提问并发送,新分支会带着该轮 *之前* 的完整上下文重新生成。这是真正的回溯,而不是从末尾继续的 fork。 版本计数:一条消息存在多个版本时,下方出现 ‹ n/m ›,左右箭头在各版本间即时切换。 版本树:新增「版本」标签页,以图的方式展示所有分支,可平移、缩放、拖动。当前所在分支高亮,点击任意节点即可跳转。 零延迟与即时切换:客户端家族级 SWR 缓存与乐观预加载,点击箭头或树节点切换版本 0ms 响应,无指示器闪烁或加载白屏。 高性能内存缓存:宿主端内存解析缓存,消除重复磁盘 I/O 与日志重析,即便是深度分叉的庞大家族树也能毫秒级响应。 自动中止旧分支:分叉时自动停止同家族中仍在流式生成的回复,避免浪费 Token 与计算资源。 重试:不修改内容,直接重跑该轮(Claude 布局)。 复制:把消息文本复制到剪贴板。 持久可靠:每个分支都是真实会话,版本关系写入持久事件,重启后依旧完整。新分支自动归入父会话的工作区。 界面风格
在 设置 → 消息编辑 中开启「侧栏同一对话只显示一个入口」,即可将带记录谱系的原始会话及其编辑/重试分支合并为一个侧栏入口,搜索结果也会按家族去重。该选项默认关闭,保留原有列表行为。 合并范围与谱系边界:每个具有记录父子谱系的版本家族合并为原始根会话一行,所有分支节点仍完整保留在「版本」标签页与气泡下方的 ‹ n/m › 切换器中。宿主原生的独立复制会话(例如 DSH 0.2.2-rc.1 的「分支为新对话」,有意不记录父会话谱系)保持为独立的根入口;找不到父会话的孤立分支仍单独显示,子智能体不会并入普通会话版本。 根会话归属与活动聚合:合并入口保留原始根会话的真实标题、所属工作区、置顶状态与归档状态;在合并入口上执行置顶或归档仅作用于根会话本身(不会批量归档、删除或改写家族中的其他分支)。家族内各分支的最近活动时间、运行状态与运行中子智能体计数(runningChildCount)会汇总显示在合并入口上,查看任一子分支时仍高亮选中同一入口。 待处理状态与点击跳转优先级:合并入口投射的状态标记与普通点击跳转使用同一组符合条件的可见未归档普通成员(同一优先级内优先选择原始根会话,其次按宿主目录顺序): 1. 待处理交互(approval 审批、plan-review 计划审阅或 question 提问)最高优先; 2. 未读完成状态(Completed)次之; 3. 记住的未归档版本(开启「记住我正在查看的版本」时)或原始根会话兜底。 当家族内存在待处理或未读完成状态时,点击入口会优先跳转到触发该状态的版本(临时优先于「记住我正在查看的版本」),确保隐藏分支的交互请求与未读完成状态可直接触达;宿主仅对实际打开的那个会话进行已读确认(不会整族批量标为已读),若多个分支同时存在未读完成状态,连续点击入口即可逐个访问并清除。 搜索命中跳转与已知限制:在搜索结果中点击带有匹配正文摘要(或唯一命中隐藏分支)的结果时,会直接打开命中的具体版本(优先于待处理/未读状态与记住的版本): 1. 在「显示已归档」(All conversations)视图下,若根会话未归档而仅有已归档的隐藏分支命中搜索正文,合并结果会沿用根会话的未归档外观且不显示行内取消归档按钮;点击该结果会清空搜索词并提示宿主原生的已归档限制(「已归档的会话无法打开,请先取消归档」),不会发生跳转或自动取消归档。请通过「版本」标签页或关闭合并后的原生列表取消该分支归档。 2. 当全文搜索(FTS)关闭且多个隐藏分支共享匹配的标题(而根会话标题不匹配)时,点击去重后的家族搜索结果会打开其中一个匹配分支(首个符合条件的匹配项),不一定优先打开之前记住的版本。 3. 在旧版宿主(0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.5)上,开启合并时回退搜索可匹配隐藏分支的会话
这三家界面的差别在于 操作按钮放在哪里、有哪些,因此预设只改变这一点,颜色始终沿用 DSH 原生配色。在 设置 → 消息树 中选择,面板内有实时预览。 只有 Claude 在用户消息上提供重试,与真实界面一致。没有分享按钮——DSH 本身没有,就不自行发明。 安装
安装后请重启 DSH:宿主端随服务器加载。界面跟随 DSH 显示语言(中文 / English / Русский)。可在语言选择器中选择俄语;宿主中尚未翻译的界面使用英语。 工作原理
DSH 的会话是仅追加的事件日志,本身不支持会话内分支,因此回溯需要另行实现: 宿主端提供 /message-tree 接口。编辑消息时,会 以目标轮次之前的全部事件为种子创建一个新会话,写入持久的 message-tree/version 标记说明改动内容,并把编辑后的提问送入。 之后读取这些标记,还原出整棵版本树、‹ n/m › 计数,以及当前处于哪个分支。 标记事件带有信封上的 ignorable 标志。插件自定义的事件类型不在宿主的事件词表内,缺少该标志时读取端会拒绝解释整份日志,会话将直接打不开。 只遮蔽普通的 user 消息节点(优先级 -1);思考、工具调用与引导消息仍由宿主渲染。
宿主端的分支逻辑源自 dsh-message-edit(MIT © Moeblack),在其基础上重做为 ChatGPT 式回溯语义、同级分支展开,以及上述界面预设。
两者名字相近,这里说明一下:这是另一个独立插件。它的路由、cordis id 与持久事件类型都保留了 message-tree 这一套命名,正是为了两个插件可以同时安装而互不冲突。 文档
Similar plugins
dsh-purge
让 AI 更专注地辅助学习与动手实验:DSH 附加组件,提供状态自检、提示词与规则管理、本机备份与回滚。
dsh-unrestricted
Toggleable unrestricted mode for DeepSeek Harness: fuses execution rules into the active standard, ptc, cordis, minimal,…
dsh-univer-office
DSH × Univer integration with a bundled collaboration Gateway and Viewer: inline previews, live floating Worktree window…