前言¶
在 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 仓库。