前言¶
用 dsh 的 web profile 時,常見流程是開一個終端跑 dsh --profile web,再在瀏覽器裏訪問本地端口。終端一關,服務跟着退出,下次還得再來一遍。dsh-desktop-shell 把這串動作收斂成一個桌面圖標:雙擊後自動檢測本地 dsh web 服務器,沒起來就替你啓動,然後在原生窗口打開 web UI,關窗口只是縮到系統托盤。下面介紹它的做法、安裝步驟和幾個使用注意。
這是什麼¶
dsh-desktop-shell 是 DeepSeek Harness(dsh)的桌面啓動器外殼:一個托盤常駐的 Electron 薄封裝,負責啓動或複用本地 dsh web 服務器,並在原生窗口中打開 web UI。作者爲 ikashana,MIT 許可,package.json 中版本號爲 0.1.0,devDependencies 裏有 electron ^43.4.0。
它由兩部分組成:dsh 側是一個 profile bundle,安裝進 web profile 後打補丁、掛 glue 插件;桌面側是 Electron 應用本體,負責窗口、托盤和 web 服務器生命週期。
核心功能¶
雙擊應用後,它會先檢查 dsh web 服務器是否已在監聽(默認 http://127.0.0.1:3080),未監聽則自動啓動,隨後在原生窗口打開 web UI。在此基礎上:
- 托盤常駐:關閉窗口只是隱藏到系統托盤而非退出,托盤菜單提供打開主窗口、退出兩項。
- 單實例:再次啓動會聚焦已有窗口,不會開出第二份。
- 所有權感知:由 shell 啓動的 web 服務器,在 shell 退出時一併停止;你自己在終端或用其他工具預先啓動的服務器不受影響。
- 可配置:dsh 命令、工作目錄、額外環境變量、端口、窗口標題都在
config.json裏設置。 - 日誌:把
shell.log和web.log寫入 Electron 的 userData 目錄(Windows 下是%APPDATA%\dsh-desktop-shell\)。
第一步:安裝 dsh 側的 bundle¶
這個倉庫同時是一個 dsh profile bundle:package.json 聲明瞭 dsh.bundle.patch,安裝進 web profile 後會激活一個補丁層,把 web 服務器固定到 loopback 127.0.0.1:3080,並掛載一個 glue 插件——打印 ready 行,服務器綁定超出 loopback 時給出警告。
從 git checkout 安裝:
dsh plugin --profile web add github:ikashana/dsh-desktop-shell
從 npm 安裝(README 標註爲 once published,npm 包發佈前這條命令可能不可用):
dsh plugin --profile web add dsh-desktop-shell
裝完後照常啓動 dsh web(dsh --profile web),也可以什麼都不做,讓下面的桌面 shell 替你啓動。
第二步:安裝桌面應用¶
要求 Node.js ≥ 18(Electron 在 npm install 時下載):
git clone https://github.com/ikashana/dsh-desktop-shell.git
cd dsh-desktop-shell
npm install
cp config.json.example config.json
npm start
唯一必須改的是 dshCommand(如果 dsh 不在當前目錄,還有 cwd)。指向你的 dsh CLI,或指向源碼安裝的 node + 入口文件,例如:
{
"dshCommand": ["C:/path/to/node.exe", "--import", "tsx/esm", "apps/cli/src/bin.ts", "--profile", "web"],
"cwd": "C:/path/to/deepseek-harness"
}
config.json 配置項¶
| 字段 | 默認值 | 含義 |
|---|---|---|
port |
3080 |
web 服務器監聽端口。若修改,需與 bundle 補丁層的 webserver.port 保持一致 |
dshCommand |
["dsh", "--profile", "web"] |
啓動 dsh web 服務器的命令 argv |
cwd |
shell 目錄 | dshCommand 的工作目錄 |
env |
{} |
web 進程的額外環境變量 |
title |
dsh Desktop |
窗口與托盤標題 |
Windows:用 node.exe 絕對路徑¶
裸寫 dsh 會經過 .cmd shim 解析,child_process 在無 shell 時拒絕 spawn(CVE-2024-27980 加固)。shell 自己能處理這種情況,但寫顯式可執行文件最可靠,比如上面示例中的 C:/path/to/node.exe。
Windows:創建桌面快捷方式¶
用 WScript.Shell 創建 .lnk,指向 node_modules\electron\dist\electron.exe 並以項目目錄爲參數:
$WshShell = New-Object -ComObject WScript.Shell
$lnk = $WshShell.CreateShortcut("$HOME\Desktop\dsh Desktop.lnk")
$lnk.TargetPath = "C:\path\to\dsh-desktop-shell\node_modules\electron\dist\electron.exe"
$lnk.Arguments = "`"C:\path\to\dsh-desktop-shell`""
$lnk.WorkingDirectory = "C:\path\to\dsh-desktop-shell"
$lnk.IconLocation = "C:\path\to\dsh-desktop-shell\assets\icon.ico"
$lnk.Description = "dsh Desktop · DeepSeek Harness launcher shell"
$lnk.Save()
日誌與排錯¶
web 服務器起不來時,先看日誌。shell 把 shell.log 和 web.log 寫在 Electron 的 userData 目錄,Windows 下是 %APPDATA%\dsh-desktop-shell\。
適用場景與注意¶
適合的人:在 Windows 上使用 dsh web profile,希望像普通桌面應用一樣雙擊啓動、關窗縮托盤、不用手動管服務器進程的人。托盤行爲是跨平臺的,但作者在 Windows 上開發並測試;進程樹終止在 Windows 用 taskkill,其他平臺回退到 kill()。
三點注意:
- 插件以當前 dsh 進程的權限運行,安裝前建議閱讀源碼並確認許可證。該項目爲 MIT;
assets/favicon.svg複製自 MIT 許可的 deepseek-harness 倉庫。 - npm 安裝命令在 README 中標註爲 once published,npm 包發佈前請用 git checkout 方式安裝。
- 修改
port時,記得同步 bundle 補丁層裏的webserver.port,否則兩邊對不上。
結語¶
dsh-desktop-shell 做的事不大但具體:把「起終端、跑命令、開瀏覽器」收斂成一次雙擊,再用所有權感知保證不誤傷你手動起的服務器。項目主頁在 GitHub:https://github.com/ikashana/dsh-desktop-shell;社區目錄收錄頁在 https://www.skillhub.cn/plugins/ikashana/dsh-desktop-shell(社區站點,與 DeepSeek / 幻方無官方從屬關係)。