dsh-session-editor:在 DSH Web UI 里删除会话与直接改对话

前言

DeepSeek Harness(DSH)的会话日志是只追加的:不能像普通文档那样就地改某一轮内容,侧边栏里也往往只能归档隐藏,不能从磁盘彻底清掉一条会话。若你在本地跑 Harness、频繁试 prompt 或 fork 子会话,侧边栏会堆满「其实不想再看见」的记录;若你想在某一轮之后重发、改自己的输入,又只能新开会话手动复制,成本偏高。

社区维护者 wodebilu 的 dsh-session-editor 是面向 DSH Web 界面的非官方插件(与 DeepSeek 无隶属关系)。它在会话行菜单和对话气泡上增加删除、再生成、改 prompt 重发、截断后续轮次、编辑本人消息等操作,行为上接近 SillyTavern 的「直接改对话」,但实现方式是 fork 出新会话并永久删除原会话,而不是改写 JSONL 文件本身。

下面介绍插件定位、能力与安装用法,并说明删除与归档、以及升级兼容性上的注意点。

这是什么

  • 名称:dsh-session-editor(npm 包名与仓库名一致)
  • 维护者:wodebilu
  • 分类:客户端(platform: web,注入对话与工作区相关 UI 模块)
  • 版本(package.json):0.1.2,许可证 MIT
  • 一句话:在 DSH 里永久删除会话、对已完成的回答再生成或编辑该轮、编辑并替换自己的用户消息。

插件无第三方运行时依赖、无网络调用、无遥测;Host 侧为纯 ESM,无需构建步骤。

核心功能

资料中的能力表可概括为以下几类(均在 Web UI 或命令行触发):

操作 入口 行为概要
永久删除会话 会话行 … → Delete session permanently… 校验 artifact 路径、归档、停止运行中的任务,再从磁盘擦除目录;须勾选「我理解无法撤销」
再生成(Regenerate) 已定稿回答下方的操作行 确认 → 在该轮之前 fork 新会话 → 用相同 prompt 重发 → 打开新会话 → 原会话永久删除
编辑 prompt 并重发 同上操作行 确认 + 文本编辑器 → 用编辑后的 prompt 建新会话 → 原会话永久删除
删除本轮及之后 同上操作行 新会话在该轮之前结束 → 原会话永久删除
编辑我的输入 悬停用户消息气泡 复制 / 编辑自己的消息;同样走「替换会话并删除原会话」流程

删除与归档的区别(README 明确对比):

删除 归档
会话数据 从磁盘永久移除 保留
能否恢复 否 可取消归档
侧边栏 离开列表 离开列表
释放磁盘 是 否

若目标只是「别在侧边栏看见」,应优先归档;只有确定要释放空间且接受不可恢复时再用永久删除。

「直接编辑」的实现方式:DSH 不支持就地重写日志。每次编辑会在目标轮之前 fork 出替换会话(标题保留),打开新会话后永久删除源会话。因此会话 id 会变、侧边栏行被替换,且没有可回退的分支历史;删除是「从该轮起向后截断」,不能只删中间一条消息。改文本会触发重新生成回答,不是纯文本替换。带附件的消息编辑时会警告并要求二次确认,因为日志里存的是附件 id,prompt 端点只接受新上传内容。

删除安全流程(Host 侧,失败则尽量不改状态):通过 sessionPersistence.stat 等解析路径、拒绝仍含 subagent 子会话的删除、校验目录层级与 session*.jsonl[.zstd]、运行中会先停止(最多等 15 秒)、flush 后擦除目录并清理投影缓存,再归档侧边栏行。路径解析失败发生在任何状态变更之前。插件不写 workspace.json。

安装与启用

README 给出的安装方式如下(勿用 npm 包名 dsh-session-toolkit,那是另一个插件;若曾装过 @local/dsh-session-toolkit 或 dsh-session-toolkit,先在 Plugins → Installed plugins 里移除,避免重复注册同一 UI 槽位)。

从 GitHub 安装:

  1. DSH 侧边栏 → Plugins → Add plugin
  2. 粘贴仓库地址,或在本机 shell 执行:
dsh plugin --profile web add github:wodebilu/dsh-session-editor

也可在界面中粘贴:

https://github.com/wodebilu/dsh-session-editor
  1. 安装完成后重启 DSH 一次。

本地文件夹或 ZIP:解压到固定路径,在 Add plugin 中粘贴含 package.json 的文件夹绝对路径后安装并重启。文件夹安装为 link: 依赖,之后不要移动或删除该目录;Git/tarball 安装会复制到 profile,可随意移动安装源。

环境要求(README):在 DSH 0.2.1-rc.2 上测试;Node >=22。Client 依赖 DSH 内部 slot 与 conversation.chat.user.content 工厂,Harness 升级可能导致需更新插件。

典型用法

  1. 删整条会话:会话行 … → Delete session permanently… → 勾选确认 → 确认。
  2. 改轮次 / 再生成 / 截断:悬停已定稿回答下方的操作行 → 铅笔 / 垃圾桶 / 再生成图标 → 按提示确认。
  3. 改自己的消息:悬停用户气泡 → 复制或铅笔编辑。
  4. 命令行删除(可在任意会话中执行,菜单与替换流程内部也会用到):
/session-editor delete <sessionId> --confirm

无 --confirm 时仅返回用法说明且不改动任何会话,避免误粘贴即删。删除命令会作为普通 command 行记入日志;会话自删时 Host 会等待命令生命周期持久化后再擦目录。

配置:无需配置项。运行中会话停止的最长等待时间固定为 15 秒,未对外暴露为可改项。

适用场景与注意

适合谁:在本地或自管环境使用 DSH Web UI、需要清理磁盘上的会话目录、或希望在某一轮上「改 prompt / 重生成 / 删掉后面几轮」的开发者。不适合把永久删除当成「可撤销清理」——README 反复强调:无回收站、无撤销;不确定时先归档。

权限与信任:插件以当前 DSH 进程权限读写会话目录与注册的服务(commands、agents、sessionPersistence、workspaceRegistry 等)。安装前应自行查看 GitHub 仓库 源码与 MIT 许可证,确认符合你对非官方扩展的接受程度。README 声明无担保,重要对话请自行备份。

兼容性风险:插件会注册 conversation.chat.node 的 user 键以添加悬停操作,Harness 若变更该节点契约可能影响用户消息渲染;Host 对 JSONL backend 的 listArtifacts()、root 等为特性检测,未来 Harness 移除时可能回退到 $DSH_HOME/sessions,仍可能解析失败而「失败关闭」。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区收录站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区插件而非官方产品说明。

结尾

dsh-session-editor 补的是 DSH 默认 Web UI 里「会话级永久删除」和「按轮次 fork 替换」这两块空白:操作集中在菜单与气泡上,删除路径有多重校验,但决策仍在你——永久删除前请想清楚是否该用归档。

  • 目录页:https://www.skillhub.cn/plugins/wodebilu/dsh-session-editor
  • 源码与完整说明:https://github.com/wodebilu/dsh-session-editor(含 中文 README)
羽毛球分组比赛记分
小程序二维码

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

Xiaoye