前言¶
DeepSeek Harness(DSH)的对话消息管理通常需要通过配置文件或手动操作磁盘完成。面对需要频繁修改消息内容、截断对话或彻底删除会话的场景,这种方式既繁琐又不直观。本文介绍一个 DSH Web 插件,它把常见的消息操作做成对话页里的按钮,在当前对话内原地完成修改与删除,避免直接操作磁盘。
插件定位¶
这个插件由维护者 YYBBJ 开发,是一个 DSH Web 插件。它的核心价值是将「改一条消息」「截断一段对话」「彻底删掉整个对话」「找回归档的对话」这四件事做成对话页里点得着的按钮,而不是让你去翻配置文件或手动删磁盘。
插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
安装与启用¶
使用官方安装命令:
dsh plugin add github:YYBBJ/dsh-chat-message-tools
安装完成之后重启 DSH。
核心功能¶
1. 消息编辑与重发¶
在当前对话里原地完成消息编辑,编辑后原地重发,归档后对话标题和侧栏位置不变。
2. 对话截断¶
单条消息的「归档此条及之后」不物理删除任何东西,只改变显示状态。
3. 会话物理删除¶
整条对话的删除是真删磁盘文件,不是只从列表里隐藏。它会删除以下内容:
<DSH_HOME>/sessions/<cwdKey>/<sessionId>/ 整个会话目录(session.v4.jsonl.zstd 等)
<DSH_HOME>/storages/session_projcache/sessions/<sessionId>.json 投影缓存
删除前会先 archiveSession(id, { stopActivity: true }) 停止该会话的活动,再进行文件操作。
4. 删除清单与重试¶
插件会写一个待删清单 <DSH_HOME>/storages/chat-message-tools/pending-deletes.json,记录哪次删除被占用、下次启动重试。
安全机制¶
路径校验¶
session id 必须匹配 ^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$;每个候选路径都要求 basename === sessionId、父目录正好是 <DSH_HOME>/sessions/<某个 cwdKey> 或投影缓存目录,任何拼接都逃不出 <DSH_HOME>。
删除确认¶
删除动作在 UI 里永远走一个显式确认框,按钮写「永久删除」。
网络面¶
- Host 半边只注册
POST /plugins/dsh-chat-message-tools/session/delete,请求体只接受{ sessionId }(≤8KB); - 处理前校验来源:必须是回环地址、
Host必须是127.0.0.1/localhost/[::1]、Origin(若有)必须与Host同源,否则 403; - 没有遥测、没有外发请求、不下载也不执行任何远程代码。
不可逆部分¶
整条会话的物理删除不可恢复(这正是设计意图)。删除失败时会回滚、不会留下半删状态;日志被 agent 占用时会先隐藏、下次启动再清理。
适用场景¶
- 需要频繁修改对话中的单条消息并立即查看效果的开发者;
- 需要截断对话以聚焦于某段上下文的开发者;
- 需要彻底清理旧对话、释放磁盘空间的场景。
版本与许可证¶
插件版本为 0.1.1,许可证为 MIT,Node.js 引擎要求 >=22.19。
总结¶
本文介绍的 dsh-chat-message-tools 插件将 DSH 对话消息管理从配置文件和磁盘操作转移到对话页面的按钮操作中,通过显式确认、路径校验和回滚机制保证安全性。适合需要精细管理对话内容的开发者使用。
插件目录页:https://www.skillhub.cn/plugins/YYBBJ/dsh-chat-message-tools
GitHub:https://github.com/YYBBJ/dsh-chat-message-tools