dsh-archive-manager:DSH 已归档会话集中管理

前言

在 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 等路由)。删除语义要点如下:

  1. 只跳过真正在跑的会话:结合 agents.get(id).status === 'running' 与 workspace/session-activity(turn / job / subagent / schedule),与 Workspace.archiveSession 的准入检查同源;仅「已加载但空闲」的会话可以删除。
  2. 会话仍驻留内存时保留归档记录:避免先取消归档再删文件导致会话重新出现在侧边栏;删除后若仍驻留内存,归档集合会留下「墓碑」,页面底部单列「已删除的残留记录」,重启 DSH 后可清理。
  3. 删除后广播 api-session/removed:让已打开窗口的会话列表快照立刻更新。
  4. 删除会话目录与投影缓存:经 sessionPersistence.locate() 等路径定位;投影缓存优先走存储域删除,避免裸删文件后被 checkpoint 写回。
  5. 不删除全局附件对象存储(~/.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 仍兼容,语义已从「跳过已加载」改为「跳过在运行」。

典型用法

  1. 按上文命令安装插件并重启 DSH(若刚安装或改了宿主包)。
  2. 在 DSH 中如常将会话归档(侧边栏或现有归档流程)。
  3. 打开 设置 → 已归档的聊天。
  4. 用搜索、项目与范围筛选找到目标会话;需要恢复可见性时使用取消归档。
  5. 确认不再需要后,使用单行删除、批量删除或「全部删除」;界面在未勾选确认前不会发删除请求。若提示跳过运行中会话,需等待 turn / job 等结束后再试。
  6. 若底部出现「已删除的残留记录」,在会话不再驻留内存后(通常需重启 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜