dsh-auto-archive:闲置会话自动归档与投影缓存清理

前言

DeepSeek Harness(DSH)桌面版或 Web 版用久了,会话列表会堆满长期不再打开的线程。手动逐条归档费时,而会话相关的派生数据(例如投影缓存)也会占磁盘。若希望「列表变干净、缓存可回收」,又必须保证 transcript、附件和工作区文件不被误删,就需要在 DSH 官方归档能力之上做可配置的自动化。dsh-auto-archive 是社区维护者 elk-9527 发布的本地插件,归类为「记忆」,通过定时巡检调用 DSH 官方 workspaceRegistry.archiveSession(),并在安全边界内清理已归档会话的超期投影缓存。

这是什么

dsh-auto-archive 面向 DeepSeek Harness 本地宿主:按可配置天数将闲置会话移入归档列表(可从归档列表恢复),并对已归档且闲置更久的会话删除 DSH 派生的 projection cache 文件;不删除会话记录、附件、工作区或对话产出的任何文件。维护者:elk-9527。目录页:https://www.skillhub.cn/plugins/elk-9527/dsh-auto-archive ;源码:https://github.com/elk-9527/dsh-auto-archive 。

核心功能

下面表格中的默认值与行为均来自插件 README,安装后可在设置面板或 ~/.dsh/auto-archive/config.json 中调整。

能力 默认 行为
自动归档 闲置 14 天 调用 DSH 官方归档 API;归档会话仍可从归档列表恢复。
缓存清理 已归档且闲置 90 天 仅删除 ~/.dsh/storages/session_projcache/sessions/<id>.json(DSH 可按需重建)。
定时巡检 每 30 分钟 后台静默执行;设置面板可预览或立即运行。
保护 置顶会话 可选按 session id、workspace id 或 cwd 片段加入白名单,匹配项不归档。
审计 最近 30 次运行 记录每次归档/清理明细;支持一键从归档恢复。

安全边界

插件设计上只写两类数据:

  1. 归档状态 — 通过官方 registry API 增删 archivedSessionIds,可逆。
  2. 投影缓存 — 删除上述 session_projcache 下的 json 缓存文件。

不会删除:transcript(session.v4.jsonl.zstd 及会话目录)、~/.dsh/attachments、溢出文件、工作区或项目文件。进行中的会话始终跳过(不传 stopActivity),不会打断正在运行的 turn、job 或 subagent。

单次运行受 limits.maxOperationsPerRun(默认 50)限制,避免首次启用时一次性扫光历史。

安装与启用

桌面版 profile 由 Electron 管理,请用 CLI 安装到 desktop profile:

dsh plugin --profile desktop add github:elk-9527/dsh-auto-archive

本地开发目录安装示例:

dsh plugin --profile desktop add "file:D:/path/to/dsh-auto-archive"

宿主插件在启动时加载,安装后需完全退出并重新打开 DSH。打开面板:左下角头像 → Settings → 自动归档(与 General、内置插件相邻)。

卸载:

dsh plugin --profile desktop remove dsh-auto-archive

配置

配置文件路径:~/.dsh/auto-archive/config.json(首次运行自动创建,也可在面板编辑)。运行状态在 ~/.dsh/auto-archive/state.json(原子写入,保留最近 30 次运行)。

{
  "version": 1,
  "autoArchive": { "enabled": true, "idleDays": 14, "checkIntervalMinutes": 30 },
  "cacheCleanup": { "enabled": true, "unusedDays": 90 },
  "protect": { "pinnedSessions": true, "sessionIds": [], "workspaces": [] },
  "limits": { "maxOperationsPerRun": 50 },
  "dryRun": false
}

要点说明:

  • idleDays:末次活动时间超过该天数的会话会被归档。末次活动 = max(transcript mtime, createdAt)。
  • unusedDays:已归档且闲置超过该天数的会话,其 projection cache 会被清理。
  • protect.workspaces:workspace id 或不区分大小写的 cwd 片段;匹配的工作区永不归档。
  • dryRun: true:每次自动运行变为预览,不写归档状态、不删缓存。
  • limits.maxOperationsPerRun:单次运行操作上限。

典型用法

设置面板

安装并重启 DSH 后,在 Settings → 自动归档 查看状态卡片、配置表单、会话清单与运行历史;面板支持预览或立即执行一次巡检。

本机 HTTP API

前缀 /dsh-auto-archive,仅 loopback Host,否则返回 403:

方法 路径 用途
GET /dsh-auto-archive/api/state 配置、上次/下次运行、计数
GET /dsh-auto-archive/api/sessions?limit=200 会话清单(含闲置天数与是否 eligible)
GET /dsh-auto-archive/api/history 最近 30 次运行
POST /dsh-auto-archive/api/config 深度合并并保存配置
POST /dsh-auto-archive/api/run {"dryRun":true} 预览 / {"dryRun":false} 执行
POST /dsh-auto-archive/api/restore {"sessionIds":["..."]} 取消归档

建议首次启用时将 dryRun 设为 true,在面板或 POST /api/run 预览候选数量,确认白名单与 maxOperationsPerRun 后再关闭 dry-run。

适用场景与注意

适合谁:长期在本机使用 DSH、会话数量多、希望活跃列表保持可读、又愿意把旧线程放进官方归档而非删数据的用户。

已知限制(README 原文):

  • 缓存清理仅针对已归档会话,活跃列表上的 projection cache 不会被本插件清理。
  • 「对话缓存」指 DSH projection cache;transcript 与附件仍占磁盘,这是设计如此。
  • 归档遵循 DSH 自身的活动判断;其他插件仍视为活跃的会话会被跳过。
  • 修改插件代码后需重启 DSH(宿主在启动时加载)。

权限与信任:插件以当前 DSH 进程权限读写 ~/.dsh 下配置、状态及上述缓存路径,并调用内核 workspaceRegistry 等 API。安装前请阅读源码与许可证(MIT,package 版本 0.1.0)。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-auto-archive 把「闲置归档」和「已归档会话的超期投影缓存回收」做成可配置、可审计、可 dry-run 的本地自动化,并在文档中明确不碰 transcript 与附件。需要安装说明与 API 细节时,见 GitHub README:https://github.com/elk-9527/dsh-auto-archive ;插件条目:https://www.skillhub.cn/plugins/elk-9527/dsh-auto-archive 。

羽毛球分组比赛记分
小程序二维码

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

小夜