前言¶
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/cordis4.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/,需要清除請手動刪除該目錄。
典型用法¶
分組操作¶
- 在工作區標題旁的 ▾ 打開下拉菜單,選擇「新建主題並放入…」。
- 在彈出的對話框中選擇目標分組,或留空讓新分組默認出現在頂部。
- 雙擊分組名進行重命名。
- 拖動分組行到目標位置,上/下半區決定插入位置。
會話歸檔¶
- 鼠標懸停在會話行尾,點擊
⋯菜單裏的「歸檔」。 - 或進入選擇模式,勾選多個會話,然後點擊標題欄的「歸檔」按鈕。
批量移動¶
- 點擊標題欄的「選擇」進入選擇模式。
- 勾選需要移動的會話。
- 點擊標題欄的「移動」按鈕,選擇目標分組。
安全刪除¶
- 進入選擇模式,勾選需要刪除的會話。
- 點擊標題欄的「永久刪除」按鈕。
- 在彈出的對話框中確認刪除(會有預覽信息)。
- 確認後插件會逐條執行刪除,正在運行或包含子智能體的會話會被拒絕。
適用場景與注意¶
- 適合需要頻繁整理會話、按主題分組的 DSH 用戶。
- 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
- 主題數據存儲在本地,卸載後仍可手動清理。
- 與宿主版本有兼容性要求:DeepSeek Harness Desktop 或 Web
0.2.1-rc.x,@deepseek-ai/cordis4.0.5。
短結尾¶
dsh-better-workspace 在不改變 DSH 原生行爲的前提下,爲側欄增加了主題分組、批量操作與安全刪除能力。適合需要精細化管理會話的用戶。插件目錄頁與源碼倉庫見下方鏈接。