前言¶
在 DeepSeek Harness(DSH)裏同時開多個聊天會話時,切換標籤或視圖往往會觸發原生 session 釋放,再切回來就要重新加載歷史。對需要頻繁對照多個會話的開發者來說,這類重複加載既費時間,也打斷思路。下面介紹社區插件 dsh-session-keepalive(包名 @local/dsh-session-keepalive):它在每個瀏覽器標籤頁內,用 DSH 原生的 session retain 機制保留「已經打開過」的會話引用,並在數量與閒置時間上設上限,避免無節制佔用內存。
這是什麼¶
dsh-session-keepalive 由 edgora-ai 維護,分類爲客戶端插件。當前發佈版本 1.1.2,聲明適配 DSH 0.2.1-rc.3 或 0.2.1-rc.4;其他 DSH 版本不保證兼容。
一句話定位:在每個瀏覽器標籤頁內,對有界數量的、已成功打開過的會話做 session retain 保溫,減少左右切換時的反覆釋放與歷史重載;只保溫實際打開過的會話,不預取未打開的會話。簡介中的 “Bounded per-tab session keep-alive” 即指這種「按標籤頁、有上限」的策略;設置與診斷走 DSH 原生能力,診斷元數據不包含聊天內容。
核心功能¶
保溫策略(默認)¶
- 默認最多保留 8 個會話(含當前)。
- 最後一個顯示該會話的視圖離開後,閒置 30 分鐘再釋放引用。
- 不創建獨立 WebSocket,不改網絡配置,不持久複製聊天記錄;真實斷網、代理超時或服務重啓仍由 DSH 原生恢復邏輯處理。
原生設置¶
在聊天輸入區附近展開 「會話保溫」→「保溫設置」:
| 項 | 範圍 | 默認 |
|---|---|---|
| 保溫會話數量 | 1–32 整數 | 8(含當前) |
| 閒置釋放分鐘數 | 1–240 整數 | 30 |
保存後通過 DSH 原生 configForms → settings.mutate 寫入當前 profile 配置;同一 Host/profile 下已認證瀏覽器共享設置,每個標籤頁仍獨立持有緩存。設置變更會動態生效:提高上限不丟已有引用;降低上限優先釋放閒置最久的項。
恢復繼承默認值 會刪除用戶覆蓋,回到 profile 組合配置;無組合自定義時爲 8 / 30。
標籤頁內臨時控制¶
- 本標籤頁暫停 / 恢復:隻影響本頁是否允許插件保溫,不改持久設置。
- 釋放未顯示的會話:僅清除本插件持有的閒置引用。
- 永久關閉:在插件管理中禁用
@local/dsh-session-keepalive。 - 刷新頁面會清空當前標籤頁內存緩存,但保留已保存的設置。
緩存診斷(隱私邊界)¶
在 「會話保溫」→「緩存診斷(不含聊天內容)」 可查看最多 20 條近期元數據(新到舊),用於區分正常到期、數量上限、手動釋放、頁面重載、標籤頁回收等原因。記錄寫入本標籤頁 sessionStorage,不保存聊天、會話 ID、頁面地址或錯誤正文;關閉標籤頁或清除站點數據後可能無法保留。
Agent 工具¶
Host 提供 session_keepalive_settings,支持 get、set、reset,字段與 UI 一致,同樣走 settings.mutate;可用 expectedRevision 避免併發覆蓋。寫入要求當前會話 Full access,工具不會自行申請提權。
安裝與啓用¶
預構建包通過 GitHub Release 附件分發(非 npm 註冊表)。安裝需要 Full access 或相應批准,會影響目標 profile 的全部會話;安裝前建議查看倉庫源碼與 MIT 許可證。插件在當前 DSH 進程權限下運行,與手動改 profile 的 package.json 或 patch 不是同一路徑。
推薦命令(將 web 換成你的 profile 名稱):
dsh plugin --profile web add 'https://github.com/edgora-ai/dsh-session-keepalive/releases/download/v1.1.2/local-dsh-session-keepalive-1.1.2.tgz'
也可把同一 URL 粘貼到 DSH 插件頁安裝入口,或由 Agent 通過 Plugin Manager 的 install_bundle 安裝。若已下載 .tgz,可執行:
dsh plugin --profile web add /absolute/path/local-dsh-session-keepalive-1.1.2.tgz
無需解壓。包內已含構建後的 client.js 等資源,安裝期無構建腳本。
安裝完成後按管理器返回的狀態操作,刷新已有 DSH 網頁,在輸入區附近找到「會話保溫」。從舊版無 Config 升級到 1.1.0 時,若設置暫不可用,可能需在當前任務結束後重啓 DSH 實例再刷新 GUI,不要另起服務。
典型用法¶
- 確認 DSH 爲 0.2.1-rc.3 或 0.2.1-rc.4,用上一節命令安裝 v1.1.2 包。
- 刷新 Web 客戶端,打開多個你確實需要來回切換的會話。
- 若同時打開的會話較多,在 保溫設置 裏把「保溫會話數量」調到 1–32 之間(注意數值越大,內存與實時訂閱流量越高),保存至提示「已保存並應用」。
- 長時間不用某會話時,可依賴默認 30 分鐘閒置釋放,或調「閒置釋放分鐘數」(1–240)。
- 若發現緩存被清,用 緩存診斷 看釋放原因,而不是從診斷裏恢復內存緩存(診斷不能恢復頁面緩存)。
需要自動化時,在具備 Full access 的會話裏讓 Agent 調用 session_keepalive_settings 的 get / set / reset,與 UI 行爲一致。
適用場景與注意¶
適合:在同一瀏覽器標籤頁內頻繁切換多個已打開會話、希望減少歷史重載的 DSH Web 用戶;需要與 UI 一致的 profile 級保溫配置或 Agent 調參的場景。
不適合或需知邊界:
- 無法替代網絡層修復;連接問題仍依賴 DSH 原生恢復。
- 多個可見視圖佔滿保溫名額時,超額視圖只登記顯示需求,不立刻新增引用;名額空出或提高上限後纔可能補上。
- 併發在不同瀏覽器編輯同一設置時,修訂衝突會拒絕寫入並保留草稿。
- 社區目錄 skillhub.cn 插件頁 與 GitHub 倉庫用於發現與分發,與 DeepSeek / 幻方無官方從屬關係;DSH 生態本身是「一切皆插件」,本插件是社區客戶端擴展之一。
結尾¶
dsh-session-keepalive 用有界的 per-tab retain,在可控內存前提下減輕多會話切換時的重複加載;設置與持久化走 DSH 原生路徑,診斷只保留不含聊天內容的元數據。進一步瞭解與 issue 反饋見 GitHub 倉庫,目錄介紹見 SkillHub 插件頁。