dsh-safe-session-delete:为 DSH 补上可恢复的会话删除

前言

DeepSeek Harness(DSH)在 Web 侧边栏里管理多项目、多会话时,原生能力以归档为主,并没有面向日常整理的「删除会话」入口。会话 JSONL 和投影缓存会长期留在 <DSH_HOME> 下,列表里删不掉、误操作也难有缓冲。社区插件 dsh-safe-session-delete(维护者 tz-Wang510,分类:记忆)在菜单、悬停按钮和「设置 → 会话管理」里补上删除流程:确认后由宿主端移入回收站并刷新列表,默认保留 30 天,便于手动找回。

这是什么

一句话:给 DSH Web 侧边栏提供真正可用的删除会话能力,日志进回收站而非直接抹掉。

核心功能

下面介绍插件在界面与宿主端分别做了什么(均来自 README 说明)。

界面入口

  1. 会话行 ... 菜单新增「删除会话」。
  2. 会话行悬停时右侧出现红色 ×,无需展开菜单。
  3. 「设置 → 会话管理」列出所有会话,每行一个「删除会话」按钮。
  4. 中英文界面自适应;删除前确认框会显示会话标题。

宿主端删除流程

确认后,宿主按会话 id 定位 <DSH_HOME>/sessions/<项目目录>/<session-id>,并依次:

  1. 归档会话并停止正在运行的工作;
  2. 摘除内存中的 live 会话;
  3. 移动日志到回收站,避免运行中写入把文件重新创建。

同时会:

  • 删除投影缓存 <DSH_HOME>/storages/session_projcache/sessions/<id>.json,防止列表刷新复用旧标题;
  • 递归处理该会话的 subagent 子会话目录(侧边栏本就不显示它们);
  • 调用浏览器端 sessions.refresh(),侧边栏立即更新。

当前正在主视图打开的会话也可删除:确认框会额外提示,删除后对话关闭、清除保存的选择并刷新页面。

回收站与保留策略

日志移动到:

<DSH_HOME>/session-trash/<时间戳>/<项目目录>/<session-id>/

Windows 上常见路径为 C:\Users\<你>\.dsh\session-trash\。

  • 默认 30 天保留;过期批次在 DSH 启动时及之后每 24 小时自动清理。
  • 设置页可查看当前保留天数,并用「清理过期回收站」立即执行一次清理。
  • retentionDays: 0 表示关闭自动清理,仅手动清理。

profile 插件配置示例:

- id: dsh-safe-session-delete
  name: dsh-safe-session-delete
  config:
    retentionDays: 30

应用内无法撤销;恢复需把回收站中的会话目录移回原项目目录下,再重启 DSH。

安装与启用

从 GitHub Release 的预构建 tarball 安装(<profile> 换成 desktop、web 等):

dsh plugin --profile <profile> add "https://github.com/tz-Wang510/dsh-safe-session-delete/releases/download/v0.2.0/dsh-safe-session-delete-0.2.0.tgz"

若本机 pnpm 报 UNABLE_TO_VERIFY_LEAF_SIGNATURE,在命令前设置:

$env:NODE_OPTIONS="--use-system-ca"

再执行安装命令。安装后重启 DSH(插件在启动时加载)。README 注明 npm 包发布后还会补充 dsh plugin add dsh-safe-session-delete 的安装方式。

从本地插件目录安装到其他 profile:

dsh plugin --profile <profile> add "<插件目录>"

确认 package.json 的 dsh.profile.bundles 中出现 dsh-safe-session-delete 后重启 DSH。

典型用法

经过上面的安装与重启,可按任一路径删除:

  1. 鼠标移到会话行,点 ... →「删除会话」;
  2. 或直接点悬停时的红色 ×;
  3. 或打开 设置 → 会话管理,在列表中点「删除会话」。

确认后,该行从侧边栏消失。若确认不再需要回收站内容,可手动清空(示例为 PowerShell):

Remove-Item "<DSH_HOME>\session-trash" -Recurse -Force

宿主 HTTP 路由(与内置 API 一样受启动令牌 / 签名 Cookie 保护)包括:

POST /api/dsh-safe-session-delete/delete
Content-Type: application/json

{ "sessionId": "session-xxxx" }

另有 POST /api/dsh-safe-session-delete/status 与 POST /api/dsh-safe-session-delete/purge-trash,供设置页与清理逻辑使用。

适用场景与注意

适合谁: 长期在 DSH 里开大量会话、需要侧边栏和设置页统一删除入口,又希望误删能在 30 天内从 session-trash 手动恢复的用户。

权限与安全: 插件以当前 DSH 进程权限读写 <DSH_HOME>;安装前应阅读仓库 SECURITY.md 与源码。路由非 owner Peer 会被拒绝。

已知限制(README):

  • 依赖 DSH 默认 JSONL 布局(dshHomePath('sessions'));若 profile 修改了 session-persistence-jsonl.root,需自行适配。
  • 删除是宿主端文件操作,非 DSH 官方持久化 API;DSH 升级若改存储布局,需同步适配插件。
  • 自动清理仅在 DSH 运行时执行;长期不启动则过期批次保留到下次启动。
  • 侧边栏入口依赖官方 slot;设置页是相对更稳定的入口。

兼容性说明:已在 DSH 0.2.1-rc.5(Desktop / Windows)上通过真实浏览器点击验证;DSH 插件 API 仍处预览阶段,升级 DSH 后建议在隔离 profile 试装并运行 npm test。

结尾

dsh-safe-session-delete 补上了 DSH 原生缺失的删除路径,并把日志放进带保留期的回收站,同时清理投影缓存与子会话目录,列表可立即刷新。需要安装包、截图与变更记录时,以 GitHub 仓库为准。

  • 目录页:https://www.skillhub.cn/plugins/tz-Wang510/dsh-safe-session-delete
  • GitHub:https://github.com/tz-Wang510/dsh-safe-session-delete
羽毛球分组比赛记分
小程序二维码

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

Xiaoye