在 DeepSeek Harness (DSH) 的側邊欄中管理會話時,將對話移動到不同工作區通常需要繁瑣的菜單操作。dsh-workspace-drag 作爲一個 DSH Web UI 插件,旨在簡化這一過程。它允許用戶直接將對話行拖拽到任意工作區組,實現會話的遷移與歸類。
插件簡介¶
該插件由維護者 lanscer 開發,採用 MIT 許可證。它通過瀏覽器端的拖拽引擎與主機的原子性遷移邏輯配合,在不彈出中間面板的情況下完成會話的跨工作區移動。
安裝¶
可以通過官方插件命令從 GitHub 倉庫安裝:
dsh plugin --profile web add github:lanscer/dsh-workspace-drag
如果是本地檢出,需要在插件目錄內運行打包腳本:
npm run install:plugin
注意事項:
* 插件會將自身註冊到 ~/.dsh/profiles/web 目錄。
* 在 Windows 下,安裝命令必須在克隆後的插件目錄內運行(即包含 package.json 的目錄),否則會報錯 ENOENT ... package.json。
* Windows 環境下,插件安裝程序使用 junction 創建符號鏈接,無需開發者模式或管理員權限。
使用方法¶
啓用功能後,在側邊欄的分組視圖中:
1. 按住一個對話會話行。
2. 將其拖動到另一個工作區組的標題或該組內的任意會話行上。
3. 釋放鼠標,會話將自動移動到目標工作區。
如果需要在設置頁控制該功能,請前往 Settings → Drag to Organize。
功能特性¶
該插件主要包含以下核心能力:
- 無縫跨工作區拖放:直接將會話行拖動到目標工作區組,無需確認彈窗或中間面板。
- 設置頁一鍵開關:通過設置頁可隨時啓用或禁用拖拽整理功能。
- 運行中會話保護:當前處於運行狀態的會話 agent 無法被移動。
- 自動等待日誌靜默:對於剛剛結束的會話,主機端會自動等待日誌寫入結束(最多 15 秒),確保遷移時數據完整。
- 原子性移動驗證:遷移過程採用“複製到臨時位置 -> 驗證 -> 原子交換”的機制,確保數據不丟失。
- 實時寫入句柄重指向:修復了遷移後因句柄路徑未更新導致的
ENOENT錯誤,確保會話在移動後仍能正常接收日誌。
技術細節與注意事項¶
遷移邏輯¶
每個會話的工作區身份由其日誌頭部的 cwd 字段(絕對路徑)決定。遷移操作會重寫該頭部,更新工作區註冊表的所有權,並將物理會話目錄移動到新的工作區項目鍵目錄下。
v3 日誌格式支持¶
插件要求 DSH 版本在 0.1.5 以上以支持 v3 日誌格式。遷移時會重寫 session.v3.jsonl[.zstd] 文件的頭部,否則 DSH 持久化層會因路徑不匹配報錯。
依賴與兼容性¶
- Node.js:需要 Node.js >= 18。
- zstd CLI:主機端需要安裝
zstd命令行工具。 - 頭部重寫:遷移會重寫日誌頭部的
cwd字段。
文件結構¶
插件的核心邏輯位於 lib/index.js(主機端)和 lib/client.js(瀏覽器端),通過 package.json 中的 dsh.bundle.patch 和 dsh.client.inject 配置進行集成。
結語¶
dsh-workspace-drag 通過原生拖拽體驗解決了 DSH 中會話整理的痛點,提供了安全、原子的遷移方案。對於需要頻繁調整工作區結構的開發者,這是一個提升效率的實用工具。
- GitHub 倉庫:https://github.com/lanscer/dsh-workspace-drag
- 插件目錄:https://www.skillhub.cn/plugins/lanscer/dsh-workspace-drag