前言¶
用 DSH 做日常開發,會話管理大多是瑣碎活:舊會話在側邊欄越堆越多,刪一個要先翻列表;歸檔後的會話想再翻一眼內容並不方便;某一輪迴答跑偏了,希望從那一輪直接重來,而不是重開會話貼一遍上下文;想在所有會話裏注入一段固定的系統提示詞,又不想改核心源碼。
下面介紹的 dsh-session-kit 就是圍繞這些場景做的插件。它不修改 DSH 核心源碼,而是通過官方擴展點,把刪除、歸檔、輪次操作、話題導航、本地記憶與召回、運行時提示詞與壓縮配置這一整套會話頁管理能力掛到 DSH 上。
這是什麼¶
dsh-session-kit 是 ltxlong 維護的 DeepSeek Harness 插件,當前版本 1.1.0,License 爲 MIT。一句話定位:不修改 DSH 核心包,通過官方擴展點增強 DeepSeek Harness 會話頁的日常管理能力。
按照 DSH「一切皆插件」的設計思路,插件的增刪都應該不影響核心。dsh-session-kit 遵守了這一點:全局提示等運行時註冊在插件停用、卸載或未加載後會被釋放,DSH 回到原本的系統提示詞與壓縮配置。
安裝¶
從 npm 安裝(推薦):
dsh plugin --profile web add dsh-session-kit
也可以從 GitHub 安裝:
dsh plugin --profile web add github:ltxlong/dsh-session-kit
安裝後進入會話頁,頭部會出現「會話管理」按鈕,說明插件已掛載。
核心功能¶
會話管理菜單¶
「會話管理」按鈕打開的菜單覆蓋以下操作:
- 刪除會話:會話停止後經確認刪除;運行中的會話受保護,整個會話刪除始終禁用。Windows/macOS 儘量移入系統回收站/廢紙簍,沒有回收站集成的平臺會直接刪除會話目錄。
- 重新命名:通過官方 Session API 修改當前會話標題。
- 分叉會話:當前輪次允許分叉時,從當前會話創建一個新會話。
- 歸檔會話:把當前會話加入工作區歸檔列表,從側邊欄隱藏。
- 打開目錄 / 導出會話:用系統文件管理器打開當前會話日誌目錄;導出調用 DSH Session 日誌的導出能力。
- 統計調用:按工具名統計當前會話的工具調用,顯示總數、成功、失敗、未完成次數。
歸檔會話管理¶
菜單裏的「打開歸檔」進入歸檔管理彈窗,針對已歸檔(從側邊欄隱藏)的會話:
1、按標題搜索歸檔會話;
2、不恢復會話也能直接在彈窗中預覽內容,預覽中展示工具調用統計,支持分頁加載更多消息;
3、把歸檔會話分叉到新聊天中繼續;
4、恢復歸檔會話,讓它重新出現在會話列表;
5、打開歸檔會話所在文件夾;
6、確認後刪除。正在運行的歸檔會話不會被刪除。
輪次刪除與重新生成¶
插件會在已完成的頂層助手輪次旁,以及部分失敗輪次尾部增加兩個操作:
- 此輪到後續全刪除:從選中輪次開始,刪除當前輪及其後所有已完成輪次在當前 conversation surface 與後續模型上下文中的內容,不會刪除整個 Session。
- 重新生成:先從選中輪次開始刪除後續內容,再把該輪原始用戶提問重新加入隊列,讓模型從該位置重新回答。
這是會直接改動會話狀態的操作,插件採取保守策略:
- 刪除不是抹掉 append-only 日誌,而是追加持久的 replacement tombstone,tombstone 的 provider/model 爲
dsh-turns-del/tombstone。摺疊後的 active surface 不再展示被刪除範圍,後續模型上下文不再包含這些內容,但原始事件仍保留在會話日誌中。 - 修改 live session 前會取得 Agent maintenance lease,成功返回前執行
sessions.flush()。 - 每個目標輪次都會驗證是否仍對應獨立、連續的 surface 區間;輪次已被壓縮、與保留歷史混合、或與已有刪除範圍重疊時,直接拒絕,不做猜測處理。
- 重新生成只在 Agent 未運行、輸入隊列無待處理內容、且選中輪次存在唯一純文本用戶提問時執行。
話題快捷導航¶
每個會話頁右側會顯示類似 chat.deepseek.com 的話題導航:
- 默認收起爲一列扁平線條標記,鼠標懸浮或鍵盤聚焦後展開固定尺寸的可滾動面板;
- 用戶提問以單行省略標題展示,完整標題只通過系統 tooltip 顯示;
- 滾動會話時自動高亮當前話題,點擊話題平滑跳轉;
- 屏幕寬度較小時自動隱藏。
記憶管理與召回¶
側邊欄「記憶」按鈕打開記憶管理彈窗,操作的是本地 SQLite 記憶庫,路徑爲 <profile>/.dsh-session-kit/memory.sqlite:
- 項目:記憶按項目歸組,內置
default項目;支持新建/重命名/刪除項目,可爲項目配置自動啓用的會話 ID。 - 臨時 / 永久記憶:每輪對話蒸餾產出的臨時記憶默認不落庫,確認「存儲」後寫入本地庫;支持激活/停用、編輯、跨項目移動與刪除。
- 標籤:預置標籤(用戶畫像、項目約束、模塊路徑等)與自定義標籤,可即時激活/停用。
- 激活佔比:左側導航底部以環形圖即時顯示永久記憶的激活比例。
- 召回開關:自動蒸餾每次對話、全部會話啓用 default、對話自動匹配項目(每輪增量匹配,僅新啓用的項目會通知)。
自動召回在每輪用戶消息時執行:用 jieba + CJK 二元組分詞(分詞依賴 @node-rs/jieba),FTS5 BM25 相關性排序,疊加標籤權重與時間衰減;命中結果按輪次注入模型上下文,弱輸入輪繼承上一輪記憶;FTS 不可用時自動回退子串掃描。索引按分詞器版本戳在後臺分批異步重建,不阻塞啓動。
同時提供 memory_search 工具供 Agent 主動檢索記憶,並在每輪消息旁提供記憶面板,顯示該輪上下文中真實攜帶的記憶。注入命中以快照隨會話日誌持久化,重啓後仍可回看(含臨時記憶命中),記憶的後續編輯/刪除不影響歷史輪的顯示。
運行時全局提示與壓縮配置¶
- 全局提示:會話管理 → 全局提示,打開「全局提示詞設置」彈窗,可啓用/關閉、編輯提示詞內容,保存成功後有提示。Host 端通過
ctx.systemPrompt.section()把提示詞註冊到運行時系統提示詞組裝中,不修改 DSH 官方代碼,也不覆蓋官方system-prompt配置。插件停用、卸載或未加載後,這段運行時註冊會被釋放,不再生效。 - 壓縮配置:僅在運行時覆蓋當前壓縮引擎,不寫入官方或預設配置文件。
典型用法¶
結合上面這些能力,幾個常見流程是這樣的:
1、管理堆積的會話:會話頁頭部點「會話管理」→「歸檔會話」把舊會話從側邊欄隱藏;之後需要時點「打開歸檔」,按標題搜索、彈窗預覽內容,再決定恢復、分叉到新聊天還是刪除。
2、某輪迴答跑偏後重來:在該輪旁選「重新生成」。插件會校驗該輪未被壓縮、與保留歷史無混合、且存在唯一純文本用戶提問,通過後刪除該輪後續內容並重放原始提問。
3、注入固定提示詞:會話管理 → 全局提示,編輯內容並開啓開關。提示詞通過運行時註冊生效,不改官方配置文件,關閉插件即失效。
4、沉澱項目記憶:側邊欄「記憶」按鈕打開記憶管理彈窗,維護臨時/永久記憶與標籤;每輪對話自動蒸餾與召回,Agent 也可通過 memory_search 工具主動檢索。
實現與文件結構¶
如果想在安裝前審查源碼,可以對照倉庫裏的這幾個文件:
lib/index.js:Host 路由、全局提示運行時註冊、歸檔/會話操作、輪次刪除與重新生成邏輯。lib/client.js:Web UI Slot、全局提示彈窗、其他彈窗、話題導航、輪次操作、樣式與 locale 字典。lib/memory.js:本地記憶庫(SQLite)、jieba/二元組分詞召回、蒸餾與後臺索引重建邏輯。cordis.patch.yml:插件 bundle 插入 patch。
適用場景與注意事項¶
適合的用戶:會話數量多、需要歸檔與找回的 DSH 重度使用者;經常需要從某一輪重試的人;想在本地沉澱項目記憶並自動召回的團隊或個人;需要在運行時注入全局提示詞、但不想改核心配置的人。
使用前請注意:
1、插件以當前 dsh 進程的權限運行,可以讀寫會話日誌和本地文件。安裝前建議自行審查源碼與許可證(MIT)。
2、記憶庫是本地 SQLite 文件(<profile>/.dsh-session-kit/memory.sqlite),刪除項目或記憶不可恢復;卸載插件不會自動刪除記憶庫文件。
3、運行中的會話始終禁用整個會話刪除;輪次刪除/重新生成採取保守策略,遇到已壓縮或不安全的歷史會直接拒絕。
4、被刪除的內容只是不再展示、不再進入後續模型上下文,原始 append-only 事件仍保留在會話日誌中,對日誌留存有要求的用戶需要知曉這一點。
小結¶
dsh-session-kit 把會話管理裏瑣碎的刪除、歸檔、輪次重試、記憶沉澱收進一個插件,全程走官方擴展點,不動 DSH 核心源碼,卸載後環境也能幹淨還原。倉庫與收錄頁:
- GitHub:https://github.com/ltxlong/dsh-session-kit
- 社區目錄頁:https://www.skillhub.cn/plugins/ltxlong/dsh-session-kit (社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係)