在 DSH 插件生態中,開發者有時需要在當前會話上下文下嘗試不同的提示、模型或工具組合,但又不希望污染主對話的歷史記錄。現有的做法往往需要手動創建新會話或編輯器,且會話會保留在列表中。dsh-sidebar-branch-chat 解決了這個問題,它爲 dsh-better-sidebar 新增了一個獨立的「分支對話」標籤頁。這個標籤頁允許創建即歸檔的會話,並自動注入上下文摘要,使用與主 agent 相同的工具集。
它是什麼¶
這是一個運行在 dsh-better-sidebar 之上的 companion 標籤頁插件。它不 fork 或安裝 Better Sidebar 的副本,而是通過 API 注入新的標籤頁。
- 維護者:kuanfu0430
- 許可:MIT
- 依賴:
dsh-better-sidebar>= 0.11.0(提供ctx.betterSidebar.registerTab能力)
安裝與啓用¶
安裝命令如下:
dsh plugin --profile web add github:kuanfu0430/dsh-sidebar-branch-chat
安裝完成後,需要重啓 dsh web,然後從 Better Sidebar 的標籤頁條中打開「Branch Chat」標籤頁。
核心功能¶
該插件實現了以下核心能力:
- 獨立標籤頁與空白編輯器:提供一個空白輸入框。第一次發送消息時,會創建一個新的分支會話;隨後的發送會延續該分支。
- 上下文繼承(三明治結構):分支會話是一個全新的空會話,不復制主聊天的歷史事件。上下文繼承採用「頭/中/尾」三明治結構:
- 頭:第一條原始用戶文本。
- 中:中間穿插的用戶問題。
- 尾:最後完成的回合,包含工具調用和結果。
- 注意:未完成的回合會被省略。
- 工具與權限:分支 agent 使用主 agent 當前正在運行的預設生成工具,擁有與主 agent 相同的工具列表。權限預設(包括完全訪問沙箱)會從主聊天複製過來。
- 即時歸檔與隔離:分支創建後立即歸檔(
archiveSession),在主會話列表和搜索中不可見,僅存在於側邊欄標籤頁中。 - UI 與交互:標籤頁包含工具欄,用於切換現有分支(●/○)和選擇模型/推理努力。輔助氣泡使用官方 MarkdownText 種子,摘要和框架提示僅對模型可見,在 UI 投影中被剝離。
典型用法¶
- 創建分支:打開 Branch Chat 標籤頁,輸入消息併發送。這會創建一個新的分支,標籤名稱取自消息的前 20 個字符。
- 切換與模型選擇:在工具欄中點擊現有分支圓點進行切換,或選擇該分支專用的模型和推理努力。
- 停止與繼續:停止按鈕位於底部(空狀態或忙碌狀態時可用)。在輸入框爲空時按 Enter 會刷新待處理的隊列消息,而不停止當前回合。
適用場景與注意事項¶
- 會話生命週期:分支的生命週期綁定在主會話上。只有主聊天頁面打開時才能創建或繼續分支。關閉主頁面會暫停分支,但轉錄內容仍保存在持久化存儲中。
- 事件輪詢:分支的轉錄通過 JSON 輪詢獲取(空閒 1.5s,忙碌 300ms)。冷分支在
live: false後停止輪詢,直到下一次發送或手動切換。 - 工作區隔離:聊天隔離不是工作區隔離。分支會話複用主會話的
cwd(當前工作目錄),文件、Shell 和 Git 的副作用共享主工作樹。框架提示是模型可見的軟約束,而非權限邊界。 - 權限處理:如果主聊天預設是「詢問」,沙箱提升會在標籤頁內回答(
allowed-once/ 拒絕)。allowed-once的授權不會繼承,ask_user_question不會在標籤頁內回答。
總結¶
dsh-sidebar-branch-chat 提供了一種輕量級的方式,在不影響主聊天記錄的情況下進行上下文隔離的測試和探索。它通過 API 掛載標籤頁,利用三明治上下文繼承和即時歸檔機制,實現了類似「分支」的會話管理。