前言¶
DSH 侧边栏的删除是「假删除」。删除一条对话时,Harness 只是把它归档,日志还留在磁盘上,下次会重新出现在虚拟的 Ungrouped 分组里;删除一个工作区时,也只注销了注册信息,它下面的对话原样保留。这类残留会随时间堆积,侧边栏越来越脏,而在磁盘里找不到对应关系,清理起来没有可靠入口。
下面介绍的 xuenann/dsh-workspace-purge 就是针对这一痛点的插件:它直接把会话日志、投影缓存和工作区注册一起删除,工作区目录也可以一并放进回收站。
这是什么¶
dsh-workspace-purge 是一个 DSH 插件,维护者是 xuenann,归类为「记忆」。它解决的问题是:内置的删除操作只做归档和注销,真正占用磁盘的数据还在;本插件把删除落到实处,并且把删除目标移入回收站,保证手滑之后可以恢复。它目前没有进入 awesome-dsh-plugin 注册表,星标为 0,属于很新的社区项目。
删除的是什么¶
插件只处理四类数据,全部位于 DSH_HOME 之下:
| 位置 | 内容 |
|---|---|
~/.dsh/sessions/<cwd-slug>/<session>/ |
会话日志 session.v4.jsonl.zstd |
~/.dsh/storages/session_projcache/sessions/<session>.json |
标题与行投影缓存 |
~/.dsh/storages/workspace.json |
工作区注册记录,以及该会话的归档/置顶标记 |
| 工作区目录(可选) | 仅在勾选并重新输入目录名后删除 |
在 Windows 上,这些内容会先移入回收站,出错可以还原;其他平台则直接删除,没有回收站这一步。
三种删除入口¶
1、侧边栏底部按钮。按钮文字是「删除数据 / Delete data」,点开后是一个面板,列出所有工作区及其对话、已归档对话、以及不属于任何工作区的对话。可以勾选要删的内容,也可以对单行使用删除按钮。
2、对话菜单。每条对话的「…」菜单会多出一行,只删除该条对话,点之前会先弹确认框。
3、Agent 工具。同一套代码还暴露成 workspace_purge 工具,助手可以带同样的保护条件执行 list、delete-sessions、delete-workspaces。
一个硬约束:当前正在对话的那条不会被删。面板会把它标出来,Host 端也会拒绝,因为删掉自己正在写的日志,运行中的会话就没有了依据。
实现要点¶
插件没有复用 sessionPersistence(它没有删除能力),也没有只依赖 workspaceRegistry.delete。按 README 的描述,删除单条对话的顺序是:停止 agent、断开实时 store 条目、清掉归档/置顶标记、把日志目录和投影记录移入回收站、最后从所在工作区里摘掉。删除工作区则是先删它下面的对话,再删注册记录,最后(如果勾选了)删目录。
目录接收前有三类检查:不能是盘符根目录,不能是 Harness home 的上级,也不能是其他已注册工作区的父目录。
回收站不可用、或 PowerShell 拒绝时,条目会被重命名为 <name>.purge-<timestamp>,而不是悄悄留下,因此不会残留半删除状态的记录。
安装与启用¶
插件尚未进入 awesome-dsh-plugin 注册表,目前不能从 Plugins → Discover 直接安装。需要自行打包并加入 profile:
npm pack
dsh plugin --profile desktop add ./dsh-workspace-purge-1.0.0.tgz
npm pack 生成的是 dsh-workspace-purge-1.0.0.tgz,第二行命令按这个实际产物执行,不要凭名称改写成 dsh plugin add github:xuenann/dsh-workspace-purge。注册表收录之后,可以从 Harness 内的 Plugins → Discover 安装。
适用场景与注意¶
适合在本地 DSH 里长期积累对话、被归档和半删除数据困扰的使用者,尤其是 Windows 环境——回收站提供了删除后的兜底,这一点比非 Windows 平台安全得多。
使用前有几点要留意:
- 插件以当前 dsh 进程的权限运行,能接触到
DSH_HOME下的这些路径。安装前先检查源码和许可证(仓库标注为 MIT),确认目录约束符合你自己的工作区布局。 - 非 Windows 平台没有回收站,删除是永久的,点之前先确认勾选范围。
- 插件不联网、不采集遥测、不碰凭据,只操作上面列出的四个路径。
- 卸载插件会把侧边栏恢复成默认行为,但不会做数据迁移或改写,之前删掉的东西也不会回来。
- 开发或调试时可以用
node --check index.js、node --check client.js做语法检查,node test/host-sim.mjs在内存里跑 Host 端逻辑;tools/purge-orphans.mjs是清理「不属于任何工作区」对话的一次性脚本,不加--apply时只做 dry run。
结尾¶
内置删除只是把数据换个地方放着,侧边栏干净了,磁盘上还在。dsh-workspace-purge 把会话日志、投影缓存、工作区注册统一纳入删除路径,并提供回收站兜底,把「删掉」这件事真正做完。
目录页:https://www.skillhub.cn/plugins/xuenann/dsh-workspace-purge
GitHub:https://github.com/xuenann/dsh-workspace-purge