前言¶
在 DeepSeek Harness(DSH)里跑 Agent 时,常见情况是:某条用户消息打错字、漏了约束,或想换一种问法,但后面已经多轮对话和工具调用。若只能新开会话,早期上下文要手动搬,侧栏也会多出一堆分支。部分社区插件采用「分支会话」或「只改最后一条」等语义,与 Codex 一类产品里「改本条、截断其后、在同一 conversation 里重生成」的体验并不相同。
下面介绍维护者 Stxr 发布的 消息编辑(GitHub:Stxr/dsh-message-pencil),分类为工作流,面向 DSH 0.2.2-rc.1,当前插件版本 1.1.3(MIT)。它在不改变会话 ID 的前提下,编辑已发送的用户消息,保留该条之前的对话,丢弃该条及之后内容,再按新正文(与原附件)重新生成。
这是什么¶
消息编辑 为 DSH 提供 Codex 风格的「已发送用户消息编辑」:更早的消息保留;被编辑的消息及其后的全部轮次从聊天视图和模型上下文中移除,随后提交修改后的正文并重新生成。界面在生成结束后,于用户消息悬浮操作区在「复制」右侧显示铅笔;不提供编辑助手回复、不提供增删附件(当前版本仅编辑正文,已有图片与文件附件自动保留)。
生态上,DSH 走「一切皆插件」路线;SkillHub 目录页 等社区站点用于发现插件,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看仓库源码与许可证,插件以当前 DSH 进程的权限运行。
核心功能¶
界面编辑¶
- 将鼠标移到目标用户消息上,在「复制」右侧点击铅笔(仅在本轮生成完全结束后出现;提交排队或任务执行期间不渲染)。
- 原气泡切换为简洁编辑框,保留正文、已有附件,以及「取消 / 发送」。
- 编辑后点「发送」,或 Cmd/Ctrl+Enter 提交;Enter 换行;Esc 或「取消」放弃。中文输入法选词时的回车不会误提交。
- 第一条用户消息也可编辑。即使文字未改、直接再次发送,仍会截断后续对话并重新生成。
提交后:同一 sessionId;目标消息之前的对话保留;目标消息及之后从视图与模型输入中移除,再按新正文和原附件生成。不创建分支、不在侧栏保留旧会话副本。未保存草稿仅留在当前页,切换会话或刷新会丢失。此操作不会撤销已执行的文件修改、命令或外部副作用。
自动化:/message-edit 与 edit_sent_message¶
- UI 支持
/message-edit命令。 - Host 注册
edit_sent_message工具,与界面走同一套逻辑并记录相同命令结果: list:返回最近 20 条可编辑用户消息;beforeSeq向前分页。edit:须在另一空闲会话指定sessionId,并提供完整原文以校验是否过期;Agent 当前会话须在回复结束后通过铅笔编辑。- 成功返回原
sessionId、editedSeq、markerSeq及截断范围。若截断后重发失败,返回historyChanged: true、accepted与错误信息。工具列表中超过 4000 字符的正文会标为truncated,编辑时需从原始会话读取全文。
历史与兼容性(实现要点)¶
Host 使用原生 surfaceOp: replace 截断历史尾部,经空 developer 消息去掉对应模型输入,再以完整用户消息重发。修改在 Agent 空闲维护阶段执行,提交新消息前先持久化截断;请求去重避免重复点击。聊天列表、工具过程、轮次导航与统计沿用 Chat builder 的隐藏语义;全历史轮次导航会过滤被截断轮次。
DSH 审计日志为追加式,轨迹或原始日志仍可能看到旧记录。停用插件会恢复原生历史展示,但不会把已截断内容放回模型上下文。Client 针对 0.2.2-rc.1 包装 Chat builder factory 并装饰轮次提纲读取,卸载时恢复;升级 DSH 后须复验。
安装与启用¶
DSH 不内置插件索引源,需用户自行添加;仓库 dsh-plugin topic 仅用于发现,不会自动出现在列表里。
从插件索引安装¶
- 打开「插件」,在实验插件中启用 Custom plugin indexes(自定义插件索引)。
- 进入 Discover(发现) → Add index source(添加索引源)。
- 粘贴索引地址,在索引中选择「消息编辑」并确认安装:
https://raw.githubusercontent.com/Stxr/dsh-message-pencil/main/index.json
索引将各版本固定到完整 Git commit SHA,并声明与插件相同的 DSH 版本要求。安装确认页请核对来源;索引源按 profile 保存。
直接安装¶
在插件管理器「添加插件」中可输入:
git+https://github.com/Stxr/dsh-message-pencil.git#v1.1.3
也可从 Releases 下载安装包,解压后安装解压目录(运行包已含构建好的 Client,无需本地编译;该目录安装后宜保留)。插件显示名称为「消息编辑」。安装影响当前 profile 的全部会话;升级后界面仍像旧版时可重新加载页面(桌面端 Cmd+R)。在「已安装」中可停用或移除。
典型用法¶
手工纠错并重跑后续对话
- 等待当前 Agent 回复完全结束。
- 移到需要修改的用户消息,点铅笔,改正正文(附件保持不动)。
- Cmd/Ctrl+Enter 或点「发送」。该条及之后消息从会话中消失,模型按新用户消息继续在同一对话里生成。
Agent 侧列举可编辑消息(需在非当前忙碌会话上调用 edit,并带完整原文防过期):
- 通过 Host 暴露的
edit_sent_message:list分页查看;edit在指定空闲sessionId上提交编辑(具体参数以仓库 README 与src/shared/protocol.ts为准)。
适用场景与注意¶
适合:需要在同一 conversation 内「改提问、丢后文、重生成」的 DSH 0.2.2-rc.1 用户;希望交互接近 Codex 铅笔编辑、又不想维护侧栏分支副本时。
不适合或有限制:
- 仅支持编辑用户消息正文,不能改助手回复,不能在本版本增删附件。
- 生成或排队期间无铅笔;依赖宿主私有兼容接口,DSH 大版本变更后需重新验收。
- 不撤回磁盘上的文件改动或已执行命令;审计轨迹可能仍保留旧轮次记录。
- 与同形态社区的其它方案(如分支语义、只回填最后一条、DOM 补丁类插件)目标不同;0.2.2-rc.1 上可参考 README「参考方案」一节对照选型。
安装与运行前请阅读 GitHub 仓库 源码、engines.dsh 声明及 MIT 许可证;插件能力受当前 Harness 进程权限约束。
结尾¶
消息编辑 把「截断其后、同会话重生成」落到 DSH 的工作流里:界面铅笔、命令 /message-edit 与 edit_sent_message 共用一套截断与重发逻辑,并明确不保留侧栏旧分支。若你正在 0.2.2-rc.1 上调试 Agent 提示词或多轮工具链,值得一试。