前言¶
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