dsh-session-delete:在 DSH Web 侧栏永久删除会话

前言

DeepSeek Harness(DSH)的会话列表支持隐藏或归档,但本地仍保留会话日志、投影缓存、工作区关联和定时任务等数据。若需要彻底清掉某次对话及其子代理派生会话,而不是仅让它从列表里看不见,就需要在 Host 侧按 DSH 的数据布局做 staged 删除。社区插件 dsh-session-delete(维护者 Sartherland)在 Web 侧栏每条会话的 ... 菜单中增加 Delete permanently…,经确认后从 DSH 数据目录中移除对应会话及相关元数据;操作不可撤销。

下面介绍该插件的定位、删除范围、安装步骤与使用方式,并说明安全机制与使用限制。

这是什么

dsh-session-delete 是一个面向 DSH Web profile 的插件:在侧边栏会话行菜单里提供永久删除入口,由 Host 进程执行删除逻辑。它解决的是「仅归档/隐藏无法清除本地持久化数据」的问题;与手动删目录不同,插件会一并处理工作区归属、置顶/归档状态、投影缓存、定时任务、子代理子会话以及可选的全文搜索索引对账。

插件在 DSH 进程内运行,会直接改动 ~/.dsh 等 persistence 根下的文件。README 明确标注为 destructive plugin,安装前应阅读删除范围并自行审阅源码与 MIT 许可证。当前 package 版本为 0.1.0,要求 DSH >= 0.2.1-rc.3(Web profile),无构建步骤,客户端为预构建的 Module Loader bundle。

核心功能

菜单与确认

每条会话行悬停后点击 ...,会出现 Delete permanently…。确认对话框会写明会话名称并说明将被移除的内容;确认后执行删除,没有 undo。若 Host 拒绝(例如会话仍打开),对话框会显示原因且不改动数据。

会删除什么

针对选中的会话,Host 会移除或清理如下项(与 README 表格一致):

数据 行为
Session log 删除 sessions/<project>/<session-id>/ 下各格式版本的日志
Subagent descendants 递归删除 origin: "subagent" 的子会话;fork 不算后代,会保留
Projection cache 删除 session_projcache 记录及 .bak.* 备份
Workspace membership 从工作区 detach,陈旧行消失
Pin / archive 删除前先取消置顶与归档
Scheduled tasks 删除绑定到该会话的全部定时任务(含 inactive)
Spill files 删除本地 spill 后端的 session-<hash> 目录( oversized 工具输出)
Search index 若启用组合全文后端,触发一次 reconcile,去掉已删会话的索引行

当前 正在打开的会话会被拒绝删除:DSH 仍持有 Agent 与 log handle,删底层文件可能导致损坏或会话再次出现。需先切换到其他会话再删旧会话。

刻意保留的内容

  • Attachments:位于 <DSH_HOME>/attachments,内容寻址,可能被其他会话引用,插件不触碰。
  • 浏览器侧侧栏排序/草稿:非 Host 数据;列表刷新后陈旧 id 会被 UI 忽略。
  • 已上传到模型提供商、手动导出或遥测捕获的外部副本:不在 Host 本地存储范围内。

HTTP 路由为 /api/session-delete,注册在 DSH 已认证的 owner-only Fetch channel 上,继承浏览器 cookie 与常规 /api 的 Host/Origin fence,无需单独配置未认证端口或密钥。

删除如何分阶段保证安全

README 描述的四步流程:

  1. Preflight — 解析会话及全部 subagent 后代,确认无 live 会话;拒绝符号链接的 session 目录;验证路径在 persistence 根内。
  2. Quarantine — 将会话目录重命名为隐藏 sibling;失败时回滚已移动的目录。
  3. Metadata cleanup — 清理工作区、pin/archive、投影缓存、定时任务、session-scoped spill;失败收集为 warning,不故意把 log 留在原位。
  4. Purge — 递归删除隔离目录;若 OS 仍占用文件,warning 会给出残留路径供手动清理。

安装与启用

要求 DSH Web profile >= 0.2.1-rc.3。任选一种方式安装后,在 Plugins 页面启用 Session Delete(bundle 名 dsh-session-delete);若 profile 未启用 HMR,需重启 DSH。

从 DSH UI

打开 Plugins → Install,粘贴 GitHub 仓库 URL,启用 Session Delete,按需重启。

从 CLI

官方命令:

dsh plugin add github:Sartherland/dsh-session-delete

本地 checkout 开发时可用 link:

dsh plugin add link:/absolute/path/to/dsh-session-delete

手动编辑 profile

在 ~/.dsh/profiles/<profile>/package.json 中加入依赖并在 dsh.profile.bundles 中列出 bundle 名;示例见仓库 README。bundle 通过 cordis.patch.yml 向 Host 注册 session-delete 行。

典型用法

  1. 打开侧边栏会话列表。
  2. 悬停目标会话,点击 ...。
  3. 选择 Delete permanently…。
  4. 阅读确认文案,点击 Delete permanently。

菜单在 row 不可用时隐藏。若因会话仍打开而被拒绝,按提示先切换会话再试。

适用场景与注意

适合:需要在本机 DSH 数据中彻底移除某次对话及由其派生的 subagent 会话;清理投影缓存、定时任务与 spill,并同步工作区列表;在启用全文搜索时希望索引与本地删除一致。

务必注意:

  • 插件以 当前 DSH Host 进程权限 运行,删除的是本机 persistence 数据,不可恢复。
  • 安装前阅读 README 的「What it deletes / keeps」并查看 lib/delete.js 等实现;社区目录 SkillHub 插件页 与 GitHub 仓库相互独立,非 DeepSeek / 幻方官方应用商店,归属与维护以 Sartherland 仓库为准。
  • 附件、外部导出与 provider 侧副本不在删除范围内;隐私或合规需求需另行处理。

开发侧可运行 npm test(node –test)与 npm run check 做语法检查;Host 半无运行时依赖,Client 由 DSH Module Loader 注入 react 与 @deepseek-ai/dsh-client-ui-primitives。

结尾

dsh-session-delete 把 DSH Web 里「永久删除会话」做成一条可确认的菜单操作,并在 Host 侧按 preflight → quarantine → metadata → purge 删除日志、子代理后代、缓存、工作区与定时任务等,同时保留共享附件与 fork 会话。使用前确认 DSH 版本与 Web profile,并理解破坏性范围。

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

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

小夜