前言¶
DeepSeek Harness(dsh)是 DeepSeek AI 开发的开源智能体框架,架构上强调「一切皆插件」。会话日志按设计是只追加、不回改:智能体跑完一轮之后,用户消息、思考块、工具调用和最终回复都已经落定。实际用起来,常见需求并不是把刚才那句话从历史里抹掉,而是提示写偏了想改一句再跑、最后一轮回复不满意想重掷、中间某一回合跑歪了希望从那个点重新执行,同时把原来的会话留着对照。
社区插件 dsh-message-edit 做的就是这件事。它不改写已有事件,也不去改 DSH 引擎内部;每次编辑、重生成或重试,都会从目标回合之前分出一个新的会话版本。原会话始终保留,可以随时切回去。
本文按插件目录页、GitHub 仓库 README、npm 页面和 DeepSeek Harness 官方仓库交叉核对后整理。社区插件目录(https://deepseek-harness-plugin.com)是独立站点,与 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。
这是什么¶
dsh-message-edit 是一款会话与消息类插件,由 Moeblack 维护,源码在 GitHub 仓库 Moeblack/dsh-message-edit。npm 包名同样是 dsh-message-edit,当前版本为 0.2.3(2026-08-16 发布)。package.json 与 npm 均声明许可证为 MIT;仓库根目录目前没有单独的 LICENSE 文件。主要语言是 TypeScript。本文查阅时 GitHub 仓库显示 25 star,目录页显示 18 star,数字以仓库为准。目录页收录日期为 2026-08-15。
它给 DeepSeek Harness 补充基于事件溯源的「消息编辑与重生成」能力:
- 可编辑已落定的用户文本、助手思考块(
assistant.reasoning)和回复文本(assistant.response) - 可对最后一轮已落定助手回复做重生成(reroll)
- 可在 Timeline 里选任意历史回合重试
- 会话标题栏和 Timeline 标签页提供版本切换
package.json 里 dsh.client.platform 为 web,浏览器侧会注入会话 UI 相关客户端包,因此需要网页界面 profile 才能看到 Timeline 和标题栏控件。
核心功能¶
编辑、重生成与重试¶
仓库 README 列出三类操作:
- 编辑消息:对象是已经落定的用户文本、
assistant.reasoning思考块,以及assistant.response回复文本。 - 重生成:从「最后一条已落定助手回复」所属回合之前分支,用原来的用户输入重新生成。
- 重试任意回合:在 Timeline 中选择任意历史回合重新执行。
三种操作都不会原地改历史。插件把完整回合当作效果原子:目标回合的 turn/start、模型请求、工具调用、工具结果和 turn/end 不会被拆开复制再拼回去。新版本从该回合之前的闭合边界分出。
用户消息编辑、Reroll 和 Retry 的路径是:回退整个目标回合,再把目标用户输入作为新回合交给 Agent。助手块编辑则是:回退整个目标回合,用原用户输入加上编辑后的助手内容构造一个新的完整闭合回合;原来的工具链不会进入新版本。
级联策略¶
对目标点之后还有后续用户输入的情况,插件提供两种级联策略:
truncate(默认):只重新执行目标输入,该点之后的旧后续不再带入新分支。preserve:保留后续用户输入,并在新分支中依次重新执行;助手输出与工具链全部重新生成。
编辑助手块时如果选择 preserve,后续用户输入会再依次交给 Agent,产生一套新的完整工具链。
版本时间线¶
每个版本会追加一个不可拆分的 message-edit/version 效果对:effect 记录正向操作,inverse 记录恢复目标。恢复不是删除事件,而是沿着逆链切到仍然存在的版本。撤销遵循后进先出:一次只撤销当前原子效果,更早的效果保留;后继分支也始终保留,可以从父版本重新施加。
会话头的 parentSession 构成版本树,并且必须与事件里的 inverse.sessionId 一致。Timeline 通过 ctx.sessionQuery.traceSession() 和 readSession() 做值级投影,再由原子逆链导出撤销栈和可重施加的子版本。
界面上有两处入口:
- 会话标题栏(
conversation.session.header.actions,id 为message-edit-controls):←撤销当前原子效果,→重施加最新直接子效果,并显示效果链计数和「最后回复重生成」。 - Timeline 标签页(注册到
conversation.view,id 为message-edit-timeline,order: 15):位于 Trajectory(10)与 Prompt Studio(20)之间,展示完整已知分支树、操作时间、编辑前后内容与当前版本。
产品文案为中文。组件使用 CSS Modules 和 --dsw-* 语义 token,不引入额外 UI 库。
HTTP 接口¶
Host 侧还暴露了两个 HTTP 接口,便于脚本或其它客户端调用:
GET /message-edit?sessionId=:读取可编辑消息、可重试回合与完整版本树。POST /message-edit:执行edit、reroll或retry,返回已发布的新 Session ID。
README 没有给出完整请求体示例,字段以仓库当前实现为准。
安装与启用¶
目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行:
dsh plugin add github:Moeblack/dsh-message-edit
如需可复现安装,目录页建议固定 commit 哈希(把 commit 换成实际提交):
dsh plugin add github:Moeblack/dsh-message-edit#commit
仓库 README 更明确地指向网页 profile,因为客户端插件平台是 web:
dsh plugin --profile web add dsh-message-edit
这是从 npm 安装包名 dsh-message-edit。本地开发可以用符号链接:
dsh plugin --profile web add -w link:/path/to/dsh-message-edit
README 说明 dsh plugin 是 pnpm 转发器:add 之后会识别 dsh.bundle 声明,把插件收进 profile 的 dsh.profile.bundles,重启 dsh 后生效。本地改源码并重新构建后,同样需要重启才能更新。
从源码构建:
npm install
npm run build
构建产物是 index.mjs(Host 插件)、client.js(Browser 插件)和对应 source map。构建依赖 npm 上的 @deepseek-ai/*@0.1.0-rc.6 类型包,不再依赖 dsh 源码树。
目录页提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。
典型用法¶
安装并重启带 Web UI 的 dsh 之后,打开一个已有会话:
- 会话标题栏会出现消息编辑控件。对最后一轮助手回复不满意,可以直接触发重生成;需要退回上一版或切到最新子版本时,用
←/→。 - 对话区会多一个 Timeline 标签,夹在 Trajectory 和 Prompt Studio 之间。这里能看到分支树、每次操作时间和编辑前后内容,也可以选任意历史回合做 Retry。
- 编辑已落定的用户消息或助手块时,插件会从该回合之前创建新 Session。原会话不会被覆盖,可以对照两条分支。
- 如果后面还有多轮用户输入,按需要选择
truncate或preserve:只想改当前这一句、后面不要了,用默认的truncate;希望后面几轮提问还在、但助手输出和工具链全部重跑,用preserve。
需要从脚本触发时,可以用上面的 GET / POST /message-edit。
适用场景与注意事项¶
比较适合:
- 主要在 Web UI 里用 DeepSeek Harness,需要改提示、重掷回复、从中间回合重跑
- 希望保留原会话作对照,而不是覆盖历史
- 需要看清分支树和每次编辑前后的差异
需要注意:
- 不改工作区文件。 README 写明:不联动恢复或修改工作区文件、命令外部效果与既有产物。如果智能体已经改过仓库里的代码,切会话版本不会把文件一并回滚。同类目录分类下,
dsh-turn-rewind才是「对话 + 工作区状态回退」方向的插件,两者不要混用预期。 - 不修改引擎。 插件不改 DSH 引擎、apiproxy 或官方 UI 包;Host 只走公开的
sessions、agents、sessionPersistence、sessionQuery、workspaceRegistry和webServer服务。 - 历史只追加。 Session 事件是 append-only、deep-frozen,不会原地改写。
- 需要 web profile。 没有网页界面时,Timeline 和标题栏控件不会出现。
- 权限与许可证。 插件以当前 dsh 进程权限运行。
package.json/ npm 声明 MIT,但仓库目前没有独立 LICENSE 文件,安装前仍应自己核对源码。 - DeepSeek Harness 仍处于开发者预览,官方 README 写明会有破坏兼容性的变更。插件构建对齐的是
@deepseek-ai/*@0.1.0-rc.6,升级 dsh 后需要再确认是否仍兼容。
小结¶
dsh-message-edit 把「改一句提示再跑一遍」做成了可切换的会话版本树:编辑、重生成、重试都从目标回合之前分支,原会话留着,Timeline 能把整棵树看清楚。它不管工作区文件回滚,也不改引擎,适合作为 Web UI 上的会话编辑层。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-message-edit/
GitHub:https://github.com/Moeblack/dsh-message-edit
npm:https://www.npmjs.com/package/dsh-message-edit