前言¶
DeepSeek Harness(DSH)的側欄管理通常需要組合兩個插件才能實現基礎功能:一個負責「置頂/最近」兩欄,另一個負責右鍵菜單。這種拼湊方案存在兩個問題:第一,兩欄插件會隱藏官方的會話行並自行渲染;第二,菜單插件基於官方行查找 ID,導致在置頂行上菜單靜默失效。dsh-sidebar-pins 將這兩項功能合二爲一。它自行渲染置頂欄,同時解析官方行並寫入 data-dsh-pins-id 屬性,兩者共享同一個菜單實現,確保所有行都能使用完整功能。
安裝¶
使用 DSH CLI 安裝該插件。
dsh plugin --profile desktop add github:boyl/dsh-sidebar-pins
Web 版 profile 請將 desktop 替換爲 web。安裝後需重啓 DSH Desktop(bundle 層僅在啓動時組合)。卸載時執行:
dsh plugin --profile desktop remove dsh-sidebar-pins
功能¶
側欄分爲「置頂」和「最近」兩欄,各自獨立滾動。置頂過的會話不再出現在最近列表中,新置頂的排在最前。
會話管理¶
在任意會話行上,懸停會出現圖釘圖標 📌,點擊即可置頂或取消置頂。置頂欄中的圖標爲品牌藍色實心。
右鍵、雙擊或點擊行尾的 ⋯ 按鈕,會彈出包含以下選項的菜單:
- 置頂 / 取消置頂:將當前會話移入置頂欄。
- 重命名:調用
ctx.sessions.binding(id).session.rename()。 - 標記爲未讀 / 已讀:標記狀態,行左側出現橙色條。
- 歸檔:調用
ctx.workspaces.archiveSession()。 - 分叉:調用
ctx.sessions.fork()並打開子會話。 - 複製:支持複製會話鏈接、標題或 ID 到剪貼板。
- 在新窗口打開:通過
?session=<id>深鏈打開。 - 在文件管理器打開:調用官方
POST /open-in-app/open路由。
工作區管理¶
工作區行同樣支持右鍵、雙擊或 ⋯ 菜單。功能包括:
- 置頂工作區:調用
ctx.workspaces.insertBefore()將工作區移至首位。 - 重命名:調用
ctx.workspaces.rename()。 - 新建會話:調用
ctx.workspaces.startSession()。 - 複製路徑:複製路徑到剪貼板。
- 在文件管理器打開:調用官方路由。
- 刪除工作區(含磁盤):這是一個特殊功能。由於渲染進程沒有文件系統權限,該操作通過 Host 路由
POST /dsh-sidebar-pins/delete-workspace實現。該路由包含嚴格的校驗:只接受workspaceId和確認名稱,拒絕危險路徑(如/、$HOME等),並要求二次確認。
原生按鈕接管¶
插件接管了官方行尾的 ⋯ 按鈕。在捕獲階段攔截點擊,彈出完整菜單。工作區行上的 + 新建會話按鈕保持原生行爲,不受影響。
數據存儲¶
所有狀態存儲在瀏覽器的 localStorage 中,鍵名爲 dsh-sidebar-pins.v1,結構爲 { v, pinned[], unread[], pinnedWorkspaces[] }。
首次啓動時,插件會從舊版插件(如 dsh-codex-pins.v1、dsh-workspace-menu:v1)導入數據,導入成功後刪除舊鍵。
注意事項¶
- 刪除會話限制:插件未實現「刪除會話(含磁盤記錄)」功能,依賴第三方插件或需修改核心代碼。
- 依賴項:側欄佈局依賴原生 DOM 的
role="tree"、class(如sessionRow、groupSection)以及 React Fiber 結構。如果 DSH 更新導致這些底層結構變化,插件可能失效。 - 權限:插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。
總結¶
dsh-sidebar-pins 通過統一的渲染和菜單邏輯,解決了 DSH 側欄管理碎片化的問題。它提供了 Codex 風格的置頂體驗,以及覆蓋所有行的完整右鍵菜單。對於需要頻繁管理會話和工作區順序的開發者,這是一個直接的效率提升工具。