dsh-chat-projects:在 DSH 裏把會話在不同項目(工作區)之間移動

前言

DeepSeek Harness(DSH)在創建會話時會把會話綁定到當前工作區(項目),側邊欄裏可以創建、重命名、排序和刪除項目,但沒有「把已有會話挪到另一個項目」這類操作。會話一旦建錯項目,或目錄已經對應某個項目卻顯示在「未分組」裏,只能接受現狀或手動折騰存儲結構。

dsh-chat-projects 由社區維護者 Tzh0109 發佈,分類爲工作流,在 npm 上的包名是 dsh-chat-projects(GitHub 倉庫名爲 dsh-projects)。它補的是 DSH 原生缺失的能力:從會話行菜單把會話移到目標項目,以及批量把符合條件的未分組會話歸檔回對應項目;項目的創建與管理仍走 DSH 自帶側邊欄,不替換原生 UI。

這是什麼

插件一句話定位:面向 DSH 桌面端的 ChatGPT Projects 式會話整理——在工作區(項目)之間移動會話,並把未分組但目錄已屬於某項目的會話收回去。

維護者:Tzh0109。許可證:MIT(見倉庫 README)。當前 package.json 中版本爲 0.1.0。社區目錄頁:https://www.skillhub.cn/plugins/Tzh0109/dsh-chat-projects ;源碼與說明:https://github.com/Tzh0109/dsh-projects 。

核心功能

下面介紹 README 中已寫明、且與 DSH 存儲語義一致的幾項能力。

會話行「移到項目…」

懸停側邊欄某條會話 → 「…」→ Move to project…(界面文案爲移到項目)。對話框列出所有項目(路徑與會話數量),當前所在項目高亮;選當前項目時等價於 Ungrouped(leave the project),即離開項目、保持未分組,歷史不會被刪除。

批量「File ungrouped sessions」

對話框底部提供 File ungrouped sessions (N):只處理「未分組且 header 裏記錄的目錄已經是已註冊項目」的會話;已歸檔會話會跳過。

已加載會話:排隊到下次啓動

當前 DSH 運行中已加載的會話帶有凍結 header 與寫租約,不能當場改路徑。對此類會話選擇目標項目時,移動會寫入隊列文件 <DSH_HOME>/dsh-chat-projects/pending-moves.json,在下一次 DSH 啓動時、任何 agent 恢復之前自動執行;對話框裏可以取消已排隊的移動。從未打開過的會話可以立即移動。

安全拒絕與恢復

插件在下列情況拒絕移動而非強行改盤:會話仍被 agent 佔用、仍有運行中的 turn/subagent/job/schedule、子 agent 會話、header 無 cwd、目標目錄不存在、舊版 on-disk 格式、目標項目下已存在同 id 的會話目錄等。

移動過程會寫 journal、備份原始 header frame,失敗時自動回滾;崩潰後啓動時會讀 <DSH_HOME>/dsh-chat-projects/journal.json 嘗試恢復,備份在 <DSH_HOME>/dsh-chat-projects/backups/, staging 目錄爲 <DSH_HOME>/.dsh-chat-projects-trash/。

實現上,移動會同步改 workspace 的 sessionIds、重寫 session log 第 0 幀的 cwd、把會話目錄遷到目標 project key 下,並用 DSH 持久化後端做校驗;header.cwd 也是 workspace-write 沙箱根,移動後工具邊界隨新項目目錄變化。

環境與依賴

  • DSH 桌面 0.2.1-rc.x 及自帶 runtime;Host 側需要 Node 內置 Zstandard API(Node >= 22.15;DSH 自帶 24.x)。
  • 插件爲純 ESM + React,react 來自 DSH client baseline,無額外 npm 依賴。

安裝與啓用

使用 DSH 桌面自帶的 CLI。若 dsh 不在 PATH,可用 <DSH install>\resources\runtime\cli\bin\dsh.cmd(Windows 示例;Linux/macOS 請按本機 DSH 安裝路徑使用對應入口)。

# 從 npm(README 推薦的最省事方式)
dsh plugin --profile desktop add dsh-chat-projects

# 從 GitHub(倉庫名爲 dsh-projects)
dsh plugin --profile desktop add github:Tzh0109/dsh-projects

# 本地開發鏈接(路徑改成本機 checkout)
dsh plugin --profile desktop add "link:C:\path\to\dsh-chat-projects"

安裝後重啓一次 DSH 桌面(Host 半需要重啓);之後對 lib/client.js 的修改可通過 client HMR 熱更新。

卸載:

dsh plugin --profile desktop remove dsh-chat-projects

安裝前建議自行查看倉庫源碼與 MIT 許可證;插件在 DSH 進程權限下讀寫 ~/.dsh 與會話 log,屬於對非官方存儲語義的直接操作。

典型用法

經過上面的安裝與重啓,可按 README 步驟操作:

  1. 在側邊欄懸停某會話行 → 「…」→ Move to project…
  2. 選擇目標項目;若要高亮項表示「離開項目」,選 Ungrouped (leave the project)。
  3. 側邊欄刷新;對話框提示成功。若會話當前已加載,會提示已排隊,下次啓動再執行。

若主視圖正打開被移動的會話,移動完成後刷新頁面即可(數據本身未刪)。對話框底部可用 File ungrouped sessions 一次性整理符合條件的未分組會話。

適用場景與注意

適合誰: 經常在多個 repo/項目目錄間切換、需要把誤建項目的會話遷走,或希望未分組列表與磁盤上 project key 對齊的 DSH 桌面用戶。

務必知曉的限制(來自 README):

  • 存儲語義非官方:DSH 升級若改 session/workspace 格式,校驗失敗時會拒絕移動;升級後建議先用 disposable 會話試移,開發者可在倉庫跑 npm test(node --test test/core.test.mjs)。
  • 已打開會話只能下次啓動移動;Never-opened 的會立刻移動。
  • 新項目目錄需滿足 DSH workspace-write 沙箱授權(Windows 上涉及 DACL);使用 danger-full-access 時 README 稱與此無關。
  • 移動不刪除數據;「未分組」僅改變歸屬關係。

DSH 生態強調「一切皆插件」;SkillHub 等社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係,本文介紹的是社區插件而非官方功能包。

參考鏈接

  • 社區目錄:https://www.skillhub.cn/plugins/Tzh0109/dsh-chat-projects
  • GitHub:https://github.com/Tzh0109/dsh-projects
羽毛球分组比赛记分
小程序二维码

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

小夜