DSH 的會話本質是一條線性滾動的對話日誌。用戶通常只能順着往下看,難以快速定位到歷史某輪對話,也無法從中間節點進行續寫或分支切換。dsh-trail-plugin 爲 DSH 增加了一個「歷史索引」導航層,將事件日誌摺疊爲可交互的節點樹。
是什麼¶
該插件由 MemoryIt 維護,旨在給線性會話日誌加上可索引、可跳轉、可分叉的導航層。它通過 DSH 官方投影通道持久化索引($DSH_HOME/storages/session_projcache.json),重啓後即可恢復,不受對話窗口已加載條數的限制。
核心功能¶
- 行內跳轉:點擊任意節點,聊天流自動滾動到該輪。
- 續寫(fork):從任意節點 fork 出新的子會話繼續,不打斷當前會話。
- 分叉切換:有分叉的節點帶角標,可展開下拉菜單,一鍵切換分支。
- 可拖寬、可摺疊:左欄寬度支持調整,摺疊狀態會被記住。
安裝與啓用¶
前置要求¶
- DSH(
dshCLI 可用,profile 機制正常) - Node.js ≥ 20
安裝命令¶
使用官方推薦方式從 npm 安裝:
dsh plugin --profile web add dsh-trail-plugin
--profile需替換爲你實際使用的 profile 名(默認 GUI 爲web)。注意:bundle 層改動需要整進程重啓 DSH 才生效,安裝完成後請重啓 DSH。
驗證安裝¶
重啓後檢查以下兩點:
1. 啓動日誌中出現 [I] dsh-trail [dsh-trail] hello world from dsh-trail-plugin (host)。
2. GUI 會話列表左側出現「歷史索引」左欄。
典型用法¶
安裝並重啓後,進入任意會話:
-
行內跳轉
點擊任意節點行,聊天流會自動滾動到該輪對話。如果目標未加載,會自動加載更早內容;如果目標無獨立氣泡,會定位到鄰近內容。 -
續寫(fork)
鼠標懸停在節點行上,點擊行尾出現的「續寫」按鈕,即可從該節點 fork 出新的子會話並自動打開。 -
分叉切換
有分叉的節點行首會顯示數字角標,點擊可展開共享會話下拉,查看子會話摘要並切換。 -
調整與摺疊
拖動左欄右緣可調整寬度(範圍 240–480px)。點擊左欄右上角的<-可摺疊;摺疊後,點擊對話區左上角的->即可展開。
配置¶
插件配置通過 profile 的用戶層 patch 覆蓋。編輯 $DSH_HOME/profiles/<name>/cordis.patch.yml:
- id: dsh-trail-plugin
name: dsh-trail-plugin
config:
enabled: true
label: my-trail
| 字段 | 默認值 | 說明 |
|---|---|---|
enabled |
true |
是否啓用插件 |
label |
dsh-trail |
日誌與標識前綴 |
注意事項¶
- 數據安全:插件只讀事件日誌,寫路徑僅通過官方
sessions.fork接口創建新會話,不會改動你的會話數據。 - 重啓生效:修改 bundle 層(如修改代碼或配置)後必須重啓 DSH 進程。
- 摺疊狀態:刷新後左欄消失多半是處於摺疊態,點擊對話區左上角的
->展開。 - 視圖限制:點擊跳轉提示「聊天視圖未激活」時,需手動切回「對話」視圖。
- 舊會話兼容:只有
session.l.zstd壓縮日誌的極舊會話不在補齊範圍內,有log.jsonl的會話均會補齊。
結語¶
dsh-trail-plugin 通過在 DSH 中增加側邊欄導航層,解決了線性日誌難以跳轉和分叉的問題。適合需要在複雜長對話中快速定位上下文或進行多分支實驗的開發者。