前言¶
在 DeepSeek Harness(DSH)裏,側欄會話默認只能在當前工作區內排序。當你把同一類任務拆到多個工作區,或想把某段對話從「試驗目錄」挪到「正式項目」時,原生界面沒有跨工作區搬遷入口,只能手動找日誌文件改歸屬,容易漏改一處導致會話在側欄「失聯」。
DSH Transpose Plugin(倉庫名 DSH-Transpose-Plugin,維護者 zsenpro,社區分類爲工作流)針對的就是這件事:用拖拽把一段對話連同歷史一起遷到另一個工作區,並儘量保留工作區內原有的排序手勢。
這是什麼¶
一句話:把一段對話從一個工作區拖到另一個工作區,歷史一起帶走。
npm 包名爲 @yg/dsh-session-mover,以 DSH 插件(Cordis bundle)形式安裝;cordis.patch.yml 插入的條目 id 爲 yg-session-mover。簡介與目錄頁一致——爲不同工作區之間的項目提供更方便的轉移。
核心功能¶
兩種拖拽分流¶
側欄會話行上有兩種拖拽,按發生順序分流:
- 直接拖 → 走瀏覽器原生 HTML5 拖放,會話只在當前工作區內換位置,與未裝插件時相同。
- 按住不動約 220ms 再拖 → 插件接管,用於跨工作區搬家。長按成立後右側浮出目標工作區列表,繼續拖動並在目標上鬆手即完成搬遷;按 Esc 可取消。
判定細節(README 原文):按住不動 220ms 纔算長按;這段時間內位移超過 12px 則判定爲普通拖動,交回原生排序。
投放目標與反饋¶
拖起後可投放到:右側浮層上的工作區卡片,或側欄裏的工作區行。成功後底部提示「已移動到 <工作區名>」,側欄會立刻刷新。若當前只有一個工作區,不顯示浮層。
服務端搬遷與回滾¶
一段對話屬於哪個工作區,由會話日誌首幀(header)裏的 cwd 決定。移動一次需同步三處,缺一處會話可能失聯:
- 將
<sessions>/<舊 project 目錄>/<id>/session.vN.jsonl.zstd搬到目標工作區對應目錄; - 重寫日誌首幀裏的
cwd(僅首幀爲 header,後續幀爲原始事件字節,直接拼接,不重新壓縮); - 在 workspace registry 裏把會話從舊工作區摘掉、掛到新工作區,並同步 registry 的 cwd 索引。
任一步失敗會把日誌搬回原處、還原歸屬(含掛回原工作區,避免游離),接口返回 attach-rejected 並附回滾結果。
安裝後宿主側提供 POST /yg-session-mover/api/move(參數 { sessionId, targetWorkspaceId })與 /api/peek;客戶端在 shell.overlay 上註冊浮層。每次調用會在 ~/.dsh/yg-session-mover.log 追加一行日誌。
安裝與啓用¶
package.json 中 name 爲 @yg/dsh-session-mover,版本在資料中爲 1.0.0,許可證 MIT,要求 Node >=20。
在 DSH 裏讓 plugin_manager 執行 install_bundle,target 指向插件所在目錄(即包含本 bundle 的目錄),不要使用未在資料中出現的 dsh plugin add github:... 類拼接命令。
安裝後若修改了客戶端半,需要讓頁面重新加載:桌面版若無刷新菜單,需關閉窗口再打開,纔會拉到新的 __DSH_BOOT__ 圖。
倉庫提供自檢腳本 verify.js:複製一份真實日誌到臨時目錄,跑搬遷、回滾、幀完整性、重複 id 拒絕等流程,不碰真實數據:
node verify.js
典型用法¶
- 在側欄找到要遷移的會話行。
- 按住約 220ms 且位移不超過 12px,再開始拖動(若立刻拖動則僅爲工作區內排序)。
- 在右側浮層或側欄工作區行上鬆手,等待「已移動到 …」提示並確認側欄已刷新。
適用場景與注意¶
適合誰: 經常在多個 DSH 工作區之間整理對話、希望保留完整 session 歷史、又不想手改 session.vN.jsonl.zstd 與 registry 的開發者。
已知限制: 當前進程裏正在打開的會話,header 在內存裏是凍結的。文件、目錄與工作區歸屬會被正確搬走,側欄刷新後也會顯示在新工作區下;但該進程內該會話記錄的工作目錄仍是舊值,直到重啓 DSH 才切換。接口返回值裏的 liveHeader: "frozen" 即表示此情況。未在當前進程打開過的會話不受影響。
安全與權限: 插件以當前 DSH 進程權限運行,會讀寫會話目錄與 workspace registry。安裝前應閱讀 GitHub 倉庫 源碼與 LICENSE,確認符合你的環境策略。社區目錄 skillhub.cn 插件頁 爲獨立站點收錄,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
DSH 生態強調「一切皆插件」;Transpose Plugin 補的是側欄跨工作區搬遷這一環,在保留工作區內原生排序的前提下,用長按拖拽完成會話與歷史的整體遷移。需要詳情與更新時,可查閱目錄頁與 GitHub README。
- 目錄頁:https://www.skillhub.cn/plugins/zsenpro/DSH-Transpose-Plugin
- GitHub:https://github.com/zsenpro/DSH-Transpose-Plugin