前言¶
在 DeepSeek Harness(DSH)裏做長對話或複雜任務時,上下文窗口遲早會頂滿。常見出路只有兩條:讓系統壓縮舊內容,細節被摘要抹平,模型像「換了個人」;或者開新會話,下一段完全不知道剛纔聊到哪。社區插件 dsh-rollover(維護者 ZyxQl-Ala,分類:記憶)在這兩條路之間補了一環:在窗口快滿前把「上一段發生了什麼」寫成《接續前情》,換到新的一段會話時再注入一次,讓同一條任務線能接下去。
這是什麼¶
dsh-rollover 是 DSH 的上下文滾段插件。它監聽本地會話投影裏的佔用壓力(contextPressure),在可配置的閾值處提醒或自動存檔,並把 handoff 存到本地狀態目錄;當檢測到活躍會話切換到新的 session 時,把上一段的《接續前情》只注入一次,避免重複刷屏。
當前版本 0.2.0(MIT 許可證),要求 DSH >=0.2.1-rc.1 <0.3.0-0、Node >=20。純本地運行,無網絡、無遙測;會話識別依賴 DSH 自帶的投影緩存(storages/session_projcache/sessions),不申請額外權限。
它解決什麼問題¶
README 裏把滿窗後的兩種糟糕結局寫得很直白:壓縮丟細節,或新會話斷片。本插件的流程可以概括爲三步:
- 盯佔用:超過
warnAt(默認 45%)在系統提示裏提醒「順手寫進記憶」;超過threshold(默認 60%)提醒「該滾段了」。 - 存接續前情:工具
rollover_handoff把最近keepTurns輪對話提煉成《接續前情》,寫入<state>/rollover/handoffs/<sessionId>.md。 - 接住下一段:若同時安裝 dsh-decay-memory,可一併寫入 📌 永久記憶;換 session 後由插件把 handoff 自動注入一次。
從 0.2.0 起還支持自動存檔:佔用達到 autoAt(默認 60%)時插件自行生成 handoff(不依賴模型調工具),同一會話有 10 分鐘冷卻(autoCooldownMs)。
核心工具與配置¶
插件向 Harness 暴露兩個工具:
| 工具 | 作用 |
|---|---|
rollover_status |
當前佔用比例、是否該滾段(fine / getting-full / should-roll) |
rollover_handoff |
生成並保存《接續前情》,可附一句留給下一段的話 |
默認配置如下(可在設置頁或 API 修改):
{
"warnAt": 0.45,
"threshold": 0.6,
"keepTurns": 12,
"maxChars": 5000,
"injectIntoMemory": true,
"stateDir": ""
}
stateDir 爲空時使用 $DSH_HOME/rollover。相關文件:
$DSH_HOME/rollover/handoffs/<sessionId>.md 接續前情正文
$DSH_HOME/rollover/state.json 已注入記錄
$DSH_HOME/decay-memory/memory.json 可選:與 dsh-decay-memory 聯用時
與 dsh-decay-memory 的配合¶
- 單獨使用:提醒、生成 handoff 文件;新段注入依賴插件自己的 prompt section。
- 與 dsh-decay-memory 聯用:handoff 同時進入 📌 永久記憶,換段後與既有記憶一起注入,銜接更穩。
設置頁與 HTTP 接口(0.2.0+)¶
插件自帶設置 UI:
- DSH 設置面板左側新增「上下文滾段」一節(client 通過 iframe 嵌 host 頁面)。
- 獨立頁:
<你的 DSH 地址>/rollover。
頁面上可查看當前會話佔用、handoff 存檔(自動/手動、已注入/待注入),調整閾值與冷卻,或點擊「立即生成接續前情」。
同源 API(需 DSH 登錄態):
GET /rollover/api/state
POST /rollover/api/config { warnAt, threshold, autoAt, autoCooldownMs, keepTurns, maxChars, autoHandoff, injectIntoMemory }
POST /rollover/api/action { op: "handoff" | "reset-injected" | "delete-handoff", ... }
安裝與啓用¶
SkillHub 目錄頁給出的安裝說明是交給 DSH 的自然語言指令,而非單獨的 shell 一行命令。在 Harness 中可按頁面「發送給 DeepSeek Harness 安裝」區塊複製:
請安裝 DSH 插件 ZyxQl-Ala/dsh-rollover。
安裝前請確認本機 DSH 與 Node 版本滿足 package.json 中的 engines;插件以當前 DSH 進程權限讀寫 $DSH_HOME 下的 rollover(及可選的 decay-memory)數據,安裝前應自行查看 GitHub 倉庫 源碼與 MIT 許可證。社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
典型用法¶
- 安裝並啓用插件後,長對話過程中可定期調用
rollover_status,確認處於 fine、getting-full 還是 should-roll。 - 在系統提示出現滾段提醒,或佔用達到閾值時,調用
rollover_handoff(或依賴 0.2.0 的自動存檔),生成《接續前情》;需要時可寫一句給「下一段的自己」。 - 上下文滿窗後開啓新 session(或 DSH 切換到新段),插件檢測到 session 變化,將上一段 handoff 注入一次;若需重新注入,可通過設置頁或
POST /rollover/api/action的reset-injected等操作管理狀態。
適用場景與注意¶
適合需要多段銜接的長任務:代碼重構分多次聊、調研筆記跨會話、或不想完全依賴壓縮摘要時,用本地 handoff 保留「接哪裏、剩什麼」。
注意:handoff 質量取決於提煉邏輯與 keepTurns / maxChars;自動存檔有冷卻,避免同一會話內反覆寫盤。與 decay-memory 聯用時,📌 條目會長期佔用記憶槽,可按需關閉 injectIntoMemory 或只保留文件 handoff。
結尾¶
dsh-rollover 把「快滿窗 → 存接續前情 → 新段注入一次」做成可配置、可可視化的本地流程,減輕壓縮與新會話之間的斷層。目錄與版本信息見 SkillHub:dsh-rollover,源碼與完整 README 見 GitHub:ZyxQl-Ala/dsh-rollover。