dsh-session-auto-archive:按闲置天数自动归档 DSH 会话

前言

DeepSeek Harness(DSH)侧栏会随使用时间累积大量会话。原生界面只提供手动的 Archive,长期不用的条目仍占列表,需要人工逐条处理。若你希望在「不删数据」的前提下,按规则把冷会话收进归档状态,并保留审计与撤销能力,社区插件 dsh-session-auto-archive 针对的就是这一缺口。

这是什么

dsh-session-auto-archive 是维护者 xiao-hans 发布的 DSH 工作流类插件(npm 包名 dsh-session-auto-archive,当前版本 0.1.4,MIT 许可证)。它定时扫描全部会话,把超过配置闲置天数的条目写入 DSH 原生归档状态(与手动 Archive 相同,落在 workspace.json 的 global.archivedSessionIds),侧栏即时变短;误操作可在归档历史中逐条撤销。

设置入口有两处:设置 → 插件设置(与 dsh-qoder-connect 等同一块共享区块),以及 侧栏 → 插件 → 已安装 → 本插件行 → 配置。卡片为折叠单行,样式跟随 DSH 主题令牌与深/浅色模式。

核心功能

自动归档与闲置判定

插件按 intervalHours(默认 12 小时)定时扫描,启动后首轮会延迟 startupDelayMs(默认 60000 ms)再跑。闲置天数由 idleDays(默认 14)控制,活动信号优先使用 projcache 中的用户活动戳(sessionListMetadata.lastPromptAt 与 timeContext.lastMessageTime 的较大值,与侧栏「N 天」一致);仅在该戳缺失或与会话日志 mtime 相差不足 24 小时时才采信日志 mtime。README 说明:不能无条件用 projcache 或日志文件 mtime,否则 DSH 写入元数据时可能把旧会话刷成「刚活跃」而漏归档。

归档前一律跳过:当前 live 会话、置顶(当 keepPinned 为 true)、工作区活动非空、以及 cwd 命中 excludeCwdSubstrings 任一子串的会话。子代理是否参与由 includeSubagents(默认 false)控制。实际归档调用 workspaceRegistry.archiveSession(),不删除任何数据。

演练模式与安全网

dryRun 默认为 true:只写审计、不真正改归档状态。文档建议首次安装先保持演练,点「立即扫描」,在「归档历史」里核对 planned 条目后再关闭 dryRun。

归档历史与撤销

审计流水为 JSONL,落在 ~/.dsh/storages/auto-archive/audit.log;历史 UI 展示会话标题、闲置天数、cwd 等。支持单条「撤销」(原生 unarchive)与「撤销上次批量」。

同目录还有 config.json(Web UI 读写配置)与 status.json(上次运行摘要)。

回到会话与侧栏排序

autoUnarchive(默认 true)监听宿主 api-session/activity:用户再次向某会话发出持久消息时自动 unarchiveSession(),并记 by:"reactivated" 审计。在侧栏排序为「按最近活跃」时,会话会随刷新后的活跃时间回到列表上部。

DSH 另有「手动」排序模式:归档项可能被钉在底部,且插件无法替换原生比较器。卡片展开时会读取本地 dsh.workspace.view.v5 的 orderBy;若为手动模式,会提示并提供「切回按最近活跃」按钮(写入 {orderBy:"updated", sessionOrderByAccount:{}} 后刷新页面)。要让「回到老会话后冒到最上面」同时需要:orderBy 为按最近活跃,且会话未被归档(由 autoUnarchive 处理)。

配置项一览

配置 默认 说明
enabled true 总开关
idleDays 14 闲置天数阈值
dryRun true 演练模式
keepPinned true 置顶会话不自动归档
includeSubagents false 是否包含子代理会话
autoUnarchive true 用户再次发消息时自动取消归档
intervalHours 12 定时扫描间隔(小时)
startupDelayMs 60000 启动后首轮延迟
excludeCwdSubstrings [] cwd 命中子串则跳过

本地 HTTP API(仅 loopback)

路由 说明
GET /api/dsh-auto-archive/status 当前配置与上次运行
GET/POST /api/dsh-auto-archive/settings 读/写配置(POST 需 expectedRevision,冲突 409)
POST /api/dsh-auto-archive/run 手动扫描,body 可带 { dryRun }
POST /api/dsh-auto-archive/revert 撤销上次批量;body 带 { sessionId } 为单条撤销
GET /api/dsh-auto-archive/history?limit=N 审计历史(新→旧,含标题)

更新后可用 GET /api/dsh-auto-archive/status 的 version 或设置卡片标题旁版本徽章确认生效。

安装与启用

DSH 的 profile 为 pnpm 工程(nodeLinker: hoisted),README 推荐在 desktop profile 下用 pnpm 安装,避免与 npm install 混装。

方式 A(npm 包,推荐):

cd ~/.dsh/profiles/desktop
pnpm add dsh-session-auto-archive
node node_modules/dsh-session-auto-archive/scripts/update.mjs --register

国内镜像滞后时可加:--registry=https://registry.npmjs.org/。安装后重启 DSH;插件自带 cordis.patch.yml 会把 session-auto-archive 插入插件树。

--register 会幂等写入 profile 的 dependencies 与 dsh.profile.bundles,需出现 dsh-session-auto-archive。引擎要求 dsh >= 0.2.1-rc.1;README 实测基线为 0.2.1-rc.2,跨大版本可能需适配内部服务名。

插件以当前 DSH 进程权限运行,安装前请自行查看 GitHub 仓库 源码与 MIT 许可证。

典型用法

  1. 安装并重启后,打开 设置 → 插件设置 → 会话自动归档,展开卡片。
  2. 保持 dryRun 为开启,点击「立即扫描」。
  3. 在「归档历史」中检查 planned 是否符合预期;必要时调整 idleDays、excludeCwdSubstrings 等。
  4. 确认无误后关闭 dryRun,让定时任务或后续扫描真正写入归档状态。
  5. 若排序不符合预期,在卡片中确认侧栏为「按最近活跃」,并视需要开启 autoUnarchive。

多机更新时,若采用仓库克隆方式,可在 profile 目录使用 scripts/update.mjs(--check 查新版本,无 --register 时 git pull --ff-only 并按需 pnpm install);npm 包安装无 .git 时需按提示重装新版本。任何更新后应完全重启 DSH,或禁用再启用本插件。

适用场景与注意

适合会话数量多、希望用闲置天数自动收拢侧栏、又需要审计与撤销的 DSH 日常用户。不适合期望插件改写 DSH 侧栏原生排序比较器的场景——插件只做 autoUnarchive 与手动排序模式下的诊断/一键切回「按最近活跃」。

依赖 DSH 内部服务(如 sessionPersistence、workspaceRegistry、webServer 及槽位 plugin-settings.item)。卡片文案支持中/英(按浏览器语言)。社区目录页与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件是社区工作流扩展之一。

链接

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

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

小夜