前言¶
DeepSeek Harness(dsh)自带的工作区删除入口藏在工作区分组标题的悬停菜单里,会话则只有「归档」没有删除;框架层面也没有会话删除的公开 API。这导致侧栏上堆积大量已关闭的会话记录,本地日志与投影缓存也持续占用磁盘空间。dsh-sidebar-delete 在侧栏补上了「真删」能力:删除会话时会连带清理本地日志目录、投影缓存,并从工作区登记中移除引用;子会话会级联删除;同时提供常显的会话与工作区管理面板。
这是什么¶
xqh-jason/dsh-sidebar-delete 是一个客户端插件,为 DeepSeek Harness Web 侧栏增加会话删除与管理工作区的能力。零运行时依赖,通过 Host 路由与四个槽位注册扩展框架。当前版本 0.1.7,MIT 许可证。
核心功能¶
删除会话¶
会话行悬停出现垃圾桶图标;会话行「…」菜单中也有「删除会话」选项。确认后删除本地会话日志目录(<DSH_HOME>/sessions/<项目目录>/<sessionId>/)与投影缓存(<DSH_HOME>/storages/session_projcache/sessions/<sessionId>.json),并从侧栏即时移除该行(不刷新页面)。删除操作不可恢复。
子会话(fork 与 subagent)会级联删除。若会话有「开着的回合」(正在运行中的请求),或其子会话有开着的回合,删除请求会被拒绝,不做任何改动。
工作区与未分组会话管理面板¶
侧栏底部(设置旁)常显「管理工作区与会话」入口。面板按工作区列出会话,按目录列出未分组会话,每行右侧可单独删除;未分组的目录旁可「注册为工作区」。
工作区删除沿用官方语义:只注销工作区登记,文件夹与会话全部保留,其会话落到「未分组」。
面板只列出磁盘上仍有日志的会话:删除后立即从面板消失;若有宿主内存中残留的幽灵会话,面板底部会提示「重启 dsh 后宿主会释放它们」。
每行可辨识信息¶
- 标题取真正持久化的会话标题(无标题显示「未命名会话」,不再回退成目录名)。
- 副行显示短 id + 本地时间。
- 徽标区分「当前打开 / 运行中 / 子代理 / 空会话」。
- 子代理与 fork 子会话嵌在父会话下面,父行标出「含 N 条子会话」。
定时清理未分组会话(默认关闭)¶
默认关闭,需在插件配置中启用。每天(默认 12:25)自动删除不在任何工作区目录下的会话;有开着的回合的会话会被跳过。
配置示例:
{
"enabled": true,
"time": "12:25",
"workspaceScope": "tree"
}
enabled:只有严格为true时生效。time:本机时区的HH:MM,默认12:25。非法值(如24:00、12:60)会使整条配置无效,保持关闭。workspaceScope:tree(默认)把cwd在工作区路径之下(含等于)的会话算已分组;exact只认路径本身。
安装与启用¶
已发布在 npm,包名为 dsh-sidebar-delete。在 Harness Desktop / Web 中:设置 → 插件,安装此包。插件管理器会从 npm 拉取并写入 profile 的 dsh.profile.bundles。
命令行安装(CLI 管理的 profile):
dsh plugin --profile <profile> add dsh-sidebar-delete
安装后需重启 dsh:Host 半只在启动时加载,改它必须重启;只改浏览器半刷新页面即可。
从本地目录安装(开发用):
dsh plugin --profile <profile> add /绝对路径
兼容性¶
在 dsh 0.2.1-rc.2(@deepseek-ai/dsh-client-ui-workspace@0.2.1-rc.2)上开发与实测,需要 Node ≥ 22.19。
插件依赖两件框架没有公开承诺的东西:会话日志的磁盘布局、以及 api-session/removed 事件。dsh 升级后可能失效;失效时只影响删除本身,不影响侧栏其它功能。
安全边界¶
Host 半发布两条路由:
POST /dsh-sidebar-delete/session:删除会话POST /dsh-sidebar-delete/sessions:只读探测哪些会话仍有日志(最多 512 个 id,不删文件、不广播)
两条路由共用准入顺序:
- 仅
POST+application/json,body 上限 64 KiB。 - 若宿主提供
connection.requestRejection且部署接受非 loopback authority,由宿主门禁裁决。 - 否则退回插件自己的围栏:Host 必须是 loopback,Origin 存在时须与 Host 同源。
已知弱点:在 loopback-only 的 Desktop 部署上,这条路由不校验宿主登录。因此在该部署上任何本机进程都能调用它——对单用户机器不构成提权,但多用户机器上是真实弱点。
插件不往 document.body 写 DOM、不读别的插件的 DOM、不 require 任何 Harness Client 包。
已知限制¶
- 归档集合在启动时不会自动剪掉已不存在的 id(工作区成员会)。插件在删除时会清掉两者;若会话是在别的进程或外部被删的,登记仍在——对那个 id 再发一次删除请求即可(幂等)。
- 侧栏里有标题的幽灵会话在页面重载后仍可能回到侧栏:宿主的
session/list会并入内存中尚未释放的 live 会话,而框架没有公开的释放 API。重启 dsh 后宿主释放会话,侧栏才会干净。 - 会话目录删除后,它所在的项目目录(
--<cwd>--)会留下空壳,与框架自身行为一致。 - 没有批量删除,一次一条;也没有给模型提供 tool。
卸载¶
在插件管理器中移除 dsh-sidebar-delete(或从 profile 的 dsh.profile.bundles 移除)后重启。包目录可以留着。
开发与发布¶
Node 版本要求 >=22.19.0。验证脚本:
npm run verify
目录结构:
index.js:Host 半client.js:浏览器半(Module Loader 包,无构建)src/:纯逻辑,可单测test/:测试文件locale/:国际化文件icon.svg:图标
适用场景与注意¶
适合需要清理已关闭会话、管理大量工作区与未分组会话的 dsh 用户。插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。已删除的会话日志不会回来,这是本功能的语义。
总结¶
dsh-sidebar-delete 在侧栏补上了「真删」能力,让清理会话日志、管理工作区变得可见且可控。零运行时依赖,安装简单,配置灵活。
- 目录页:https://www.skillhub.cn/plugins/xqh-jason/dsh-sidebar-delete
- GitHub:https://github.com/xqh-jason/dsh-sidebar-delete
- npm:https://www.npmjs.com/package/dsh-sidebar-delete