dsh-session-cleaner:在侧栏真正删除 DSH 会话

前言

在 DeepSeek Harness(DSH)里用久了,侧栏会堆很多历史会话。官方侧栏通常只有「归档」,Host 的 sessionPersistence 也只提供 create / open / flush / stat / list,没有 delete。会话本体就是磁盘上的普通文件;若只删列表项而不删目录,或反过来只手动删文件,侧栏与各窗口里的行很容易对不上。

下面介绍社区插件 dsh-session-cleaner(维护者 Alumos,npm 包名 @alumos/dsh-session-cleaner)。它在侧栏会话菜单里增加「删除会话」,一次性清理 session 目录、投影缓存以及 workspace 记账,并通过 api-session/removed 让所有窗口里的那一行一起消失;会话若仍在 Harness 里打开,会先提示关闭再删。

这是什么

dsh-session-cleaner 是 DSH 的客户端类插件:Client 半负责侧栏菜单与确认对话框,Host 半负责路径解析、删除逻辑、Agent 工具与 HTTP 路由。许可证为 MIT,源码在 GitHub,目录页见 SkillHub。package.json 声明 engines.dsh: ">=0.2.0-rc.1"。

为什么需要它

DSH 默认没有「从 UI 删会话」的入口。会话数据大致落在:

~/.dsh/sessions/<工作区编码>/session-<uuid>/session.v4.jsonl.zstd
~/.dsh/storages/session_projcache/sessions/session-<uuid>.json

本插件删掉对应目录与派生状态后,由 dsh 自己的 api-session/removed 通道更新侧栏,无需手改客户端列表。

核心功能

侧栏删除

右键侧栏中的会话 →「删除会话」→ 原生样式确认框。默认把 session 目录移到回收站;可勾选「永久删除(不放进回收站)」。

回收站路径形如:

~/.dsh/session-trash/<ISO 时间戳>-<sessionId>/

误删时可手动把目录搬回。

运行中的会话

若会话仍在进程里打开,第一次删除会提示;按钮变为「关闭并删除」。再确认后会依次取消进行中的回合 → 关闭会话(session/disposed)→ 再移入回收站或永久删除。

一并清理的状态

除 session 目录外,还会清理 projcache 里该会话的 JSON、pinned/archived 记录,以及所属 Workspace 的 sessionIds 记账。

Agent 与 HTTP

Host 侧提供两个 Agent 工具与一组 HTTP 路由,与 UI 共用同一套删除实现:

入口 用法
侧栏会话菜单 右键会话 →「删除会话」→ 确认
Agent 工具 session_cleaner_list(列会话拿 id)、session_cleaner_delete(删)
HTTP GET /dsh-session-cleaner/health、GET /dsh-session-cleaner/sessions、POST /dsh-session-cleaner/delete

安装与启用

在 dsh 设置 → 插件 →「添加插件」中,市场接受 npm 包名、Git 仓库地址、本地目录、.tgz 直链 四种来源。以下命令与地址均来自项目 README,请按网络环境选一种。

方式 1:npm 包名(国内可走镜像)

在「添加插件」里填:

@alumos/dsh-session-cleaner

能直连 npm 官方源时,安装源选默认即可。大陆网络可选「自定义地址」,例如华为云镜像:

https://mirrors.huaweicloud.com/repository/npm/

装完后在插件列表里启用。注意:npm 上另有他人发布的无 scope 包 dsh-session-cleaner,与本项目无关;应使用 @alumos/dsh-session-cleaner。

方式 2:Release 的 .tgz 直链

固定版本示例(发版后需与 Releases 页版本一致):

https://github.com/Alumos/dsh-session-cleaner/releases/download/v0.2.2/dsh-session-cleaner-0.2.2.tgz

main 分支的 nightly 预发布地址固定为:

https://github.com/Alumos/dsh-session-cleaner/releases/download/nightly/dsh-session-cleaner-nightly.tgz

安装入口只认 .tgz / .tar.gz 或 Git 地址,不接受 Release 里的源码 .zip。

方式 3:GitHub 仓库地址

需能访问 github.com:

https://github.com/Alumos/dsh-session-cleaner
github:Alumos/dsh-session-cleaner

方式 4:本地目录

克隆或解压源码后,在「添加插件」里填该目录的绝对路径。装好后刷新窗口;client.js 可走 bundle 热更新,Host 半改动需在 Harness 重启或重载插件后生效。

典型用法

侧栏

右键目标会话 →「删除会话」→ 在对话框中确认是否永久删除。

HTTP

默认 Host 监听示例端口为 3080(以你本地 profile 为准):

curl -s http://127.0.0.1:3080/dsh-session-cleaner/health
curl -s "http://127.0.0.1:3080/dsh-session-cleaner/sessions?limit=50"
curl -s -X POST http://127.0.0.1:3080/dsh-session-cleaner/delete \
  -H 'content-type: application/json' \
  -d '{"sessionId":"session-...","permanent":false}'

会话仍开着时,需在 JSON 中加 "force": true 先关闭再删(与 UI 里第二次点「关闭并删除」等价)。

成功时返回形如:

{ "ok": true, "sessionId": "session-…", "title": "…", "cwd": "/…", "workspace": "…", "mode": "trash", "trashPath": "…", "closed": false, "removed": ["…", "…"] }

常见错误码包括:SESSION_LIVE(409,需 force)、SESSION_NOT_FOUND(404)等,详见 README 错误表。

配置

在 profile 的 cordis.patch.yml(或重装时的 config)里可覆盖:

- insert:
    - id: dsh-session-cleaner
      name: 'dsh-session-cleaner'
      config:
        basePath: /dsh-session-cleaner   # HTTP 前缀,以 / 开头、不以 / 结尾
        permanent: false                  # true = 所有删除都不进回收站

适用场景与注意

适合需要从 DSH 内部彻底移除会话记录、而不只是归档的开发者。默认进回收站,降低误删成本;需要批量或自动化时可走 Agent 工具或 HTTP。

插件以当前 dsh 进程权限读写 ~/.dsh(或 $DSH_HOME)下的 session 与回收站目录。安装前建议浏览 源码 与 MIT 许可证。维护者在 README 中说明:macOS 上已在 dsh 0.2.1-rc.4 端到端实测;Linux 与 macOS 同属 POSIX 路径且 CI 跑离线测试;Windows 做了路径与重试加固,但 README 写明尚未在真 Windows + dsh 上完整端到端验证。

SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系;DSH 生态本身是「一切皆插件」,本插件是其中一条可选能力。

结尾

dsh-session-cleaner 补上了 DSH 侧栏「删除会话」这一环:磁盘目录、projcache、workspace 记账与多窗口 UI 一次对齐。需要安装或 issue 时,可参考 SkillHub 目录页 与 GitHub 仓库。

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

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

小夜