前言¶
在 DeepSeek Harness(DSH)里,归档会话只是 workspace 存储域 v2 里的一组 archivedSessionIds。侧边栏可以切换「显示 / 仅显示已归档」,也可以在单行上取消归档,但没有单独页面把已归档会话列在一起做搜索、筛选和批量操作。
更麻烦的是:DSH 全栈长期没有「删除会话」的公开 API。dsh-session-persistence 等组件的文档都写明没有 deletion / retention 能力;仓库里与删除相关的逻辑也主要是搜索索引对账,而不是清掉磁盘上的会话。若你归档了很多旧会话,想真正腾出空间或整理列表,往往缺少一条清晰路径。
dsh-archive-manager 由社区维护者 YOGEMOW 发布,分类属于 DSH 生态目录中的「记忆」类插件。它提供一个类似 Codex「Archived chats」的设置页,用来集中查看、搜索、筛选、取消归档,并对已归档会话做不可恢复的物理删除。
这是什么¶
一句话:DSH 的 已归档会话管理器——宿主侧提供归档列表与删除编排,客户端注册 设置 → 已归档的聊天(section id 为 archived-sessions,与 DSH 设置外壳预留的归档入口一致)。
插件当前版本为 0.1.0,许可证 MIT。SkillHub 目录页:YOGEMOW/dsh-archive-manager;源码与说明:GitHub 仓库。
核心功能¶
下面按 README 中已说明的能力归纳;实现上分为宿主 HTTP 路由与客户端设置页。
富列表与筛选¶
- 宿主
GET /dsh-archive-manager/archived返回已归档会话的富列表(标题、项目、时间、占用、是否在运行等)。 - 设置页支持搜索、范围与项目筛选、分组,以及行级 / 批量操作。
取消归档¶
- 宿主
POST /dsh-archive-manager/unarchive取消归档,行为与侧边栏取消归档一致,但在集中页面里操作更方便。
永久删除¶
DSH 原先没有删除会话 API;本插件在宿主侧编排删除,包括单个、批量与全部删除(POST /dsh-archive-manager/delete、delete-all 等路由)。删除语义要点如下:
- 只跳过真正在跑的会话:结合
agents.get(id).status === 'running'与workspace/session-activity(turn / job / subagent / schedule),与Workspace.archiveSession的准入检查同源;仅「已加载但空闲」的会话可以删除。 - 会话仍驻留内存时保留归档记录:避免先取消归档再删文件导致会话重新出现在侧边栏;删除后若仍驻留内存,归档集合会留下「墓碑」,页面底部单列「已删除的残留记录」,重启 DSH 后可清理。
- 删除后广播
api-session/removed:让已打开窗口的会话列表快照立刻更新。 - 删除会话目录与投影缓存:经
sessionPersistence.locate()等路径定位;投影缓存优先走存储域删除,避免裸删文件后被 checkpoint 写回。 - 不删除全局附件对象存储(
~/.dsh/attachments):内容寻址的共享对象可能被其他会话引用。
列表排序因归档集合不保存归档时间,按「最近活动时间」(标题事件、日志 mtime、创建时间的最大值)排序。没有「恢复已删除会话」的逆向操作。
安装与启用¶
从 GitHub 安装(推荐)¶
仓库已提交 lib/ 与 client/ 构建产物,从 Git 安装无需本地先构建:
dsh plugin --profile desktop add github:YOGEMOW/dsh-archive-manager
安装后打开 设置 → 已归档的聊天。
从本地目录安装¶
若你自行改源码,需先构建再装入 profile:
npm install
npm run build
dsh plugin --profile desktop add "<本地仓库路径>"
卸载示例:
dsh plugin --profile desktop remove dsh-archive-manager
生效范围¶
- 新增或替换包(改
package.json、装依赖)需要重启 DSH 进程。 - 宿主半
lib/index.js的改动同样只在下一次启动时加载。 - 客户端
client/client.js重新构建后,已打开页面可由dsh-client-hmr轮询热更新。
可选配置¶
在 profile 的 cordis.patch.yml 中可配置(示例来自 README):
- id: dsh-archive-manager
name: "dsh-archive-manager"
config:
skipRunningSessions: true # 默认 true:跳过仍在活动的 turn/job/subagent/schedule
maxDeleteBatch: 500 # 单次请求最多删除多少个会话
旧键名 skipLiveSessions 仍兼容,语义已从「跳过已加载」改为「跳过在运行」。
典型用法¶
- 按上文命令安装插件并重启 DSH(若刚安装或改了宿主包)。
- 在 DSH 中如常将会话归档(侧边栏或现有归档流程)。
- 打开 设置 → 已归档的聊天。
- 用搜索、项目与范围筛选找到目标会话;需要恢复可见性时使用取消归档。
- 确认不再需要后,使用单行删除、批量删除或「全部删除」;界面在未勾选确认前不会发删除请求。若提示跳过运行中会话,需等待 turn / job 等结束后再试。
- 若底部出现「已删除的残留记录」,在会话不再驻留内存后(通常需重启 DSH)再点「清理记录」,从归档集合移除墓碑。
适用场景与注意¶
适合谁
- 长期用 DSH 做智能体或项目开发、归档会话较多,需要集中检索与整理的人。
- 需要在归档范围内永久删除磁盘会话与投影缓存、释放空间的人(理解删除不可恢复)。
使用前请注意
- 插件以当前 dsh 进程权限运行,删除会直接操作
<DSH_HOME>/sessions/下目录与相关缓存;安装前应阅读 源码 与 MIT 许可证,确认行为符合你的备份与合规要求。 - 运行中(含 job / subagent / schedule)的会话不会被删除;删除仍驻留内存的会话会留下墓碑,需重启后清理。
- DSH 生态强调「一切皆插件」;SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系,本文介绍不代表官方背书。
结尾¶
dsh-archive-manager 补上了 DSH 在「已归档会话集中管理」与「物理删除」上的空白:设置页负责搜索与操作,宿主侧负责与 DSH 归档模型、会话目录和客户端列表同步一致的删除编排。若你已在 desktop profile 使用 DSH,可按 README 中的安装命令接入,并在 设置 → 已归档的聊天 中维护归档池。
- 目录页:https://www.skillhub.cn/plugins/YOGEMOW/dsh-archive-manager
- GitHub:https://github.com/YOGEMOW/dsh-archive-manager