dsh-session-coldstore:DSH 会话分层冷存与 FTS5 检索

前言

DeepSeek Harness(DSH)会把每个会话放在同一个 live root 里。列表、扫描和全文索引构建都要遍历这一整份语料:磁盘上还能扛,内存和每次操作的代价会随着会话数量上去。常见做法是删旧会话或手工归档,但删掉就不可恢复,手工又难和侧栏、搜索对齐。

下面介绍社区插件 dsh-session-coldstore(npm 包名 @gnanesh/dsh-session-coldstore):把长时间未活动的会话从 live root 移出到磁盘上的 cold tier,不删除;冷层会话用 FTS5 索引保持可搜索,需要时可一键或命令行恢复。

这是什么

维护者:GnaneshKunal(作者 Gnanesh Kunal)。分类:记忆。当前 GitHub 星标:0(以目录页为准)。

一句话:为 DSH 会话做分层冷存——idle 会话迁出 live 列表,数据仍在 ~/.dsh/coldstore,并通过 index.sqlite 上的 FTS5 保持全文检索能力。

它不会靠自身缩小某个已运行进程的堆:未打开的 transcript 本来也不在内存里。它减轻的是语料规模——listing、search、index build 每次要扫的数据量。

热层与冷层对比

能力 Hot(live root) Cold(~/.dsh/coldstore)
侧栏 / 会话列表 是 否
readdir 列表扫描 是 否
全文索引构建输入 是 否
磁盘占用 是 是(不删除)
可恢复 — 一键或 bin/coldstore.mjs restore

核心功能

冻结策略与豁免

会话是否进入冷层由统一分类器决定(手动 staging、commit、直接 freeze 共用同一套规则)。按优先级,以下情况不会被冻结:

  1. 已在冷层(already-cold)
  2. 仍有 live agent(live)
  3. 在工作区 pin 集合中(pinned)
  4. Portal 中已标星(starred)
  5. 从未被观测为「打开过」(unread)
  6. 带有未完成 goal(goal)
  7. 带有未完成 todo(todo)
  8. 子 agent 会话(subagent)
  9. 在 retainDays(或 minIdleMs)内仍有 prompt(too-new)

unread 限制: DSH 没有持久的「已读」标记;Coldstore 从安装起用 read.json 记账。安装前就存在的会话没有读历史,主要靠 retainDays、pin、star 保护。首次 dry-run 计划里建议给需要保留的会话标星。

默认配置项 keepPinned、keepStarred、keepUnread 均为 true。

清扫(sweep)两条路径

路径 触发 行为
手动(maker/checker) Settings 页 Stage sweep 只生成待审批次,不移动;Commit 后仅移动你审过的那一批。过期 batch id 会被拒绝;pending.json 在刷新后仍可见直到 commit 或丢弃。
自动 sweepOnBoot、sweepIntervalMinutes 一步完成计划与移动,无 checkpoint。dryRun: true 时仍阻止一切移入冷层。

Commit 时 Host 会重新推导资格,自 staging 以来新 pin、star、打开、live 或回到 retainDays 内的会话会被跳过并报告。

索引与安全

  • indexCold: true(默认)时,冻结过程中为冷会话建 FTS5 索引;明文节选存入 ~/.dsh/coldstore/index.sqlite(本地搜索用,删除 coldstore 目录即移除)。
  • 不删除:delete 移到 coldstore/trash/;move 不覆盖已有非空目标。
  • 冻结先移目录再写 manifest,manifest 失败会回滚移动。
  • restore 校验冻结时的 sha256,transcript 变更会拒绝;CLI 支持 --force 覆盖。
  • bin/coldstore.mjs 可不依赖插件或 DSH 运行:list、verify、restore --all 等仅凭 manifest 即可。

通知

自动 sweep 实际移动了会话时,可通过 macOS 原生通知(osascript)汇总结果;notifyOnSweep: false 可关闭。无 osascript 或权限被拒只记日志,不影响 sweep。

安装与启用

官方安装命令(来自 README):

dsh plugin add @gnanesh/dsh-session-coldstore

也可在 Plugin Manager 中按包名安装。从本地目录安装时:

dsh plugin add /absolute/path/to/dsh-session-coldstore

插件会向 Cordis 插入一行默认配置(节选):

- insert:
    - id: session-coldstore
      name: '@gnanesh/dsh-session-coldstore'
      config:
        retainDays: 7
        dryRun: true

在 profile 的 cordis.patch.yml 中按 id: session-coldstore 覆盖即可。

运行时要求(package.json):dsh >= 0.2.1-rc.1,node 为 ^22.19.0 || >=24.0.0。许可证:MIT。当前包版本:0.1.2。

插件在当前 dsh 进程权限下运行;安装前请自行查阅 GitHub 仓库 源码与许可证,确认符合你的环境与安全要求。

配置要点

key 默认值 含义
retainDays 7 在此天数内有 prompt 的会话保持 live
dryRun true 为 true 时任何移入冷层的 sweep、commit、直接 freeze 均拒绝
coldRoot ~/.dsh/coldstore 冷层根目录
keepPinned / keepStarred / keepUnread true 对应豁免
minIdleMs 3600000 空闲时间下限;实际需 idle max(retainDays, minIdleMs)
sweepOnBoot true 激活后约 5s 执行一次 sweep
sweepIntervalMinutes 720 重复间隔;0 关闭
indexCold true 冻结时索引文本
notifyOnSweep true 自动 sweep 移动后 macOS 通知

Settings 页会把其中七项写入 ~/.dsh/coldstore/config.json,覆盖 bundle 行配置且不改动你的 patch 层。

启用真实冻结: 将 dryRun 设为 false(patch 或 config.json)。默认 dryRun: true 下,restore 与你确认的 delete 仍可用,属于显式、可恢复操作。

典型用法

手动审阅后提交

  1. 打开插件 Settings,执行 Stage sweep,查看计划中的会话列表。
  2. 确认无误后 Commit;不符合条件的项会在 commit 时被跳过并提示。
  3. 侧栏不再显示已冻结会话;需要时在 UI 一键恢复,或走 CLI。

命令行(插件安装后 coldstore 在 PATH)

node bin/coldstore.mjs list
node bin/coldstore.mjs verify
node bin/coldstore.mjs restore --all --dry-run
node bin/coldstore.mjs restore --all

仓库内亦可直接:

coldstore --help

冷层目录结构(节选)

~/.dsh/coldstore/
  manifest.json      # 按 session id,含 sha256
  pending.json       # 手动 staging 待 commit
  index.sqlite       # FTS5
  sessions/<id>/     # 移出的会话目录
  trash/<ts>-<id>/   # delete 目标

适用场景与注意

适合: 长期使用 DSH、会话数量大,希望减轻列表与索引压力,又需要保留历史 transcript 并可搜索、可恢复的团队或个人。

注意:

  • 冷层会话不出现在侧栏列表;检索依赖 FTS5 与插件提供的恢复入口。
  • 默认 dryRun: true,新装后应先审阅 dry-run 计划再关闭 dryRun。
  • 全文索引库含 transcript 明文摘录,注意本机磁盘与备份策略。
  • 自动通知目前面向 macOS;其他平台以日志为准。
  • DSH 生态理念是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

经过上面的步骤,你可以在不删会话的前提下缩小 live 语料,并把历史留在可搜索的冷层里。进一步细节以仓库 README、API.md 与测试脚本为准。

  • 目录页:https://www.skillhub.cn/plugins/GnaneshKunal/dsh-session-coldstore
  • GitHub:https://github.com/GnaneshKunal/dsh-session-coldstore
羽毛球分组比赛记分
小程序二维码

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

Xiaoye