前言¶
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 共用同一套规则)。按优先级,以下情况不会被冻结:
- 已在冷层(
already-cold) - 仍有 live agent(
live) - 在工作区 pin 集合中(
pinned) - Portal 中已标星(
starred) - 从未被观测为「打开过」(
unread) - 带有未完成 goal(
goal) - 带有未完成 todo(
todo) - 子 agent 会话(
subagent) - 在
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 仍可用,属于显式、可恢复操作。
典型用法¶
手动审阅后提交¶
- 打开插件 Settings,执行 Stage sweep,查看计划中的会话列表。
- 确认无误后 Commit;不符合条件的项会在 commit 时被跳过并提示。
- 侧栏不再显示已冻结会话;需要时在 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