dsh-session-delete:在 DSH 侧边栏删除会话(可回收或彻底清除)

前言

DeepSeek Harness(DSH)的会话行「…」菜单里自带置顶、重命名、分叉、归档,没有删除。会话数据落在 $DSH_HOME/sessions/ 下会持续累积,想清掉只能手工动文件。协议里虽有 session/delete,但按设计主要面向外部 ACP agent,宿主存储层并不提供「删掉会话目录」这一层 API。

@jackal-alex/dsh-session-delete(GitHub:jackal-Alex/dsh-session-delete,维护者 jackal-Alex)是社区目录上的客户端类插件,在侧边栏补上删除能力:先把会话目录移入可恢复的回收站,或经确认后彻底清除。

这是什么

一句话:从会话行菜单删除 DSH 会话——可逆进回收站,或永久清除。

插件不声明 @deepseek-ai/* 的 peerDependencies,客户端只用 ctx.slots,宿主只用 ctx.webServer,避免 DSH 0.2+ 因 peer 不匹配而整包跳过。README 写明在 DSH 0.2.0-rc.2(Windows 桌面版)上实测可用;npm 包版本为 0.1.3,许可 MIT。

实现方式是把 sessions/<工作区>/session-<id>/ 整目录移出 $DSH_HOME/sessions,在 $DSH_HOME/session-trash/<时间戳>/ 保留 meta.json 以便恢复;这与「宿主不提供删除 API、只能落在文件系统上」的现状一致。

核心功能

菜单项 行为
删除会话 目录移入 session-trash,附 meta.json 记录原工作区与目录名
彻底删除会话 先移入回收站,再立刻从回收站清除;红色危险样式,二次确认

补充行为(均来自 README):

  • 正在使用的会话删不掉:例如 Windows 上日志被占用导致 rename 失败时,会提示先切换到别的会话再删,不会出现半删状态。
  • 删完自动刷新:通过 location.reload(),侧边栏不再显示该行。
  • 菜单样式:字号、行高、内边距、悬停与危险色对齐 DSH 自带菜单单元格(13px / 20px / 34px / 6px 8px)。

宿主侧还提供 HTTP 接口(列出会话、回收站、删除、恢复、彻底清除),供脚本或后续 UI 使用;回收站列表与恢复的图形界面尚未提供,恢复目前可走 API。

安装与启用

安装命令以 README 为准。社区目录页:https://www.skillhub.cn/plugins/jackal-Alex/dsh-session-delete。

# 从 npm(发布后)
dsh plugin --profile desktop add @jackal-alex/dsh-session-delete

# 从 GitHub(需要本机有 git)
dsh plugin --profile desktop add github:jackal-Alex/dsh-session-delete

# 本地开发(软链,改完硬刷新即可)
dsh plugin --profile desktop add link:/path/to/dsh-session-delete

注意:npm 上另有第三方包名 dsh-session-delete(作者 vtxf,仓库 vtxf/dsh-session-delete),与本项目无关。本项目 npm 包名为 @jackal-alex/dsh-session-delete,安装时认准 scope 与作者名。

装完后重启 DSH(bundle 在启动时装配),再按 Ctrl+Shift+R 硬刷新页面以加载客户端半边。

典型用法

侧边栏删除

  1. 鼠标移到任意会话行,点右侧「…」。
  2. 选 删除会话 并确认。
  3. 会话从列表消失;文件在 ~/.dsh/session-trash/(即 $DSH_HOME/session-trash/)中。

若要 彻底删除会话,在同一菜单选对应项并完成二次确认。

从回收站恢复(API,暂无 UI)

向本机 DSH 的 web 服务发 POST,并带上约定请求头:

curl -X POST http://127.0.0.1:19387/api/session-delete/restore \
  -H "content-type: application/json" -H "x-dsh-session-delete: 1" \
  -d '{"trashId":"<回收站目录名>"}'

查询会话或回收站列表时,所有请求(含 GET) 都需要头 x-dsh-session-delete: 1,且仅接受回环地址(127.0.0.1 / ::1)。示例:

curl -s http://127.0.0.1:19387/api/session-delete/list -H "x-dsh-session-delete: 1"

宿主路由摘要:

方法 路径 作用
GET /api/session-delete/list 列出磁盘上的会话
GET /api/session-delete/trash 列出回收站条目
POST /api/session-delete/delete {sessionId, mode?},mode: "purge" 表示移入后立刻清除
POST /api/session-delete/restore {trashId} 放回原位置
POST /api/session-delete/purge {trashId} 彻底删除,不可恢复

适用场景与注意

适合谁:长期在 DSH 里开很多工作区会话、需要偶尔清理侧边栏和磁盘占用,又希望误删能靠回收站或 API 恢复的用户。

已知限制(README):

  • 无批量删除;无回收站图形列表(接口已就绪)。
  • 只处理 sessions/<工作区>/session-<id>/ 目录布局;平铺或单文件压缩布局不在本版范围。
  • 彻底删除不是安全擦除(无 shred)。
  • 删除后依赖整页刷新更新列表。

安全与信任:插件以当前 DSH 进程权限读写会话目录与回收站;安装前建议在 GitHub 查看源码与 MIT 许可证,确认符合你对本机数据的处理方式。DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

若你缺的是「侧边栏里多一个正经的删除,而不是手删 sessions」,dsh-session-delete 把文件层移动做成可逆删除,并可选彻底清除。更多信息见社区目录页与仓库 README。

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

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

小夜