dsh-session-move:在 DSH 工作區間遷移冷會話

前言

DeepSeek Harness (DSH) 的會話數據通常以 JSONL 格式存儲在本地文件系統中。在現有的 DSH 環境中,將一個已存在的“冷”會話從當前工作區移動到另一個工作區,同時保留其 SessionId 和完整的事件歷史記錄,是一個難以直接通過標準接口完成的操作。官方安裝的 DSH rc.6 版本尚未內置會話遷移能力。dsh-session-move 插件旨在填補這一空白,提供會話遷移的底層實現。

插件定位

這是一個由 kirkchinese 維護的 DeepSeek Harness 功能插件包。它的核心作用是在兩個 DSH 工作區之間移動現有的冷會話,並在遷移過程中保證會話 ID 和歷史記錄的完整性。該插件的交互目標直接指向 DSH Web 側邊欄中的現有會話標題行。

核心功能

插件通過以下能力實現會話遷移:

  1. 只讀檢查:提供 ctx.sessionMove.inspect({ sessionId, targetWorkspaceId }) 接口,用於執行 dry-run(試運行)檢查。
  2. 側邊欄拖拽:在 DSH Web UI 中,用戶可以直接通過拖拽會話標題行來執行移動操作。
  3. RPC 調用:底層通過 workspace.moveSession RPC 完成實際的會話變更提交。

檢查能力

inspect 接口不會修改數據,僅返回以下檢查信息:
* 源和目標工作區的身份標識。
* 源和目標 JSONL 文件的存儲路徑。
* 源和目標文件的不可變頭部信息。
* 持久化修訂版本號。
* 物理行數和邏輯事件計數。
* 連續序列邊界。
* 事件的 SHA-256 哈希值。
* 阻塞條件(如會話處於活躍狀態、已歸檔、目標位置衝突、後端/核心能力不支持等)。

遷移語義

一次成功的遷移只會改變會話頭部的 cwd(當前工作目錄)及其所屬的工作區賬戶。它不會修改 SessionId、創建時間、血緣關係、預設配置、所有邏輯事件以及外部的 dsh-session: 引用。遷移後的會話將在未來工具調用和沙盒策略中歸屬於目標工作區。

安裝與啓用

安裝該插件需要使用已應用特定補丁的 DSH 構建。安裝命令如下:

dsh plugin --profile <profile> add dsh-session-move

如果使用打包好的 tarball,可以使用以下命令:

DSH_HOME=<dsh-home> pnpm dsh plugin --profile <profile> add ./dsh-session-move-0.1.0.tgz

安裝後建議執行 dsh --profile <profile> --dump-config 確認配置加載正常。

運行環境要求

  • 依賴包:插件依賴 @deepseek-ai/dsh-base 以及 dsh-headless 或 dsh-web-app 等主機包。如果配置文件中僅包含 @deepseek-ai/dsh-base,插件將因缺少必要的主機層而無法激活。
  • 版本要求:需要與 DSH 的核心版本兼容(如 >=0.1.0-rc.5 <0.1.0-rc.7)。

典型用法

插件提供了兩種主要的操作方式:

1. 代碼調用

通過編程接口調用只讀檢查,或通過 RPC 調用執行移動:

// 檢查遷移可行性
ctx.sessionMove.inspect({ sessionId, targetWorkspaceId })

// 執行移動(通常由 UI 側邊欄拖拽觸發)
workspace.moveSession({ targetWorkspaceId, sessionId, beforeSessionId? })

2. 側邊欄操作

在 DSH Web 界面的側邊欄中,選中一個冷會話標題,將其拖拽至目標工作區,系統將自動調用上述 RPC 完成遷移。

適用場景與注意

  • 適用範圍:當前版本僅支持 JSONL 格式的會話和 冷會話(非活躍會話)。SQLite 和 Windows 系統的遷移功能已列入計劃但尚未實現。
  • 官方版本限制:官方安裝的 DSH rc.6 版本未包含遷移或移動能力,僅支持上述 inspect 接口的只讀功能。要使用拖拽移動功能,必須使用帶有補丁的特定構建版本。
  • 併發與鎖:插件依賴 DSH 的“每個會話/進程一個實時寫入者”模型。文件系統鎖僅作爲縱深防禦手段,不用於跨進程的併發事務性寫入控制。
  • 數據安全:在遷移完成後,插件會驗證最終頭部、唯一的有效工作區所有者、事件計數和邏輯事件 SHA-256,確認無誤後纔會刪除恢復日誌。

總結

dsh-session-move 爲 DSH 用戶提供了在跨工作區管理會話歷史時的必要手段。通過保留 SessionId 和事件流,它允許開發者在不丟失上下文的情況下重新組織會話結構。更多詳細文檔、分發指南和回滾步驟可查閱項目倉庫。

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

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

小夜