dsh-remote-control:用瀏覽器經中繼驅動完整的 DeepSeek Harness 客戶端

前言

DeepSeek Harness(DSH)的主界面通常跑在本機 Electron 或 dsh web 提供的迴環服務上。人不在電腦前時,常見做法是另做一個「遠程控制台」:按 RPC 方法表重繪會話列表、審批和流式輸出。只要 GUI 迭代,這種從外向內拼出來的界面就容易和本地客戶端不一致——側邊欄對不上、審批延遲、流式文本不流。

dsh-remote-control(維護者 icrefin,GitHub 倉庫 icrefin/dsh-remote-control)換了一條路:主機向自建或自管的中繼出站連一條 WebSocket,中繼把遠端瀏覽器的 HTTP/WebSocket 反向代理到這條隧道上,主機再把流量重放到自己的迴環 web 服務器。遠端瀏覽器看到的字節與本地 GUI 相同,會話、審批、ask_user、文件、終端、設置、插件與 token 流式輸出都隨真實客戶端而來,而不是在插件裏逐塊重寫。

這是什麼

一句話:從手機、平板或另一臺桌面的瀏覽器,驅動正在運行 DSH 的那臺主機,拿到的是完整 Harness Web 客戶端,不是裁減版遙控面板。

插件分類爲 DSH 社區目錄中的「客戶端」類插件;項目採用 MIT 許可證,當前 package 版本爲 0.9.8,要求 Node >=22.17.0,DSH >=0.2.1-rc.5 且 <0.2.2-0。插件與中繼隨同一倉庫發佈,需成對部署,版本策略見下文「版本與配對」。

核心功能

隧道代理,而非移動端 SPA

插件只負責打開出站 WebSocket 並完成隧道重放,不維護獨立的方法表 UI。相對早期自建移動端 SPA 的方案,這類「子集界面永遠過時」的問題被架構上規避;代價是中繼會終結瀏覽器側的 HTTP(明文可見性見安全說明)。

中繼與 Relay server 配置

主機主動撥號到中繼,瀏覽器通過中繼訪問主機。中繼是依賴較少的 Node 程序,隨包位於 relay/。插件不預置默認中繼——在你填寫 origin 之前,面板只會說明未配置,不會連到第三方服務器。

Relay server 經 Harness settings service 寫入 profile 的 cordis.patch.yml;環境變量 DSH_REMOTE_RELAY 優先級更高,設置後面板字段會禁用且顯示 from DSH_REMOTE_RELAY。保存合法 origin(僅 http:/https:,無路徑)後,若鏈路已啓動,會立即按新 origin 重啓。

連接測試與配對

面板提供 Test connection,按步驟檢查:中繼是否配置、 /healthz 是否可達、中繼與插件兼容線版本是否一致、主機 socket 是否掛上、中繼是否識別本會話、以及經隧道的往返幀。配對 token 一次性且默認約 10 分鐘有效;刷新含 token 的頁面或重複打開鏈接會導致 token 已失效,需從面板重新生成鏈接。

Start / Stop 與會話壽命

Start 向中繼出站連接並展示二維碼或鏈接;Stop 結束配對而非暫停,泄漏鏈接也可靠 Stop 撤銷。應用重啓會續上同一會話,已配對瀏覽器通常仍可繼續使用;這與 Stop 的語義不同。

中繼密鑰存放在 ~/.dsh/relay-secret(權限 0600),不在 profile 文檔裏;面板可讀打碼內容。瀏覽器配對 cookie 壽命與中繼側狀態相關,鏈接與配對的區別見官方 README 表格說明。

遠端顯示與窄屏

隨 DSH 發佈的桌面客戶端在窄屏下會收攏側邊欄;插件經隧道注入一小段 payload,處理軟鍵盤視口、低於 1120px 時的 Fit(桌面佈局縮放)與 Native(客戶端重排)切換,以及觸摸手勢。該 payload 僅作用於經隧道返回的響應,本地瀏覽器行爲不變。

安裝與啓用

下面介紹從源碼打包到裝進 DSH 的流程。插件與中繼爲同版本組件:插件調用 /_relay/*,並遵循倉庫內 PROTOCOL.md §3 的隧道封裝;新舊不匹配時可能無法註冊,或出現 HTML/JSON 應答錯位。可用中繼 GET /healthz 的 version 快速發現 skew。

先在倉庫根目錄安裝依賴並校驗(typecheck、構建與測試):

pnpm install
pnpm check          # typecheck both halves, build, run 62 tests
scripts/install.sh  # pack, then print how to install dist/dsh-remote-control-<version>.tgz

scripts/install.sh 會在 dist/ 生成 dsh-remote-control-<version>.tgz,並打印安裝說明。桌面版 profile 由 Electron 應用管理,不支持對桌面 profile 使用隨意的 dsh plugin add;應通過應用內 Settings → Plugins → install,填入 tarball 的絕對路徑,例如:

/path/to/dsh-remote-control/dist/dsh-remote-control-0.9.8.tgz

安裝後必須重啓 Harness;向運行中的 profile 追加 bundle 時,未重啓前可能出現 entry 無法 import 的錯誤。重裝相同版本等於無操作,需先升版本或移除 bundle。

若使用 CLI 管理的 profile,可讓腳本直接安裝(示例來自 scripts/install.sh 的 --profile 分支,需本機存在對應 DSH 應用路徑):

scripts/install.sh --profile <profile-name>

部署中繼

在雙方都能訪問的機器上運行中繼。最小示例:

cd relay && npm install --omit=dev
PORT=8080 PUBLIC_ORIGIN=http://relay.example node server.mjs

systemd 主機可一次完成安裝:

sudo ./relay/install.sh --public-origin https://relay.example

將上述 PUBLIC_ORIGIN 填入 Remote Control 面板的 Relay server 並 Save。TLS、升級與環境變量詳見包內 relay/README.md。

典型用法

經過上面的安裝與中繼部署,日常使用可以按下面步驟進行。

  1. 在 Harness 側邊欄打開 Remote Control。
  2. 確認 Relay server 已保存且 Test connection 各步通過(尤其版本一致與隧道往返)。
  3. 按 Start。主機連上中繼後,面板出現二維碼或配對鏈接。
  4. 用手機相機或任意瀏覽器打開鏈接;加載完成後即爲完整 Harness Web 客戶端。
  5. 窄屏可在 Fit 與 Native 間切換;進行中的對話可跨過切換而不必整頁重載。
  6. 結束遠程訪問時按 Stop;需要新鏈接時再 Start 生成新會話與二維碼。

運維側還可通過僅限迴環的 /api/dsh-remote-control/* 路由查看狀態、啓停鏈路、生成配對與跑連接測試;面板相對文檔路徑請求這些 API,避免請求落到中繼 HTML 配對頁。

適用場景與注意

適合誰: 需要在移動設備或異地瀏覽器上操作同一臺 DSH 主機、且希望界面與本地客戶端一致(含審批、插件與終端)的開發者或運維;願意自行部署或託管中繼,並接受中繼對瀏覽器 HTTP 的終結模型。

權限與安全: 插件作爲 DSH 插件加載,以當前 DSH 進程權限運行,遠程瀏覽器經配對 URL 獲得的訪問能力等價於「能打開該鏈接的人可抵達本機 Harness」。安裝前應閱讀倉庫源碼與 MIT 許可證,並理解:配對 URL 即憑據;Harness 會話 cookie 在主機迴環上籤發,不離開主機;中繼在未加 TLS 時可見明文流量,敏感場景應自管中繼或在自有反向代理上終結 TLS。配對 URL 在日誌中打碼,QR/status 路由使用 cache-control: no-store。

版本與配對: 插件與中繼共享 semver 前兩位的兼容線(例如任意 0.9.* 插件可配 0.9.* 中繼);連接測試比較的是這條線。發佈 tarball 同時包含 relay/ 與 lib/,可用同一 artifact 部署兩側。

DSH 生態強調「一切皆插件」;社區插件目錄 SkillHub 上的 dsh-remote-control 頁 爲獨立站點收錄,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-remote-control 用一條出站 WebSocket 和中繼反向代理,把真實 Harness Web 客戶端搬到任意瀏覽器,避免重複實現 GUI 帶來的長期漂移。部署時記得插件與中繼同線版本、自行指定中繼 origin,並在啓用遠程訪問前想清楚中繼與配對鏈接的信任邊界。

  • 目錄頁:https://www.skillhub.cn/plugins/icrefin/dsh-remote-control
  • 源碼與文檔:https://github.com/icrefin/dsh-remote-control
羽毛球分组比赛记分
小程序二维码

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

小夜