前言¶
DeepSeek Harness(dsh)的核心理念是「一切皆插件」:模型、工具、會話、沙箱和 Web UI 都可以在配置層替換或重組。官方倉庫把這件事寫得很清楚,開發者預覽版也已經把源碼公開。實際用 npx @deepseek-ai/dsh web 打開網頁界面時,中間一列通常還是會話:智能體在沙箱裏改文件,人要覈對內容,往往得另開編輯器,或者來回切換標籤。
社區插件 dsh-workbench 做的就是這塊界面:給 Web GUI 加上接近 VS Code 的三欄佈局——左側邊欄保持原樣,中間在「會話」和「文件內容」之間切換,右側常駐 Explorer 文件樹。點開文件後,中間列變成 Monaco 編輯器;打開 Markdown 還可以切到渲染預覽。它由 Dpf555 維護,MIT 許可證,倉庫地址是 Dpf555/dsh-workbench。社區目錄目前把它歸在「記憶」分類,GitHub 星標 6;從 README 和 package.json 看,它解決的是工作臺佈局,不是跨會話記憶。
需要先說明一點:社區插件目錄(deepseek-harness-plugin.com)是獨立站點,和 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。下文按目錄詳情頁、GitHub README、package.json 與源碼交叉覈對後整理。
這是什麼¶
dsh-workbench 是面向 DeepSeek Harness Web GUI 的 Cordis 插件,npm 包名是 @dsh-local/dsh-workbench,當前 package.json 版本爲 0.2.0,dsh.client.platform 聲明爲 web。維護者是 Dpf555,許可證爲 MIT。
它要解決的問題很具體:默認客戶端殼沒有「常駐右欄 + 點擊文件切換中間視圖」的公開擴展點。這個插件自己補上 Explorer 槽位,再用 Monaco(VS Code 的編輯器核心,倉庫固定爲 monaco-editor 0.52.2)把中間列變成可編輯的代碼視圖。
佈局可以按 README 裏的示意來理解:
┌─────────┬──────────────────────────┬────────────┐
│ 左側邊欄 │ 中間:會話 ⇄ 文件內容 │ 右側:文件樹 │
│ (不變) │ 點文件 → Monaco 編輯器 │ Explorer │
└─────────┴──────────────────────────┴────────────┘
主機半部在 index.js 裏註冊 /wb/* 靜態資源,以及 /wb/api/ 下的文件操作;瀏覽器半部由 client.js 加載 /wb/workbench-client.js。文件讀寫走 DSH 的 ctx.fs,並按當前會話的工作區做圍欄。
核心功能¶
右側 Explorer¶
右欄是常駐文件樹,設計參考 microsoft/vscode,圖標用的是 VS Code 官方 seti 字體。倉庫已經提交了 assets/seti.css、seti-map.json 和 seti.woff。
README 列出的能力包括:
- 展開 / 摺疊目錄
- 新建文件、新建文件夾
- 刷新、全部摺疊
- 面板可拖寬;寬度範圍在補丁說明裏是 240–420px,默認 300px
- 用
«收起;收起後右側留 28px 窄條,點擊即可重新展開
文件樹的根不是整個磁盤,而是當前活躍會話的工作區,對應會話的 header.cwd,也就是該會話自己的沙箱邊界。切換會話時,右欄和編輯器標籤頁會跟着重建。沒有活躍會話時,回退到 sandboxPolicy 的部署根,這個根可以在 profile 的 cordis.patch.yml 裏固定。
中間列:Monaco 編輯器¶
點擊文件後,中間列從會話視圖切到代碼編輯器。編輯器是 monaco-editor 0.52.2,README 寫明它提供:
- 多標籤頁
- 語法高亮
- minimap
Ctrl+S保存- 未保存的髒標記
- 保存衝突時的「重新加載 / 強制覆蓋」(寫入用版本號 CAS,避免互相覆蓋)
編輯時,下方輸入框和停靠條會自動隱藏,編輯器佔滿整列。切回會話可以用頂部的「對話 / 代碼」標籤,或「返回會話」按鈕。
index.js 把單文件讀取上限設爲 5MB;二進制文件按 FS_NOT_TEXT 拒絕,不會當文本打開。
Markdown 預覽¶
打開 .md 文件後,標籤行會出現「預覽」按鈕,一鍵切到渲染視圖,並隨編輯即時刷新。渲染器是插件自帶的,不額外拉依賴。
README 寫明它覆蓋 GFM 的一個子集:標題、粗斜體、行內代碼與圍欄代碼、列表與任務清單、引用、表格、鏈接、圖片、分隔線。暫不支持嵌套列表、腳註,以及 HTML 透傳——HTML 一律轉義,避免注入。
安全邊界¶
文件操作都經過 DSH 的 ctx.fs。主機半部會再做一次路徑圍欄:先解析工作區根,再 fs.contains 檢查目標是否落在根內,越界返回 outside-workspace。寫入帶版本號,遇到 FS_STALE_VERSION 時按衝突處理,而不是直接覆蓋。
客戶端會把當前活躍會話 id 帶到每個 /wb/api/* 請求裏,服務端用 sandboxPolicy.resolve({ session }) 決定柵欄根。index.js 暴露的操作爲:describe、listDir、readFile、writeFile、createFile、createDir、assetText。
安裝與啓用¶
目錄詳情頁給出的安裝命令如下,在 DeepSeek Harness 終端裏運行即可:
dsh plugin add github:Dpf555/dsh-workbench
如需可復現安裝,按目錄頁的寫法固定 commit 哈希。倉庫 main 分支截至 2026-08-15 的最新提交是 16f20acf544abcefa9e40b6159fd1b9badd425a6:
dsh plugin add github:Dpf555/dsh-workbench#16f20acf544abcefa9e40b6159fd1b9badd425a6
只跑這一條,通常還不夠用出 README 描述的完整三欄界面,原因有兩條。
第一,Monaco 發行版不入庫。assets/vs/ 要靠 npm run setup:assets 下載,大約 13MB;scripts/install-profile.mjs 會檢查 assets/vs/loader.js,沒有就直接退出。倉庫裏現成的是 UI bundle 和 seti 圖標,沒有編輯器核心文件。
第二,三欄佈局依賴對 DSH 檢出的三處補丁。README 寫明:不打補丁時,往往只有浮窗、沒有右欄。補丁基於 DSH 0.1.0-rc.6 生成,直接改檢出裏的客戶端 bundle;DSH 按請求讀取這些文件,並且帶 cache-control: no-cache,硬刷新即可生效,不用再構建。
README 給出的完整步驟如下。前置條件是 Node.js ≥ 18、git,以及能訪問 npm registry 的網絡:
git clone https://github.com/Dpf555/dsh-workbench.git dsh-workbench
cd dsh-workbench
# 1. 下載 monaco 資產並生成 seti 圖標(約 13MB)
npm run setup:assets
# 2. 安裝到 DSH profile(下次 `dsh web` 重啓後加載 /wb 路由與客戶端引導)
node scripts/install-profile.mjs --profile web
# 3. 給當前 DSH 檢出打三欄佈局補丁
node scripts/apply-patches.mjs --checkout <checkout-root>
# 不傳 --checkout 時,腳本會嘗試探測 ~/.npm-cache/_npx 下的檢出
然後重啓 dsh web,並在瀏覽器裏 Ctrl+F5 硬刷新。
檢出根目錄指包含 node_modules/@deepseek-ai/ 的那一層。用 npx 安裝時,常見位置在 ~/.npm-cache/_npx/ 下面。install-profile.mjs 默認把包裝進 ~/.dsh/profiles/web/node_modules/@dsh-local/dsh-workbench/(可用環境變量 DSH_HOME 改根目錄),並在該 profile 的 cordis.patch.yml 裏追加 workbench 這一行。
三處補丁各自做一件事:
ui-layout.patch:AppFrame 增加第 4 條網格軌道explorer,加上 slot、拖寬手柄和toggleExplorerui-conversation.patch:暴露window.__DSH_CONV_BRIDGE__[sessionId].setView,點擊文件才能切中間視圖ui-sidebar.patch:頁面加載時掛上 UI bundle,刷新後也能自愈
DSH 升級之後,如果補丁打不上,需要對照新的 bundle 重新生成,README 建議用 git diff --no-index 對比原始文件和補丁後的文件。
使用方法¶
按 README 的操作順序:
- 硬刷新頁面,右欄應出現文件樹。
- 點目錄展開,點文件後,中間列切到 Monaco,輸入框隱藏。
Ctrl+S保存。頂部「對話 / 代碼」標籤或「返回會話」按鈕可以切回去。- 右欄頭部可以新建文件或文件夾、刷新、全部摺疊、收起面板;左邊緣拖動改寬度。
改完 index.js 或 client.js 之後,需要重新啓動 dsh web 再硬刷新。會話級工作區解析依賴主機半部注入 sessions 服務,只刷新前端不夠。
卸載也按 README:
- 刪掉
<DSH_HOME>/profiles/web/cordis.patch.yml裏- insert:的workbench行,重啓dsh web - 刪除
<DSH_HOME>/profiles/web/node_modules/@dsh-local/dsh-workbench/ - 補丁回退:重裝對應 npm 包(
npm i @deepseek-ai/dsh-client-ui-{layout,conversation,sidebar}@0.1.0-rc.6後覆蓋檢出的lib/client.js),或git apply -R patches/*.patch
適用場景與注意事項¶
適合已經在用 dsh web、希望在同一頁裏瀏覽和修改當前會話工作區文件的人。它不是終端 TUI,也不是給 Agent 用的記憶存儲。GitHub 上還有同名或近名的倉庫(例如其他維護者的 workbench / explorer 插件),安裝時認準 Dpf555/dsh-workbench 和目錄頁上的這條命令。
使用前把這幾條限制看清楚:
ctx.fs目前沒有 rename / delete 契約,所以暫不支持重命名和刪除文件。- 二進制文件不能當文本讀;單文件讀取上限 5MB。
- 沒有打開會話時,右欄仍可能可見,但點擊文件不會切換中間視圖(視圖環是會話級的),文件樹此時顯示部署根。
- Markdown 預覽只覆蓋上面列出的 GFM 子集。
- 補丁針對
0.1.0-rc.6。DSH 還在開發者預覽階段,客戶端 bundle 一變,補丁就可能失效。
插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。目錄頁也寫了同樣的警告:安裝前檢查源代碼倉庫和許可證;需要可復現安裝時,固定 commit 哈希。社區目錄不是官方應用商店,不要只憑分類名稱或星標決定是否安裝。
小結¶
dsh-workbench 把 DeepSeek Harness 的網頁會話界面,補成「左邊欄不變、中間會話與編輯器切換、右邊文件樹常駐」的工作臺。編輯器用的是 Monaco 0.52.2,Markdown 可以預覽,文件操作限制在當前會話工作區裏。要讓三欄真正出現,除了目錄頁上的 dsh plugin add,還需要按 README 下載 Monaco 資源,並對 DSH 檢出打那三處補丁。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-workbench/
GitHub:https://github.com/Dpf555/dsh-workbench