dsh-Session-Turncate:按會話空閒時間截斷 DSH 上下文

前言

在 DeepSeek Harness(DSH)裏,一個 Session 可以長期存活——例如手機 IM 機器人始終把消息投遞到同一會話。不同任務因此共用一份對話上下文,舊任務的內容會帶進新任務,既污染語義,也持續消耗 token。宿主自帶的上下文壓縮通常會生成摘要;若你只想在「長時間沒有輸入」之後整段丟棄更早的對話、且不調用模型寫摘要,就需要按會話維度的空閒截斷策略。下面介紹社區插件 dsh-Session-Turncate(維護者 L7X6899,分類:工作流),它針對單個會話做定時上下文截斷,屬於 DSH「一切皆插件」生態中的獨立組件;插件目錄頁在 SkillHub,與 DeepSeek / 幻方無官方從屬關係。

這是什麼

dsh-Session-Turncate 的定位是:Per-session idle-time context truncation for DSH Web——按可配置的空閒小時數,在下次處理消息時丟棄更早的整段對話(不生成摘要),並在會話裏留下與內置壓縮一致的事務形狀,避免歷史「憑空消失」。

  • npm 包名:dsh-session-turncate,顯示名:dsh-Session-Turncate,當前版本 0.1.2(MIT)
  • 宿主要求:dsh >= 0.2.1-rc.5(見 engines.dsh)
  • 源碼與說明:GitHub — L7X6899/dsh-Session-Turncate

需要強調:這是「截斷」,不是「壓縮」。被丟棄的內容不會留下摘要,也不會再出現在模型輸入裏。

核心功能

按會話開關與空閒計時

每個 Session 可單獨啓用。開啓後,只要距上一次活動已滿 X 小時,在本輪第一個 step 開始時觸發自動截斷;每次用戶輸入都會刷新空閒計時(0.1.1 起語義爲空閒超時,而非固定間隔)。

自動截斷在每一步開始時判斷,且只在本輪第一個 step 執行:本輪已產生的 surface 節點不會被替換;存在未閉合的 compaction/start 時跳過;hours <= 0 或開關關閉時不觸發。

Web 面板:「上下文截斷」選項卡

會話區域頂部功能欄(slot conversation.view,order 40)新增 上下文截斷:

區域 行爲
上下文管理 開關:啓用後長時間無輸入時會自動重置上下文
自動截斷上下文時間 數字輸入,單位小時,範圍 0–24;0 表示不按時間自動截斷
保存 寫入該會話的開關與小時數
立即截斷 立刻執行一次截斷(不受時間限制)
狀態行 上次截斷時間、累計次數;0.1.2 起還有「下次」時間與排隊提示

面板通過同源 HTTP 與宿主通信:POST /session-turncate/api,op 爲 status / set / cut。僅接受 loopback 或同源請求,跨源返回 403。

斜槓命令與 IM 橋接

/truncate on 4     # 開啓,4 小時無輸入後截斷
/truncate on       # 只開啓,沿用已保存的小時數
/truncate off      # 關閉
/truncate now      # 立即截斷一次
/truncate status   # 查看當前會話狀態

中文別名:/截斷 on 6、/cut off 等同樣可用。通過 IM 橋接直接發消息、且不經過命令註冊表時,該行必須以 /、/ 或 ! 開頭,否則會被當成普通對話,例如 !截斷 on 2 會生效,截斷 on 2 不會。每次開關或截斷會有一條回執消息,便於手機端查看結果。

持久化與截斷寫入方式

狀態文件默認路徑:$DSH_HOME/session-truncate.json(即 ~/.dsh/session-truncate.json),按 Session id 記錄;進程重啓後仍有效。手動編輯該文件同樣生效;解析失敗時壞文件會另存爲 .corrupt 後重置。

截斷嚴格沿用內置壓縮後端的事務形狀,Chat 中會顯示「已壓縮」摺疊卡:

  1. compaction/start
  2. compaction/summary(固定文案,聲明按時間策略移除、未生成摘要;provider 爲 session-turncate)
  3. 一條 user/message(source.kind 爲 compact-checkpoint),帶 surfaceOp: { op: 'replace', startSeq, endSeq }
  4. compaction/end

compaction/start|end 的 turn 字段必須存在(無 turn 時寫 null),否則會話下次加載可能因格式校驗失敗而報錯。

任何異常只記一條 warn 日誌,原樣繼續本輪對話;插件出錯不會中斷會話。狀態文件寫入失敗時,面板與命令會明確返回「本次操作未生效」。

安裝與啓用

插件以當前 DSH 進程權限運行,安裝前應自行查看源碼與 MIT 許可證。

從 GitHub(推薦)

# 把 desktop 換成你實際使用的 profile 名
dsh plugin --profile desktop add github:L7X6899/dsh-Session-Turncate

也可在桌面端 設置 → 插件 中安裝。裝完後重啓 DSH(宿主按 ESM 模塊緩存加載插件)。

從 npm

npm i dsh-session-turncate@0.1.2
# 或裝進當前 profile
dsh plugin --profile desktop add dsh-session-turncate

包頁:https://www.npmjs.com/package/dsh-session-turncate(dist-tag latest = 0.1.2)。

典型用法

  1. 在 Web 打開長期 IM 橋接會話,進入 上下文截斷,打開開關並設置例如 4 小時,點 保存。
  2. 或在會話裏發送:/truncate on 4;需要立刻清空舊上下文時發送 /truncate now 或點 立即截斷。
  3. 用 /truncate status 或面板狀態行確認上次截斷、累計次數與(0.1.2)下次觸發時間。

狀態 JSON 中常見字段:enabled、hours(0–24)、keepRecentNodes(保留末尾 surface 節點數,默認 0)、lastActiveMs、lastCutMs、cutCount。舊字段 anchorMs 會自動遷移爲 lastActiveMs。

倉庫自帶 Node 自測腳本(無需啓動 DSH),例如 node test/truncate.mjs、node test/api.mjs 等,可在本地驗證行爲。

適用場景與注意

適合:同一 Session 長期在線、任務彼此獨立、希望用「空閒超時」硬切上下文、且接受不保留摘要的場景(IM 機器人橋接是 README 中的典型例子)。

不適合:需要保留被刪內容的語義摘要時,應使用宿主或其他壓縮能力,而非本插件。

安裝來源以 GitHub README 與 npm 包頁爲準;版本與配置項以上述資料爲準,勿憑插件名自行拼接未文檔化的安裝命令。

結尾

dsh-Session-Turncate 用 per-session 空閒計時 + 整段丟棄(無摘要)的方式,降低長期會話裏的上下文串臺與 token 壓力,並通過面板、斜槓命令與持久化狀態配合 IM 使用。進一步瞭解可訪問 SkillHub 目錄頁 與 GitHub 倉庫。

羽毛球分组比赛记分
小程序二维码

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

小夜