dsh-chat-message-tools:DSH 对话消息管理工具

前言

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

羽毛球分组比赛记分
小程序二维码

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

Xiaoye