前言¶
DeepSeek Harness(DSH)可以把对话归档,从侧边栏列表里挪走,但 Host 侧并没有「删除会话」的入口:workspaceRegistry 能归档、置顶、改名、把工作区里的会话摘出来;sessionPersistence 只有 create / open / flush / stat / list;磁盘上的会话日志、投影缓存和工作区记账文件仍会留在 ~/.dsh 下。若你本地试过很多归档对话、想真正腾出空间或清理索引,只能手动删目录,还容易漏掉 workspace.json 里的 archivedSessionIds / sessionIds,下次快照又可能把会话推导回列表。
DSH-Quickly-clear 是维护者 zsenpro 发布的客户端插件(GitHub:zsenpro/DSH-Quickly-clear),在已归档对话的 ⋯ 菜单里增加「删除对话」,通过 Host API 按固定顺序清记账、删日志目录和投影缓存,并在成功后刷新页面。未归档的对话不会出现该菜单项。
这是什么¶
一句话:DSH 侧边栏插件,给已归档 Session 的 ⋯ 菜单加「删除对话」,连同会话日志、投影缓存和工作区记账一起清掉。
- 名称:
DSH-Quickly-clear(目录页:zsenpro/dsh-quickly-clear) - 分类:客户端
- 许可证:MIT(
package.json中版本为 1.0.1) - 生态说明:DSH 奉行「一切皆插件」;SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,本文仅介绍该开源插件本身。
核心功能¶
侧边栏与确认流程¶
- 菜单项注册在
sidebar.workspaces.session.menu.item,cell idquickly-clear,order: 500(出厂菜单中 pin 100、rename 200、fork 300、archive 400、session-id 450 之后)。 - 可见性依赖
useWorkspaces(...).archivedSessionIds:未归档会话不渲染该行。 - 确认框注册在
shell.overlay,cell idquickly-clear-dialog;卡片会展示会话标题与删除后果,确认「永久删除」后执行清扫;删除成功后页面会自动刷新(侧边栏会话目录是客户端快照,Host 删文件后不重挂会残留一行)。
Host 端清扫(POST /DSH-Quickly-clear/api/delete)¶
按 README 描述,顺序大致为:
- 所有 workspace 记录的
sessionIds去掉该sessionId(workspace.mutate写盘)。 unarchiveSession+unpinSession。- 清空 registry 的
headers/sessionPaths/missingSessionPaths/invalidSessionPaths四个缓存,避免下次从 cwd 索引把会话推回工作区。 - 删除
sessions/<project>/<encodeSegment(sessionId)>/整目录,project 目录空则一并删除。 - 删除
storages/session_projcache/sessions/<sessionId>.json。 - 再次清空 registry 缓存。
正在运行的会话会被拒绝(session-live);归档通常会停掉会话,正常路径不会撞上。
涉及的主要路径¶
归档后磁盘上仍可能存在的文件包括:
~/.dsh/sessions/<project>/<sessionId>/session.v4.jsonl.zstd
~/.dsh/storages/session_projcache/sessions/<sessionId>.json
~/.dsh/storages/workspace.json # archivedSessionIds / sessionIds
(实际目录名经 encodeSegment 编码,与 JSONL store 一致。)
它不删什么¶
attachments/v1/objects/:内容寻址,多会话共享,无法按会话归属删除。storages/cost-meter/ledger.json:按会话记账的共享账本,删会话后历史花费仍保留。sessionQuery的 SQLite 全文索引:服务无删除 API,搜索里可能仍有陈旧命中。
二次开发端点¶
均需通过 ctx.connection.requestRejection(同源 / 可信连接校验)。调用记录写入 ~/.dsh/DSH-Quickly-clear.log。
| 方法 | 路径 | body | 作用 |
|---|---|---|---|
| POST | /DSH-Quickly-clear/api/delete |
{"sessionId":"..."} |
执行清扫,返回删掉的路径与记账 |
| POST | /DSH-Quickly-clear/api/inspect |
{"sessionId":"..."} |
只读:列出命中的日志目录、缓存文件、是否在运行 |
安装与启用¶
环境要求:DSH 桌面版或 dsh web(走 profile 机制),Node >= 20。
将仓库放到任意本地目录后,二选一(资料原文未提供 dsh plugin add github:... 一类命令,请勿凭名称拼接)。
首选:插件管理器¶
plugin_manager install_bundle target=<克隆目录>
install_bundle 会给 profile 加依赖并挂上 bundle。若 profile 里已有需本地编译的依赖(例如带 cpu-features 的包),pnpm 可能在 install script 批准处卡住,可改用手工登记。
手工登记(本地 link)¶
与 @yg/dsh-session-mover 等本地插件形态相同。示例为 Windows PowerShell:
$src = '<克隆目录>'
$profile = Join-Path $env:USERPROFILE '.dsh\profiles\desktop'
New-Item -ItemType Junction -Path (Join-Path $profile 'node_modules\DSH-Quickly-clear') -Target $src
编辑 $profile\package.json 两处(路径用正斜杠):
{
"dependencies": {
"DSH-Quickly-clear": "link:<克隆目录>"
},
"dsh": {
"profile": {
"bundles": [
// ... 其它 bundle
"DSH-Quickly-clear"
]
}
}
}
改动 index.js 需重启 DSH Host;只改 client.js 可走 HMR。
卸载¶
从 bundles 删除对应行、删除依赖项、删除 Junction,并删除 ~/.dsh/DSH-Quickly-clear.log。
典型用法¶
- 对目标对话执行归档(
⋯→ 归档对话)。 - 再次打开该对话的
⋯菜单,末尾会出现「删除对话」。 - 点击后在确认卡片中核对标题与后果,选择「永久删除」。
- 成功后页面刷新,侧边栏与磁盘数据与插件清扫逻辑一致。
仓库内可用自检脚本(临时目录、不连 Host、不碰真实数据):
node verify.js
README 说明为 19 项自检,覆盖 encodeSegment、findSessionFolders、清扫流程桩服务等。
适用场景与注意¶
适合谁
- 长期在 DSH 里积累大量已归档对话,希望从磁盘和工作区记账中彻底移除,而不是只隐藏列表项。
- 需要在删除前用
/api/inspect查看将命中的路径,或基于同插件 API 做工具集成。
使用前请知悉
- 插件以当前 DSH Host 进程权限读写
~/.dsh;安装前应阅读源码与 MIT 许可证,确认删除范围符合预期。 - 删除不可恢复(至少插件不会恢复附件对象、cost-meter 账本与全文索引)。
- 仅已归档会话显示删除入口;若菜单未出现,先完成归档步骤。
结尾¶
DSH 自带归档但没有一等公民的「删除会话」;DSH-Quickly-clear 用客户端菜单 + Host API 补上这条路径,并刻意先改工作区记账再删文件,降低 Windows 句柄未释放时会话仍挂在侧边栏的风险。若你在本地维护 DSH 会话数据,可在归档后用它做一次可确认的永久清理。
- 目录页:https://www.skillhub.cn/plugins/zsenpro/DSH-Quickly-clear
- 源码与 README:https://github.com/zsenpro/DSH-Quickly-clear