dsh-sidebar-pins:Codex 風格的側欄置頂與全行右鍵菜單

前言

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

功能

側欄分爲「置頂」和「最近」兩欄,各自獨立滾動。置頂過的會話不再出現在最近列表中,新置頂的排在最前。

會話管理

在任意會話行上,懸停會出現圖釘圖標 📌,點擊即可置頂或取消置頂。置頂欄中的圖標爲品牌藍色實心。

右鍵、雙擊或點擊行尾的 ⋯ 按鈕,會彈出包含以下選項的菜單:

  1. 置頂 / 取消置頂:將當前會話移入置頂欄。
  2. 重命名:調用 ctx.sessions.binding(id).session.rename()。
  3. 標記爲未讀 / 已讀:標記狀態,行左側出現橙色條。
  4. 歸檔:調用 ctx.workspaces.archiveSession()。
  5. 分叉:調用 ctx.sessions.fork() 並打開子會話。
  6. 複製:支持複製會話鏈接、標題或 ID 到剪貼板。
  7. 在新窗口打開:通過 ?session=<id> 深鏈打開。
  8. 在文件管理器打開:調用官方 POST /open-in-app/open 路由。

工作區管理

工作區行同樣支持右鍵、雙擊或 ⋯ 菜單。功能包括:

  1. 置頂工作區:調用 ctx.workspaces.insertBefore() 將工作區移至首位。
  2. 重命名:調用 ctx.workspaces.rename()。
  3. 新建會話:調用 ctx.workspaces.startSession()。
  4. 複製路徑:複製路徑到剪貼板。
  5. 在文件管理器打開:調用官方路由。
  6. 刪除工作區(含磁盤):這是一個特殊功能。由於渲染進程沒有文件系統權限,該操作通過 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)導入數據,導入成功後刪除舊鍵。

注意事項

  1. 刪除會話限制:插件未實現「刪除會話(含磁盤記錄)」功能,依賴第三方插件或需修改核心代碼。
  2. 依賴項:側欄佈局依賴原生 DOM 的 role="tree"、class(如 sessionRow、groupSection)以及 React Fiber 結構。如果 DSH 更新導致這些底層結構變化,插件可能失效。
  3. 權限:插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。

總結

dsh-sidebar-pins 通過統一的渲染和菜單邏輯,解決了 DSH 側欄管理碎片化的問題。它提供了 Codex 風格的置頂體驗,以及覆蓋所有行的完整右鍵菜單。對於需要頻繁管理會話和工作區順序的開發者,這是一個直接的效率提升工具。

項目地址:https://github.com/boyl/dsh-sidebar-pins

羽毛球分组比赛记分
小程序二维码

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

小夜