dsh-better-workspace:DSH 側邊欄主題分組插件

前言

DeepSeek Harness 的原生側欄只提供基礎的工作區與會話列表,缺乏主題分組與批量操作能力。當會話分散在不同工作區時,查找、歸檔或整理變得繁瑣。dsh-better-workspace 是一個疊加在原生“工作區”區域之上的主題分組插件:它不會替換官方列表,而是在同一區域重新組織顯示,並提供宿主沒有的批量操作與安全刪除。

這是什麼

dsh-better-workspace 是 DeepSeek Harness 的側邊欄主題分組插件,由 whybebabo 維護。它疊加在原生“工作區”區域之上,不替換官方列表:會話仍由宿主管理,插件只在這塊區域上重新組織顯示,並補上宿主沒有的批量操作與安全刪除。

核心功能

主題分組

每個工作區內部是一棵樹,用 emoji 標記的“分組”文件夾收納會話,另有系統默認分組與「已歸檔」桶。

  • 新建分組:在工作區 ⋯ 菜單或標題欄 + 菜單裏的「新建主題並放入…」;也可以把會話拖到目標分組來實現歸類。新分組默認排在該工作區分組列表的最上面。
  • 新建會話:分組行尾的 + 直接在該分組下新建會話(工作區行尾的 + 則在該工作區新建)。
  • 改名:雙擊分組名直接內聯編輯(重名與非法字符會即時提示並禁用保存)。
  • 排序:拖動分組行,拖到目標行的上/下半區決定插入位置,拖動時顯示插入指示線。
  • 只看此分組:分組 ⋯ 菜單裏的篩選會同時鎖定它所屬的工作區——同名分組不會跨工作區串味。
  • 刪除分組:只清除歸屬,組內會話回到系統默認分組,不刪會話。

每個工作區都有系統默認分組,不能改名或刪除,但可以像普通分組一樣拖動排序。

篩選與搜索

  • 工作區下拉篩選
  • 面板內本地搜索
  • 「只看此分組」

批量操作

點標題欄的「選擇」進入選擇模式,選擇模式接管標題欄:退出、已選數量、歸檔/取消歸檔/移動/永久刪除排成一行原生圖標按鈕,窄側欄不折行。

選擇混入已歸檔條目時,歸檔與移動置灰;混入未歸檔條目時取消歸檔置灰;混入未分組會話時移動置灰。工具欄下方直接說明置灰原因,懸停也有提示。暫存中的「新會話」佔位行不參與批量選擇。「全選」只包含當前顯示出來的行:分組頭複選框、分組 ⋯ 菜單、工作區 ⋯ 菜單走同一個派生(selectableIds),超過「顯示全部 60 條」的分組會提示「已選中 N 條;另有 M 條未顯示」,展開後再選即可——不會悄悄把沒渲染過的會話帶進批量刪除。

安全刪除

DSH 本身沒有刪除會話的命令,插件自行實現,規則是“寧可拒刪”。

刪除會移除磁盤上的會話記錄,無法恢復(工作區文件本身不受影響)。流程是:調 /delete/preview 拿逐條判定 → 用戶在對話框裏確認 → 調 /delete/execute 執行。

  • 會話正在運行 → 先按官方方式 agent.cancel({kind:'user'}) 並等待離開 running(上限 3 秒),停不下來就不刪。
  • 有子智能體會話 → 攔下,請刪除主會話(會級聯清理並在 preview 中計數)。
  • 用戶分叉(帶 parentSession、origin 爲空)是頂層會話,可單獨刪除,不會被當成子智能體。
  • 刪除當前正在看的會話後,自動切到一個新的空白會話。

與宿主一致

狀態點、置頂上浮、行內懸浮卡、行尾操作條、定時任務時鐘、圖標與配色,都對齊宿主自己的實現。

失效保護

插件不會接管 DSH 的其餘部分:側欄摺疊、窄視口或路由不可達時,面板會完全隱藏並交還原生 UI。

面板渲染在 shell.overlay,用結構選擇器定位原生工作區區域,覆蓋矩形與該區域自身盒子重合。被覆蓋區域加上 inert + aria-hidden,官方彈窗出現時自動釋放。

主題數據單獨存放

分組與歸屬關係寫在 <DSH_HOME>/dsh-better-workspace/topics.v1.json 這個單文件 sidecar 裏,可直接備份、可與宿主升級解耦;卸載插件後數據仍在。

寫入採用 臨時文件 → fsync → rename,並在覆蓋前保留 .bak。主文件損壞時自動回退備份並進入只讀模式(面板頂部橫幅提示);回退期間發生的那次寫入不會再拿損壞的主文件覆蓋 .bak。主文件與備份同時不可解析時拒絕一切寫入(不會用空狀態覆蓋磁盤),修好文件後只讀模式自動解除,無需重啓宿主。

位置 作用
<DSH_HOME>/dsh-better-workspace/topics.v1.json 分組與歸屬關係(單文件,可直接備份)
<DSH_HOME>/dsh-better-workspace/topics.v1.json.bak 上一次成功寫入的副本
<DSH_HOME>/dsh-better-workspace/topics.v1.json.corrupt-<ts> 主文件無法解析時保留的損壞副本,供人工搶救
<DSH_HOME>/dsh-better-workspace/topics.v1.lock 跨進程寫鎖(內容爲 <pid>-<隨機> 令牌)
localStorage["dsh-better-workspace:prefs:v1"] 工作區/分組篩選、摺疊、搜索、拖拽順序

安裝與啓用

環境要求

  • DeepSeek Harness Desktop 或 Web 0.2.1-rc.x,@deepseek-ai/cordis 4.0.5;
  • Node.js ≥ 22.19;
  • 本機可用 Git(以 github: 方式安裝時)。

從 npm 安裝(推薦)

dsh plugin --profile web add @whybebabo/dsh-better-workspace

DSH 會把插件裝進 Web profile,並把 @whybebabo/dsh-better-workspace 註冊到 dsh.profile.bundles,不需要克隆倉庫、手動安裝依賴或構建客戶端。

沒有全局 dsh 命令時,用 npx 執行:

npx @deepseek-ai/dsh plugin --profile web add @whybebabo/dsh-better-workspace

安裝命令需要本機可以使用 Git 與 pnpm;使用 npx 時還需要 Node.js。

Desktop 會修改 desktop profile,裝之前建議先備份 cordis.patch.yml / package.json / pnpm-lock.yaml:

dsh plugin --profile desktop add @whybebabo/dsh-better-workspace

從 GitHub 安裝

不經過 npm,直接從倉庫安裝某個發佈版本:

dsh plugin --profile web add github:whybebabo/dsh-better-workspace#v0.1.3

把 #v0.1.3 換成你要的 tag。這條路徑同樣需要 Git 與 pnpm,也不需要克隆倉庫。

從源碼安裝

需要改代碼或跟 main 分支時:

git clone https://github.com/whybebabo/dsh-better-workspace.git
cd dsh-better-workspace
npm install && npm run build

先在不影響現有 profile 的隔離環境裏驗證一遍:

dsh --profile topic-e2e --from-default-profile web --dump-config
dsh plugin --profile topic-e2e add "link:$(pwd)"
dsh --profile topic-e2e --no-open --port 8791      # 打印帶 token 的 URL

確認無誤後裝到日常使用的 profile:

dsh plugin --profile web add "link:$(pwd)"

以 link: 方式安裝時,宿主讀取的始終是當前目錄的產物:改完代碼 npm run build 並重啓即可,不必重新 add。

啓動或重啓 DSH

安裝後關閉舊的 DSH Web 進程並重新啓動:

dsh web

使用 npx 的啓動方式:

npx @deepseek-ai/dsh web

打開側欄,點「工作區」標題旁出現的 ▾,或把鼠標移到「工作區」上——看到工作區下拉與分組樹,說明插件已加載。

升級

發佈新版本後重新執行安裝命令並替換版本:

dsh plugin --profile web add @whybebabo/dsh-better-workspace

隨後重啓 DSH。以源碼方式安裝的則用:

git pull && npm install && npm run build

卸載

dsh plugin --profile web remove @whybebabo/dsh-better-workspace

主題數據保留在 <DSH_HOME>/dsh-better-workspace/,需要清除請手動刪除該目錄。

典型用法

分組操作

  1. 在工作區標題旁的 ▾ 打開下拉菜單,選擇「新建主題並放入…」。
  2. 在彈出的對話框中選擇目標分組,或留空讓新分組默認出現在頂部。
  3. 雙擊分組名進行重命名。
  4. 拖動分組行到目標位置,上/下半區決定插入位置。

會話歸檔

  1. 鼠標懸停在會話行尾,點擊 ⋯ 菜單裏的「歸檔」。
  2. 或進入選擇模式,勾選多個會話,然後點擊標題欄的「歸檔」按鈕。

批量移動

  1. 點擊標題欄的「選擇」進入選擇模式。
  2. 勾選需要移動的會話。
  3. 點擊標題欄的「移動」按鈕,選擇目標分組。

安全刪除

  1. 進入選擇模式,勾選需要刪除的會話。
  2. 點擊標題欄的「永久刪除」按鈕。
  3. 在彈出的對話框中確認刪除(會有預覽信息)。
  4. 確認後插件會逐條執行刪除,正在運行或包含子智能體的會話會被拒絕。

適用場景與注意

  • 適合需要頻繁整理會話、按主題分組的 DSH 用戶。
  • 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
  • 主題數據存儲在本地,卸載後仍可手動清理。
  • 與宿主版本有兼容性要求:DeepSeek Harness Desktop 或 Web 0.2.1-rc.x,@deepseek-ai/cordis 4.0.5。

短結尾

dsh-better-workspace 在不改變 DSH 原生行爲的前提下,爲側欄增加了主題分組、批量操作與安全刪除能力。適合需要精細化管理會話的用戶。插件目錄頁與源碼倉庫見下方鏈接。

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

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

小夜