DeepSeek Harness Hub:把 dsh Web UI 裝進原生桌面窗口

前言

用 dsh 幹活時,Web UI 通常開在瀏覽器標籤頁裏:窗口混在一堆標籤中間,沒有獨立的任務欄身份;切走標籤就錯過任務完成時機;多會話並行只能靠瀏覽器標籤湊合;標題欄與圖標也沒法跟隨 dsh 的主題變化。對把 dsh 當主力界面的開發者來說,這些是每天都會碰到的摩擦。

dsh 的理念是「一切皆插件」,桌面化這件事同樣由插件層解決——這就是下面要介紹的 DeepSeek Harness Hub(dsh-hub)。它用 Tauri 2.x 原生窗口承載 dsh Web UI,把托盤、通知、會話標籤欄、交互終端、窗口記憶這些桌面能力補齊。項目自身也經歷過一次殼換代:早期版本(0.0.1-rc.14 / 0.0.2-rc.*)用 WebView2 做殼,當前已整體遷移到 Tauri 2.x,舊分支 dev-v1 已永久凍結。

這是什麼

DeepSeek Harness Hub 是 MarecGents 維護的開源項目,一句話定位:DeepSeek Harness(dsh)的桌面端框架,以原生 Tauri 2.x 窗口運行 dsh Web UI,提供托盤、主題同步、窗口記憶、右側欄與系統通知。

工程上分兩半:

  • 桌面殼:單一 Tauri 原生應用,cargo tauri build 產出 NSIS 安裝器,平臺爲 Windows;
  • 插件半邊:npm 包 @marecgents/dsh-hub(當前 0.1.4),承載 client UI、HTTP routes 與 cordis.patch.yml,並通過 dsh.client.inject 注入 @deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-settings

版本與分支狀態(2026-09-01):npm latestrc 雙 tag 均爲 0.1.4;main 爲唯一發布分支,dev-v2 爲唯一開發分支(當前 = 0.1.4),dev-v1 永久凍結。許可證 MIT。

核心功能

桌面化與窗口管理

  • 原生桌面身份:任務管理器顯示 DeepSeek Harness Hub 的圖標與名稱(NSIS 安裝);
  • 品牌化 Splash:啓動覆蓋層配色跟隨當前皮膚/主題(helpers/boot_theme.rs),dsh SPA 首繪後平滑淡出,不留白屏間隙;
  • 窗口狀態記憶:最大化、分辨率、主題持久化到 $DSH_HOME/dsh-hub/config.json;無保存尺寸時默認開在光標所在屏的 3/4(多顯示器感知,下限 480×360);
  • 主題跟隨(system):MutationObserver 事件驅動,標題欄深淺色、webview 背景與窗口圖標即時跟隨 dsh 頁面主題(Tauri 殼 Rust Dwm 實現);
  • 桌面圖標六面同步:任務欄、標題欄、Alt-Tab、托盤、開始菜單與桌面快捷方式統一指向 icons\current.ico 固定錨點;設置卡可選 5 張鯨魚娘圖標(sad/happy/duo/maid/blue)或默認主題翻轉鯨魚。

系統托盤與通知

托盤提供四類操作:顯示/隱藏主界面(按窗口狀態動態切換)、打開工作區(自動激活並前置資源管理器)、新建任務、退出。新建任務走官方 ctx.workspaces.startSession 流程,SPA 未就緒時以 __mgShellReady 300ms×20 輪詢重試,不丟命令;退出前寫 quit.marker 乾淨退出,避免被誤判爲崩潰重啓。

通知側包含兩部分:

  • 四段原創合成音效(開始 / 完成 / 需要你 / 出錯,無第三方素材),窗口隱藏到托盤時依然可聞;
  • 任務完成或出錯時彈 Windows 原生 Toast(notify-rust,30s 冷卻),點擊回窗口並跳到對應會話(mg:shell-command focus-session 事件 + __mgShellReady 300ms×20 重試);正在查看的會話完成時只響提示音不彈 Toast。

會話標籤欄與置頂

標題欄內是瀏覽器式會話多頁標籤:

  • 點擊切換、 新建、× 關閉;狀態點區分會話狀態(等待琥珀 / 後臺完成綠 / 運行藍 + 脈衝);
  • 內聯重命名(IME 組合輸入不誤提交);拖拽排序,持久化在 localStorage dsh-hub:session-tabs
  • 右鍵菜單複用官方 session-menu(分叉 / 歸檔 / 複製路徑 / 資源管理器)。

置頂會話:會話行 hover 即可置頂(同名會話安全跳過),置頂區常駐列表頂部,持久化於 $DSH_HOME/dsh-hub/pins.json(localStorage 兜底)。

交互終端

底部 dock 提供真實交互終端,基於 xterm.js 6.0.0 + node-pty:

  • Ctrl+J 開關;每 tab 一個獨立會話,cwd = 打開時所在工作區;
  • 自定義 Shell:PowerShell 5.1 / PowerShell 7 (pwsh) / cmd / Bash——只列出宿主探測到的 shell,默認選擇持久化(terminal-prefs);
  • 輸出走 SSE JSON 信封 + 進程級 token 鑑權(Authorization: Bearer / EventSource ?token=);
  • 關閉時 taskkill /T /F 殺整棵進程樹防殘留。

注意:對 rm / Remove-Item / format 等危險命令的攔截是 UX 護欄,不是安全邊界。

模型選擇與權限策略

  • composer 的模型入口替換爲 provider → model 兩級嵌套菜單,外加獨立 thinking-effort 觸發器;複用官方 modelDirectories 服務,與 /model 命令狀態一致,服務缺失時自動降級內置 seat,不阻塞;
  • 權限策略來自 dsh-permission-guard 插件的 policy 三檔:follow(跟隨會話官方預設)/ strict(白名單)/ read-only,設置頁與會話左下角 chip 雙入口切換。

四個獨立 dsh 插件

hub 附帶四個獨立插件,雙軌分發(隨 hub resources 打包 + 獨立 npm 軌,詳見倉庫 BUILD.md §7):

  • findings-ledger:baseline 快照 + 變更對賬 + 覆蓋度報告;
  • permission-guard:逐命令權限白名單 + 四級能力攔截(auto / give-command / confirm / never);
  • project-memory:每項目持久記憶(FACT.md + JOURNAL.jsonl),自動注入 systemPrompt.context,並提供 memory_read / memory_log / memory_fact 工具;
  • usage-stats:按 provider / model 聚合 token 用量,設置頁可視化(彙總 / 各模型卡片 / 按天表格 / 趨勢圖 / 單價費用估算)+ HTTP API。

設置頁、皮膚與雙語界面

  • 設置頁爲官方插件頁風格:分辨率 / 常規設置 / 外觀設置三卡片(默認摺疊)+ 權限策略單列,覆蓋窗口尺寸 / 主題 / 托盤行爲 / 會話完成通知 / 提示音 / 多實例開關 / 界面皮膚 / 背景圖 / 桌面圖標;
  • 皮膚 15 套:內置 5(午夜藍 / 舊紙張 / 終端綠 / ZCode / 極光紫)+ Reasonix 官方 8(rx-)+ opencode 2(oc-),每套淺 / 深 × 33 token,另可配背景圖;
  • i18n 全量雙語(zh/en):hub 界面文案與 usage-stats 文案收進詞典,語言源 = dsh 設置 General → Language,切換即全量刷新。

界面細節

  • 對話定位條(rail):中欄左緣豎排 minimap,點擊跳轉;hover 按 turnTimings 時間窗預覽真實節點 kind;配色按皮膚表面色 × 背景圖採樣自適應;
  • 右側欄三頁:概覽(Token 統計)/ 文件樹 / Git 變更,收起後保留窄欄快捷按鈕;
  • 右鍵菜單全量 DOM 接管:會話 / 工作區對象行專屬菜單,空白處刷新菜單,文本編輯要素不干預;
  • 殼內拖放恢復:列表行(工作區 / 會話)與標籤拖拽排序;拖文件到輸入區 = 官方附件上傳,其他區域安全忽略,杜絕 file:// 導航。

安全與穩健性

  • S0 安全:POST/PUT 等狀態變更請求校驗 Origin 白名單(loopback / tauri:),缺失 Origin 拒絕;GET/HEAD 跳過(DNS-rebinding 由 Host 校驗覆蓋);
  • 工作區打開接口 POST /api/dsh-hub/workspace/open:用 OS 默認方式打開文件 / 文件夾,host + origin + token 三重守衛;
  • 多實例保護:啓動時檢測已有 dsh 實例(任意端口),默認拒絕共存以防會話數據損壞;
  • 性能:會話後臺預熱(長會話冷開約 2s → 0.2s)+ 聊天流 content-visibility。

安裝與啓用

安裝走 NSIS 安裝器路線:

1、從 GitHub 倉庫獲取 NSIS 安裝器:https://github.com/MarecGents/deepseek-harness-hub 。需要說明:本文依據的資料截取中未包含可直接複製的安裝命令原文,這裏不按包名自行拼接,具體安裝步驟以倉庫 README 爲準;
2、安裝期自動下載私有 Node + dsh + 插件到安裝目錄,無需系統預裝 Node;
3、首啓自動進入 dsh UI。

卸載走快速通道並清理自有 profile 條目,保留 .dsh 本體與用戶數據。若走 npm / 源碼路線集成插件半邊,@marecgents/dsh-hub 當前版本 0.1.4,engines 要求 Node >= 24.0.0。

典型用法

下面是幾個可復現的日常流程:

1、多會話並行:在標題欄標籤欄點 新建、× 關閉;右鍵標籤可分叉 / 歸檔 / 複製路徑 / 打開資源管理器;會話行 hover 置頂,置頂區常駐列表頂部。

2、後臺跑長任務:把窗口藏進托盤繼續幹活。會話完成時響提示音並彈 Windows Toast,點擊 toast 回窗口並自動跳到對應會話;當前正查看的會話完成時只響提示音,不打斷。

3、開交互終端:Ctrl+J 開關底部終端 dock,每個 tab 獨立會話(cwd = 打開時所在工作區);默認終端在設置面板從已檢測到的 PowerShell 5.1 / PowerShell 7 / cmd / Bash 中選擇並持久化。

4、托盤新建任務:從托盤菜單直接新建,走官方 ctx.workspaces.startSession 流程,UI 即時刷新。

上述行爲涉及的本地持久化位置:

$DSH_HOME/dsh-hub/config.json         # 窗口尺寸 / 主題 / 托盤 / 桌面圖標等
$DSH_HOME/dsh-hub/pins.json           # 置頂會話(localStorage 兜底)
localStorage: dsh-hub:session-tabs    # 會話標籤排序
localStorage: terminal-prefs          # 默認終端選擇

適用場景與注意

適合:

  • 在 Windows 上把 dsh 當主力工作界面、需要多會話並行與後臺通知的開發者;
  • 需要托盤常駐、原生交互終端、每項目持久記憶與 token 用量統計的重度用戶。

注意:

  • 平臺僅 Windows(Tauri 殼 + NSIS 安裝);
  • 多實例保護默認拒絕共存,確需共存須在設置中顯式開啓(附危險警告);
  • 交互終端的危險命令攔截是 UX 護欄,不是安全邊界,不要把它當隔離手段;
  • 置頂會話(pins)在多標籤 / 多實例下是整體替換語義,最後寫者勝;
  • 插件以當前 dsh 進程的權限運行,安裝前建議檢查源碼與許可證(本項目爲 MIT);
  • 完整功能清單見倉庫 FUNCTIONS.md(11 大類,每項帶來源與測試狀態)。

結尾

dsh-hub 解決的問題很集中:讓 dsh 不再是瀏覽器裏的一個標籤頁,而是一個有托盤、有通知、有會話標籤欄和原生終端的桌面應用,同時保持「一切皆插件」的 dsh 形態。當前版本 0.1.4,MIT 許可。

  • GitHub 倉庫:https://github.com/MarecGents/deepseek-harness-hub
  • 社區目錄頁:https://www.skillhub.cn/plugins/MarecGents/deepseek-harness-hub (該目錄爲社區維護站點,與 DeepSeek / 幻方無官方從屬關係)
羽毛球分组比赛记分
小程序二维码

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

小夜