在 DeepSeek Harness 中删除会话后,清理 billion-context 快照;cost-meter 账本记录的清理默认关闭,可在设置里打开。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-session-leftover-purge
# Release 预构建包
dsh plugin --profile web add "https://github.com/FenrirCait/dsh-session-leftover-purge/releases/latest/download/dsh-session-leftover-purge.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:FenrirCait/dsh-session-leftover-purge
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。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
简体中文 | English
删掉一个会话后,DeepSeek Harness 自己的记录清干净了,但 billion-context 的快照和索引、
cost-meter 的账本明细还留着。于是 bili 面板里还能看到那条会话,它的正文也还在
index.db 里。这个插件订阅 DSH 的 api-session/removed 事件,把剩下的部分补完。
安装
# 最省事:从 npm 装最新版,不需要 git,也不需要访问 GitHub
dsh plugin add dsh-session-leftover-purge
# 默认:永远装 main 的最新提交(需要本机有 git)
dsh plugin add github:FenrirCait/dsh-session-leftover-purge
# 需要锁死版本时,把 vX.Y.Z 换成 tags 页里的任意 tag
dsh plugin add github:FenrirCait/dsh-session-leftover-purge#vX.Y.Z
# 不需要 git:永远取最新一版的 tgz
dsh plugin add https://github.com/FenrirCait/dsh-session-leftover-purge/releases/latest/download/dsh-session-leftover-purge.tgz
四条命令都不会随版本变化,直接抄就行。
第一条走 npm registry,最省事也最稳;中间两条由 pnpm 走 git 协议,目标机器必须有 git;
最后一条是普通 HTTPS 下载,只要求能访问
GitHub。每次发版都会同时上传两个附件:带版本号的 …-X.Y.Z.tgz 和固定名的
dsh-session-leftover-purge.tgz,后者就是 latest/download/ 指向的那个。
装完必须完全退出并重新打开 DSH。 host 半侧由 Loader 在进程启动时装载,运行中新装的包 不会挂进当前进程。刷新页面只更新设置页里的表单,不会让清理逻辑生效。
依赖
必需:DeepSeek Harness 本身(>= 0.2.0-rc.1 < 0.3.0-0)。插件不跑常驻服务;它唯一 import
的第三方包 @deepseek-ai/schemastery 由宿主提供——在 peerDependencies 里声明为 optional,
DSH 自带的 dsh-settings 本来就会装它,不需要额外安装任何东西。
功能上配合(缺了不会报错,只是对应能力自动跳过):
| 组件 | 缺失时的表现 |
|---|---|
@michengai/dsh-archive-manager |
没有「删除会话」入口,也不会触发清理,只能靠开机对账 |
billion-context(bili) |
快照与索引两项跳过,日志记 bili-sessions-root-missing |
dsh-cost-meter |
账本与明细文件两项跳过,日志记 ledger-missing / cost-files-root-missing |
也就是说:装上就能跑,缺谁就少清谁,不会因为别的插件没装而加载失败。
使用
装好后不需要任何操作。默认只做两件事:清掉 bili 的 JSON 快照和 index.db 里的行。
| 项目 | 默认 | 说明 |
|---|---|---|
| 总开关 | 开 | 关掉后不再清理,也不再监听删除 |
| bili JSON 快照 | 开 | 删掉 bili 面板里该会话的那一条 |
| bili SQLite 索引 | 开 | 删掉 bili 索引里的行;删前自动备份,可回滚 |
| cost-meter 账本明细 | 关 | 只删 cost-meter 账本里的明细行,总额不动 |
| cost-meter 原始明细文件 | 关 | 删掉 cost-meter 每轮用量的凭证文件 |
| 开机回收 index.db 空间 | 关 | 回收已删行占用的空间;失败不影响数据 |
| 备份保留天数 | 7 天 | 过期即删;0 = 永久保留 |
| 演练模式 | 关 | 只写日志,不移动也不删除 |
| 开机对账 | 开 | 启动时扫描孤儿快照并写报告 |
| 自动清理孤儿 | 关 | 对账发现孤儿就直接清理 |
| 开机延迟 | 8000 ms | 开机对账前等待多久 |
开关在 设置 → 插件 → 插件管理 → dsh-session-leftover-purge。改动即时生效,不用重启。
「恢复最近备份 / 删除全部备份 / 立即备份 cost-meter 账本」三个字段是触发器:填入一个新数字 并保存就执行一次(DSH 的表单没有按钮,只能这样表达动作)。
备份与恢复
每次清理都在 ~/.dsh/storages/session-leftover-purge/trash/<时间戳>/ 留一份可还原的副本:
index.db/index.db-wal/index.db-shm—— 删行前的完整数据库session-…__*.json—— 移走的 bili 快照ledger.json—— 改账本前的完整副本(如果动过账本)cost-files/—— 删掉的 cost-meter 明细文件
恢复入口就是上面那个「恢复最近备份」触发器。恢复时如果 bili 正持有数据库锁,会把文件写成
index.db.restored-<时间戳>* 让你手动换,不会强行覆盖。
日志
~/.dsh/storages/session-leftover-purge/:
purge.log—— 每次启动一行ready v…,每次清理 / 恢复 / 删备份各一行orphans.json—— 最近一次对账结果triggers.json—— 已执行过的触发器数字
边界
- 只处理通过 archive-manager 删除会话的场景;其它途径靠开机对账发现。
- bili 的
index.db属于另一个进程,遇到SQLITE_BUSY会跳过,下次再处理。 - 不碰 DSH 的附件、不碰 Electron 的 localStorage。
- 任何失败都只写日志,不抛给 DSH 的删除流程。
MIT License.
链接
同类插件
Minglink/dsh-infinite-gen-4★ 3277
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
ranxianglei/billion-context★ 2276
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
liangmianya/dsh-synapse★ 557
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
Nwflower/dsh-chat-import★ 246
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
MichengAI/dsh-archive-manager★ 198
在设置里增加已归档会话页,可按工作区搜索、恢复和删除已归档会话。
SiriLee/dsh-rewind★ 170
同一会话窗口内的 in-place 对话回退(不 fork,Claude Code /rewind 语义):每条消息的 ↶ 按钮把模型上下文回退到任意用户消息,可选用磁盘持久化的 before-backups 还原工作区文件。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。