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
羽毛球分组比赛记分
小程序二维码

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

小夜