前言¶
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 许可证。
典型用法¶
- 安装并重启后,打开 设置 → 插件设置 → 会话自动归档,展开卡片。
- 保持
dryRun为开启,点击「立即扫描」。 - 在「归档历史」中检查
planned是否符合预期;必要时调整idleDays、excludeCwdSubstrings等。 - 确认无误后关闭
dryRun,让定时任务或后续扫描真正写入归档状态。 - 若排序不符合预期,在卡片中确认侧栏为「按最近活跃」,并视需要开启
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 生态强调「一切皆插件」,本插件是社区工作流扩展之一。