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

前言

DeepSeek Harness(DSH)用久了,会话列表会堆满长期不再打开的线程。手动逐条归档费时,而会话相关的派生数据(例如投影缓存)也会占磁盘。若只靠删文件来「减负」,很容易误伤 transcript 或附件。下面介绍社区插件 dsh-auto-archive:在 DSH 官方归档 API 之上做定时巡检,按可配置天数归档闲置会话,并对已归档且长期闲置的会话清理可重建的 projection cache,不删除会话记录、附件与工作区产出。

这是什么

dsh-auto-archive 是面向 DSH 桌面版 / Web 的本地插件,维护者为 StanElka,在 SkillHub 等社区目录中归类为「记忆」。它解决两类问题:一是把超过闲置阈值的会话移入 DSH 归档列表(仍可恢复);二是对已归档且超过更长时间未用的会话,删除 DSH 派生的投影缓存文件,需要时由 DSH 按需重建。归档与清缓存均通过 DSH 内核暴露的服务与 registry 完成,边界在 README 中写得很明确。

核心功能

下面表格概括默认行为(均可通过配置与设置面板修改):

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

安全边界(插件设计上仅两类写操作):

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

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

安装与启用

DSH 桌面 profile 由 Electron 应用管理,安装需使用 CLI。资料中的命令如下(注意仓库标识与目录页展示名可能不同,以 README 为准):

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 / Built-in plugins 旁。

卸载:

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

插件版本 0.1.0,许可证 MIT,宿主侧要求 Node ≥ 22,无第三方 npm 依赖。

配置与典型用法

配置保存在 ~/.dsh/auto-archive/config.json(首次运行自动创建,也可在面板编辑)。默认结构示例:

{
  "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:末次活动超过该天数的会话会被归档;末次活动取 transcript 修改时间与 createdAt 的较大值。
  • unusedDays:已归档且闲置更久的会话,其投影缓存会被清理。
  • protect.workspaces:workspace id 或大小写不敏感的 cwd 片段;匹配的工作区永不归档。
  • dryRun: true:每次自动运行变为预览,不写归档状态、不删缓存。
  • limits.maxOperationsPerRun:单次运行操作上限,避免首次启用一次性扫光历史。

运行状态在 ~/.dsh/auto-archive/state.json(原子写入,保留最近 30 次运行)。

设置面板:查看状态卡片、改配置、浏览会话清单与历史,并触发预览或立即执行。

本机 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 或在面板预览,确认候选会话数量与保护规则无误后,再关闭 dry-run 或 POST 正式执行;误归档可用 restore API 或面板一键恢复。

适用场景与注意

适合:长期本地使用 DSH、会话数量多、希望列表保持可读、又需要保留完整 transcript 与附件以备查或恢复的用户。

已知限制(来自 README):

  • 缓存清理仅针对已归档会话,活跃列表上的投影缓存不会被本插件清理。
  • 「对话缓存」指 projection cache;transcript 与附件按设计不删,磁盘占用仍可能较大,归档不会 magically 释放全部空间。
  • 归档遵循 DSH 自身的活动判定;其他插件仍视为活跃的会话会被跳过。
  • 修改插件代码后需重启 DSH,宿主在启动时加载。

权限与安全:插件以当前 DSH 进程权限读写 ~/.dsh 下配置、状态及上述缓存路径,并调用 registry 归档 API。安装前建议在 GitHub 阅读源码与 MIT 许可证,确认行为符合预期。DSH 生态强调「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-auto-archive 把「闲置归档」和「已归档会话的可重建缓存清理」做成可配置、可审计的后台任务,并在文档中划清不删 transcript 与附件的边界。需要试用或查看说明时,可打开社区目录页与仓库:

  • 目录页:https://www.skillhub.cn/plugins/StanElka/dsh-auto-archive
  • GitHub:https://github.com/StanElka/dsh-auto-archive

安装命令以 README 中的 github:elk-9527/dsh-auto-archive 为准;若仓库地址与目录不一致,以你实际 clone / add 的来源为准。

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

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

小夜