在 DeepSeek Harness (DSH) 中處理長對話時,傳統的上下翻頁方式難以快速定位歷史節點。dsh-chat-history 插件通過在會話頭部添加一個獨立的“History”標籤頁,將當前會話的用戶消息轉化爲可點擊的目錄,解決了長會話導航困難的問題。
核心功能¶
該插件實現以下功能:
- 消息目錄化:將當前會話的用戶消息提取並轉換爲可點擊的目錄列表。
- 點擊跳轉:點擊目錄項後,自動切換回 Chat 標籤頁,平滑滾動到目標消息位置。
- 噪聲過濾:自動過濾工具調用、思考過程、命令等非用戶消息,保持目錄整潔。
- 自動分頁:在標籤頁激活狀態下,自動分頁加載舊歷史(每頁 50 條消息),直到加載完整。
- 零槽位衝突:註冊爲
conversation.view會話標籤頁,與官方的 Trajectory 標籤頁並排顯示,不佔用details槽位,不影響官方工具調用詳情面板。
安裝與啓用¶
使用官方插件安裝命令將其添加到指定的 profile(例如 web):
dsh plugin --profile web add dsh-chat-history
安裝完成後,需要重啓 dsh web 進程以使插件生效。
典型用法¶
- 進入會話:在任意會話的頭部標籤欄中,新增了 History 標籤頁( alongside Chat 和 Trajectory)。
- 查看目錄:點擊 History 標籤頁,目錄會按順序列出所有用戶消息。每條目顯示序號和單行截斷標題,鼠標懸停可查看完整文本。
- 加載歷史:標籤頁頭部會顯示加載狀態(“Loading earlier history…”),在加載過程中自動獲取舊消息,加載完成後顯示總條目數。
- 跳轉定位:點擊目錄中的任意條目,界面會切換回 Chat 標籤頁,並平滑滾動到對應的用戶消息位置,該消息會閃爍 1.5 秒以示高亮。
開發與維護¶
- 無構建步驟:這是一個純客戶端插件,無需配置 Webpack 或 Vite 等構建工具。
- 熱重載支持:修改
lib/client.js後,無需重啓,系統每 500ms 檢測文件變更並自動熱重載(約 1 秒生效)。 - 重啓時機:以下操作需要重啓
dsh web才能生效:- 添加新的插件包。
- 修改
package.json中的dsh.client聲明。 - 切換插件的啓用/禁用狀態。
兼容性¶
插件會根據當前 DSH 版本自動適配數據源:
| DSH 版本 | 數據源 Hook | 視圖切換方式 |
|---|---|---|
>= 0.1.5 |
useChat((s) => s.order) / useChat((s) => s.nodes) |
openView("chat") |
<= 0.1.0-rc.x |
useSession((s) => s.chat.order) / s.chat.nodes |
點擊 Chat 標籤按鈕 |
插件通過檢測 useChat 是否注入來自動選擇對應的邏輯分支。Sessions、分頁狀態(hasMore / loadingOlder)以及消息節點的 kind === "user" 形狀在兩個版本中保持一致,因此目錄邏輯可以共用。
生態背景¶
DeepSeek Harness 採用「一切皆插件」的架構理念。此插件託管在社區目錄,與 DeepSeek 或幻方官方無從屬關係。使用前請檢查源碼與許可證(MIT)。
- 目錄頁:https://www.skillhub.cn/plugins/Stylelinzzz/dsh-chat-history
- GitHub 倉庫:https://github.com/Stylelinzzz/dsh-chat-history