dsh-desktop-shell:dsh web 的托盤常駐啓動器

前言

用 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。在此基礎上:

  1. 托盤常駐:關閉窗口只是隱藏到系統托盤而非退出,托盤菜單提供打開主窗口、退出兩項。
  2. 單實例:再次啓動會聚焦已有窗口,不會開出第二份。
  3. 所有權感知:由 shell 啓動的 web 服務器,在 shell 退出時一併停止;你自己在終端或用其他工具預先啓動的服務器不受影響。
  4. 可配置:dsh 命令、工作目錄、額外環境變量、端口、窗口標題都在 config.json 裏設置。
  5. 日誌:把 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()。

三點注意:

  1. 插件以當前 dsh 進程的權限運行,安裝前建議閱讀源碼並確認許可證。該項目爲 MIT;assets/favicon.svg 複製自 MIT 許可的 deepseek-harness 倉庫。
  2. npm 安裝命令在 README 中標註爲 once published,npm 包發佈前請用 git checkout 方式安裝。
  3. 修改 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 / 幻方無官方從屬關係)。

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

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

小夜