DSH 會話圖譜插件:在畫布上可視化 Agent 交互分叉與繼承關係

前言

在 Agent Chat 中,一次會話很容易從某輪對話分叉出多個子會話,這些子會話又可能繼續分叉、回退或繼承歷史。在默認的列表視圖裏,誰從誰分叉、當前會話在整張圖裏的位置,都得自己回憶。這會增加定位上下文的成本,也容易遺漏分支或重複閱讀共享歷史。

插件簡介

這個插件爲 DSH 會話提供一個可視化畫布:把用戶輪次畫成節點,會話退成顏色與標籤貫穿的線條,分叉點與繼承關係一目瞭然。它默認只顯示當前會話所在的樹,且自上而下生長,可以通過工具欄切換到“全部會話”和“橫向”佈局。插件由 xiguazhiPrince 維護,屬於客戶端插件。

核心功能

  • 當前會話的樹:打開即定位,只鋪開當前會話所在的那棵輪次樹——父鏈、與它並列的兄弟分支、以及它們的後代;一鍵切回全圖。
  • 豎向生長:默認自上而下,同一會話的下一輪在上一輪下方,父節點居中於自己的所有子節點;fork 頭在兩側展開,自己的下一輪夾在中間;會話顏色貫穿自己的輪次;一鍵切回橫向。
  • 輪次節點:每個用戶輪次是一個節點;當前會話及祖先路徑的 steering 輸入也會作爲後續節點出現;輪次號、提示預覽、分叉數;共享的繼承前綴只畫一次;0 條自有輸入的會話顯示爲會話頭 chip;長直鏈摺疊成 +N 條輸入。
  • 畫布手感:滾輪平移、Shift + 滾輪橫向平移、Ctrl / ⌘ + 滾輪縮放、拖空白平移(不會選中文字),外加適應窗口 / 定位當前 / 100%。
  • 一屏概覽:另有一個“會話概覽”標籤頁:輪次、步驟、模型耗時、工具耗時、輸出 token、運行狀態。
  • 三個入口:對話標籤頁、會話頭部開關、右側欄常駐標籤頁——哪裏順手用哪裏。

安裝與啓用

GitHub 直裝:

# 裝進 web profile —— 就是 `dsh web` 啓動的那個
dsh plugin --profile web add github:xiguazhiPrince/dsh-session-map

# 換你自己的 profile 名即可,例如 tui
dsh plugin --profile <你的 profile> add github:xiguazhiPrince/dsh-session-map

profile 名要已經存在於 $DSH_HOME/profiles 下(dsh --help 裏 --profile 那一段就是它);想新建一個就先用模板派生:dsh myweb --from-default-profile web 會照 web 模板建出 myweb 並啓動它。安裝走的是 profile 自己的 pnpm,裝完這個包會同時寫進它的 dependencies 與 dsh.profile.bundles。

安裝後驗證:

dsh --profile web --dump-config    # profile 名換成你裝的那個

在輸出中確認有 # == dsh-session-map 層:

# == dsh-session-map
- id: session-map
  name: dsh-session-map

然後重啓該 profile 的進程並刷新頁面。四處應該出現:

位置 應該看到
會話標籤欄 「概覽」與「會話圖譜」兩個標籤頁
會話頭部工具區 「會話圖譜」開關;右側欄正顯示圖譜時再點一次會關閉它
右側欄標籤 dsh-session-map.map(標題「會話圖譜」)和 dsh-session-map.overview(標題「會話概覽」)
圖譜頁本身 輪次樹畫布;默認只畫當前會話的那棵樹、且自上而下,工具欄的「當前會話樹 / 全部會話」與「豎向 / 橫向」兩組開關可切回全圖與原方向,旁邊顯示會話數、輪次數、樹數與當前縮放百分比

典型用法

三個入口

座位 內容
conversation.view 「概覽」標籤頁(order 20)、「會話圖譜」標籤頁(order 30)—— 默認關閉
conversation.session.header.utilities 會話頭部的「會話圖譜」開關(order 40)
sidebar.right.pane.tab 常駐標籤頁 dsh-session-map.overview 與 dsh-session-map.map

工具欄

控件 作用
「當前會話樹 / 全部會話」 畫布範圍:當前會話所在的那棵樹,或者列表裏的全部會話
「豎向 / 橫向」 樹的生長方向:自上而下,或者自左向右
「摺疊長直鏈」 直鏈超過 8 條輸入時摺疊中間段(保留頭 2 + 尾 1),顯示 +N 條輸入;點擊畫布上的膠囊展開,取消勾選則全部展開(默認開)
「隱藏子代理會話」 過濾 origin: subagent 的會話(默認開)
− / + / 100% / 適應窗口 / 定位當前 縮放與取景
鍵盤圖標 快捷鍵表

畫布交互

  • 滾輪上下平移,Shift + 滾輪左右平移,Ctrl / ⌘ + 滾輪縮放;
  • 拖動空白平移(不會選中文字),點空白收起菜單;
  • 點擊輪次節點彈出操作菜單:跳轉到該會話 / 在畫布中居中(暫時只能定位到會話,不能定位到具體輪次);
  • 點擊會話標籤或會話頭 chip 彈出會話操作菜單;
  • 點擊摺疊直鏈上的 +N 條輸入 展開該段;工具欄的「摺疊長直鏈」控制是否自動摺疊。

默認只畫當前會話的會話樹

圖譜打開時只鋪開當前會話所在的那棵樹:從樹根(parentId 鏈上仍被列表列出的最遠祖先)到它的所有後代,含與當前會話並列的兄弟分支。工具欄上的「當前會話樹 / 全部會話」兩段開關切換這個範圍。

默認豎向生長

樹自上而下長:同一會話的下一輪在上一輪下方,父節點居中於自己的所有子節點;fork 出來的會話頭在兩側展開,父會話自己的下一輪夾在中間;沒有 fork 的父子輪次保持一條直鏈。fork 邊從被繼承的最後一輪出發,而不是從父會話的鏈尾出發。橫向模式是自左向右,輪次往右排。

輪次、會話與空會話

  • 節點 = 一條用戶輸入:輪次 prompt 來自 projectionValues.turnOutline;當前會話及其祖先路徑的已加載事件窗口會把同一輪裏的 steering 消息追加成後續節點。沒有加載歷史的會話仍只有每輪首條 prompt。
  • 會話 = 顏色 + 標籤:顏色按會話 id 穩定哈希取 8 色之一;標籤只掛在該會話第一條自有輪次上,顯示該會話的顯示標題;當前會話的整條自有鏈強高亮,繼承路徑弱高亮。
  • 共享前綴只畫一次:子會話的日誌以父會話的事件開頭,構建時按 turn + prompt/response 與父 outline 求最長公共前綴;匹配到的輪次複用祖先的節點,fork 後的第一條自有輪次掛在該前綴的最後一輪下。
  • 0 條自有輸入的會話:沒有輪次可以放標籤,就在 fork 輪上掛一個會話頭 chip(尚無輸入)。chip 本身也是樹節點,所以「空會話再 fork 出空會話」會形成 chip 鏈,不會丟層級。
  • 長直鏈摺疊:一段沒有分叉的純直鏈超過 8 條輸入時,默認保留頭 2 + 尾 1,中間折成 +N 條輸入;點擊展開。摺疊只發生在純直鏈上,分叉輸入、會話頭、末條輸入永遠可見。
  • 投影缺失:該會話只畫會話頭 chip(投影未加載),工具欄說明有幾個會話沒有輪次數據。

對話標籤欄的兩個標籤頁默認關閉

「概覽」和「會話圖譜」這兩個 conversation.view 入口由瀏覽器本地偏好控制,默認不註冊。頭部開關和右側欄的兩個標籤頁不受影響,圖譜仍然可以從右側欄正常使用。

在頁面控制台裏改,刷新後生效(不需要重新構建或重啓):

localStorage.setItem('dsh.session-map.conversationViews', 'true')   // 打開
localStorage.setItem('dsh.session-map.conversationViews', 'false')  // 顯式關閉
localStorage.removeItem('dsh.session-map.conversationViews')        // 回到出廠默認

適用場景與注意

適合需要頻繁查看 Agent 交互上下文、多分支會話梳理的開發者與調試人員。插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證(MIT)。

短結尾

通過可視化畫布,分叉與繼承關係變得清晰,便於定位上下文與調試。插件由 xiguazhiPrince 維護,可在目錄頁與 GitHub 上找到更多信息。

參考資料

  • https://github.com/xiguazhiPrince/dsh-session-map
  • https://www.skillhub.cn/plugins/xiguazhiPrince/dsh-session-map
羽毛球分组比赛记分
小程序二维码

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

小夜