前言¶
DeepSeek Harness(DSH) 把会话持久化交给 SessionPersistence:创建、打开、刷盘、统计和列表,但不提供「从磁盘抹掉整段对话」这类破坏性操作——归档是内置的非破坏性路径。长期本地开发时,误建的空白 Session、试跑后想彻底清掉的对话,以及把目录当 workspace 后挂在「未分组」里的旧 Session,单靠侧边栏自带能力往往不够。
下面介绍社区插件 dsh-plugin-session-delete(维护者 SereinHK,SkillHub 分类为「记忆」)。它在 DSH 0.2.x 上补全「删除对话」与批量清理空白 Session,并把「什么能删、什么必须拒绝」的策略留在插件里,而不是塞进存储层。
这是什么¶
一句话:面向 Web 侧边栏的 DSH 插件——单条会话可移入回收站并在保留期内恢复或立即销毁,另可一键清理从未开轮的空白 Session,并在启动时尝试修复 workspace 与会话目录的归属。
DSH 本体刻意不提供 delete;本插件针对「字节要从 sessions 根下搬走」的场景。删除在实现上是同卷 rename 到 sessions 根旁的 trash,默认保留约七天(或由 profile 配置),侧边栏底部可查看、恢复或立即 purge;保留期结束后未处理的条目会被清掉。附件、导出文件与 workspace 内文件不会被插件触碰。
核心功能¶
单条删除:Session「…」菜单¶
插件向扩展点 sidebar.workspaces.session.menu.item 注册一行红色 Delete conversation(顺序约 900,危险样式),出现在内置 Pin / Rename / Fork / Archive 之后。确认框会写明会话标题与删除范围,确认后才执行 Delete permanently。成功后 Host 发出 api-session/removed,列表会重新拉取。
以下会话会被拒绝删除(Host 返回 409 session-open):日志仍对应正在进行的 turn 且句柄未关闭。仅「当前窗口里还开着」不足以拒绝——切换对话不会释放 Session,否则操作者只能重启 DSH。
批量清理与回收站¶
- Clean up empty conversations(
sidebar.footer.action):扫描blank: true(从未开始一轮)的 Session,列出 workspace 路径与空闲时长后确认,逐条删除并汇总deleted / failed / skipped。计划中会跳过:当前打开的 Session、Agent 仍在跑的、以及一小时内有过活动的空白 Session(避免误删刚点「新会话」的另一窗口)。 - Trash:列出已移入 trash 的会话及剩余保留时间,支持单条 restore 或 purge,也可清空全部。
确认与列表 UI 通过 shell.overlay 呈现,按会话标题(或路径)说明内容与剩余时间。
Host 侧 API 与启动修复¶
Node 端在 Connection 已认证的 /api 下注册六条路由,例如:
POST /api/session.delete— 移入 trashPOST /api/session.unused— 供前端无法自行推导的 per-Session 事实(是否空白、上次 prompt 时间等)POST /api/session.trash/restore/purge— 列表(会先 purge 过期项)、恢复、销毁POST /api/session.adopt— 把已存在于磁盘上的 Session 挂回拥有其目录的 workspace(runtime 只在创建时 attach;目录后加为 workspace 或改名后重加时,旧 Session 会留在 ungrouped)
插件在启动时也会跑一次 adopt 修复。
其他边界(资料中已说明):非法 session id 返回 400 invalid-session-id;路径不符合 <root>/<project>/<encoded id> 时返回 500 unsafe-target。
安装与启用¶
要求 DSH 0.2.x。菜单扩展点在 0.1.x 不存在,该版本上可能仅能看到侧边栏清理相关能力。README 注明在 @deepseek-ai/dsh-desktop-runtime 0.2.0-rc.2 上验证过。
安装后需重载窗口或实例;包内带 dsh.bundle.patch,插件行会自动写入,一般不必手改 profile 的 cordis.patch.yml。lib/ 预构建,安装过程不编译。
从 GitHub 安装请使用 https 地址,不要用 github:owner/repo 简写(pnpm 可能 normalize 成 SSH,无密钥会失败)。未发布到 npm,不要用 dsh plugin add dsh-plugin-session-delete 这种 registry 形式。
# 跟踪仓库默认分支(lockfile 会 pin 具体 commit)
dsh plugin --profile <profile> add https://github.com/SereinHK/dsh-plugin-session-delete.git
# 或安装 release 附带的 tgz,安装机无需 git
dsh plugin --profile <profile> add https://github.com/SereinHK/dsh-plugin-session-delete/releases/download/v0.1.2/dsh-plugin-session-delete-0.1.2.tgz
也可在侧边栏 Plugins 页粘贴相同 spec。桌面端自带包管理器,Plugins 页不依赖本机 PATH 上的 pnpm;裸跑 dsh plugin 时需要本机有 pnpm。
若要固定到某一 release tag,可在 profile 的 package.json 里写 git ref 后重新安装,例如:
"dsh-plugin-session-delete": "git+https://github.com/SereinHK/dsh-plugin-session-delete.git#v0.1.0"
卸载:在 Plugins 页移除,或:
dsh plugin --profile <profile> remove dsh-plugin-session-delete
许可证:MIT(见仓库 README 徽章)。
典型用法¶
1、安装并重载 DSH 后,在目标 Session 行打开 ... 菜单,最下方应出现 Delete conversation。
2、在对话框中核对标题与删除说明,再点 Delete permanently;需要反悔时在保留窗口内打开侧边栏 Trash 恢复。
3、若要整理从未开轮的空白会话:点 Clean up empty conversations,查看列表与将被跳过的项,确认数量后执行;结束后查看 deleted / failed / skipped 汇总。
菜单结构示意(来自 README):
Pin / Rename / Fork / Archive
─────────────────────────────
Delete conversation ← 本插件
适用场景与注意¶
适合谁: 需要在本地 DSH 实例上真正移除对话数据、批量删掉空白 Session,或修复 workspace 与磁盘 Session 目录不一致的开发者。
权限与安全: 插件以当前 DSH 进程权限读写 sessions 根与 trash;安装前应阅读 源码与许可证,确认行为符合你的数据策略。删除会搬走整段 Session 目录(各代日志格式)及 projection-cache 记录,但在保留期内仍可通过 Trash 恢复;过期或手动 purge 后不可恢复。
生态说明: DSH 强调「一切皆插件」;SkillHub 目录页 是社区收录站点,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。
链接¶
- 目录页:https://www.skillhub.cn/plugins/SereinHK/dsh-plugin-session-delete
- 仓库:https://github.com/SereinHK/dsh-plugin-session-delete
经过上面的步骤,你可以在保留 DSH「默认不破坏性删除」设计的前提下,按自己的策略清理会话与空白 Session,并在 trash 窗口内做最后一次确认或恢复。