只给已归档对话的菜单加一项删除,确认后把会话日志目录、投影缓存、归档与置顶标记、工作区记账一起清掉。
安装
# Release 预构建包
dsh plugin --profile web add "https://github.com/zsenpro/DSH-Quickly-clear/releases/latest/download/DSH-Quickly-clear.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:zsenpro/DSH-Quickly-clear
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness 的侧边栏插件:在已归档对话的 ⋯ 菜单里加一项「删除对话」,连会话日志、投影缓存和工作区记账一起清掉。未归档的对话不会出现这一项。
English: a DSH (DeepSeek Harness) plugin that adds Delete conversation to an archived Session's ⋯ menu and removes the session log, its projection cache and its workspace booking along with it. Sessions that are not archived never see the row.
为什么需要它
DSH 有归档,没有删除。归档只是把对话从列表里挪走,磁盘上一份没少:
~/.dsh/sessions/<project>/<sessionId>/session.v4.jsonl.zstd
~/.dsh/storages/session_projcache/sessions/<sessionId>.json
~/.dsh/storages/workspace.json # archivedSessionIds / sessionIds
Host 服务里也确实没有删除口子:workspaceRegistry 能归档、置顶、改名、把会话从工作区摘出来;sessionPersistence 只能 create / open / flush / stat / list;内存里的 sessions 连删都不谈。这个插件补的就是这一块。
装上
要求:DSH 桌面版或 dsh web(走 profile 机制),Node >= 20。
把仓库放到任意目录,然后二选一。
首选:插件管理器
plugin_manager install_bundle target=<克隆目录>
install_bundle 会给 profile 加依赖并挂上 bundle。如果你的 profile 里已经有需要本地编译的依赖(比如带 cpu-features 的包),pnpm 那步会卡在 install script 批准上,那就走下面的手工登记。
手工登记(本地 link)
跟 @yg/dsh-session-mover 之类的本地插件一个形态:
$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 删文件碰不到它,不重挂那一行会赖着不走。
它删什么
POST /DSH-Quickly-clear/api/delete,按顺序:
- 所有 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 缓存(清扫期间重建的投影可能又读过 header)
先清记账再删文件是有意的:文件删不掉(Windows 上句柄没放)时会话仍然能解析、仍然显示在侧边栏里,不会留下一个指向空处的行。
正在运行的会话会被拒(session-live)。归档本身会停掉会话,正常路径撞不上。
它不删什么
attachments/v1/objects/:内容寻址,多个会话共用同一份字节,没法按会话归属。storages/cost-meter/ledger.json:按会话记账的共享文件,动它的风险大于收益;删掉会话后那笔花费仍留在历史账单里。sessionQuery的 SQLite 全文索引:服务没有删除方法,搜索里可能还留着陈旧命中。
端点
给二次开发用的两个口子,都要过 ctx.connection.requestRejection(同源 / 可信连接校验):
| 方法 | 路径 | body | 作用 |
|---|---|---|---|
| POST | /DSH-Quickly-clear/api/delete |
{"sessionId":"..."} |
执行清扫,返回删掉的路径与记账 |
| POST | /DSH-Quickly-clear/api/inspect |
{"sessionId":"..."} |
只读:列出命中的日志目录、缓存文件、是否在运行 |
调用记录写在 ~/.dsh/DSH-Quickly-clear.log。
验证
node verify.js
19 项自检,分两层,全在临时目录里跑,不连 Host、不碰真实数据:
- 纯函数:
encodeSegment对普通 uuid / IM 形态 id(:→~003A)/~/./..;findSessionFolders命中与未命中;projectionCacheFiles只认本会话的文件。 - 清扫流程(桩服务替
sessions/workspaceRegistry/sessionPersistence):记账摘 id、归档与置顶标记清除、日志目录与投影缓存被删、空 project 收掉、registry 四个缓存清空、运行中的会话被拒且文件不动、只有记账没有日志也能收尾。
实现备忘
- 菜单行注册进
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,order: 940。Esc、点背景、取消都能退;删除中两个按钮都禁用。 - 不
require任何 Harness Client 包(@deepseek-ai/dsh-client-ui-primitives之类),控件、图标、hover 样式自己写,颜色只吃--dsw-alias-*token 并带硬编码回退值。 - 会话目录名的编码跟 JSONL store 保持一致,见
encodeSegment:~与非[A-Za-z0-9._-]转~XXXX,.与..特判。
License
MIT
链接
同类插件
Minglink/dsh-infinite-gen-4★ 3781
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
ranxianglei/billion-context★ 3598
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
liangmianya/dsh-synapse★ 641
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
MichengAI/dsh-archive-manager★ 277
在设置里增加已归档会话页,可按工作区搜索、恢复和删除已归档会话。
Nwflower/dsh-chat-import★ 275
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
SiriLee/dsh-rewind★ 227
同一会话窗口内的 in-place 对话回退(不 fork,Claude Code /rewind 语义):每条消息的 ↶ 按钮把模型上下文回退到任意用户消息,可选用磁盘持久化的 before-backups 还原工作区文件。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。