dsh-phone-remote:用自建中繼把 DSH 實例交給手機

前言

DSH 的會話、審批和終端操作都綁定在電腦端。想離開工位繼續跟進一次長任務,通常的做法是把電腦開着、開遠程桌面,或者臨時找一臺能在移動端跑的殼子。這個插件走的是另一條路徑:在 Host 機器和手機之間放一個自建 relay,手機只連 relay,relay 把 RPC 轉發回 DSH 實例,會話列表、流式對話、審批、附件、終端、文件瀏覽都由此轉發。在 DSH web GUI 裏還有一個本地控制台,安裝後不需要改配置文件、也不需要單獨部署服務。

下面介紹的是社區維護者 yubi233 的 dsh-phone-remote。它屬於客戶端分類,是 dsh-web-remote 的 DSH Host 插件:手機側通過專用移動殼接入,Host 側負責註冊、維持連接、橋接 RPC 並掛載控制台路由。

這是什麼

一句話定位:Host 端插件,把一臺運行 DeepSeek Harness 的機器接進中繼,讓手機遠程使用它。

倉庫情況:yubi233/dsh-phone-remote,MIT 許可證,版本 0.2.4,TypeScript,node >= 22,DSH 引擎要求 >=0.1.2-alpha.4,客戶端平臺爲 web。GitHub 星標 0、fork 1。這是個人項目,不是官方應用,社區目錄也是獨立站點。

倉庫裏有一個在線演示,地址是 https://yubi233.github.io/dsh-phone-remote/。需要說明的是它是純前端 mock:沒有 relay、沒有真實會話,渠道名已脫敏爲「演示渠道 A–E」,數據全部在瀏覽器內模擬。想判斷真實行爲,只能自己裝一次。

結構:一個包,兩個半區

這個包同時包含 Node 側邏輯和瀏覽器側邏輯,兩個 exports 入口:. 指向 lib/index.js,./client 指向 lib/client.js。

  • Host 半區(lib/index.js,Node):cordis 插件。向 relay 註冊本機、維持出站 WebSocket,把手機 RPC 橋接到 DSH;同時在 DSH web GUI 的 /api/web-remote/* 掛本地控制台路由,只接受本機或同源請求。
  • Client 半區(lib/client.js,瀏覽器):在 web GUI 裏注入兩個入口——「設置 → 手機遠程」完整頁,以及「插件 → dsh-phone-remote」詳情頁底部的同款區塊。兩個入口都能配置中繼、生成配對碼、管理已配對設備。

安裝與啓用

安裝命令來自 README:

dsh plugin --profile web add dsh-phone-remote

裝完重啓 profile:

dsh web

設置導航裏出現「手機遠程」即安裝成功。沒有第二步配置:局域網模式下插件自帶 relay 和手機殼靜態頁,不需要額外部署任何東西。

典型用法:局域網模式(默認)

  1. 打開 DSH 網頁 → 設置 → 手機遠程。狀態卡直接給出局域網地址,例如 http://192.168.1.23:8787,並自動生成配對二維碼。
  2. 手機連同一個 Wi-Fi,打開該地址即可使用;也可以點「配對手機」掃碼;把這個地址發給別人同樣可用。
  3. 已配對設備可在面板裏隨時撤銷。

中繼默認端口 8787,被佔用時會自動換端口。Host 進程重啓後本地中繼自動恢復;設備配對記錄持久化在 ~/.dsh/storages/web_remote_local_relay.json。

典型用法:接入外部 relay(服務器模式)

要讓手機在局域網外訪問,比如公網 VPS,走面板配置:在「中繼服務器」裏填外部 relay 地址與註冊令牌,點「保存並連接」;隨時可以點「使用局域網模式」切回。

外部 relay 的最小環境變量:

變量 作用
HOST / PORT 監聽地址。公網部署必須前置 TLS
RELAY_REGISTRATION_TOKEN 註冊本插件的共享密鑰,公網必設
RELAY_TRUST_PROXY=1 反向代理後按真實客戶端 IP 限速
RELAY_STORE_FILE 配對與令牌持久化
RELAY_STATIC_DIR 可選。託管手機殼靜態頁,即本包 shell/ 目錄

不想用面板配置時,也可以在 patch 行裏帶 config:

- insert:
    - id: web-remote-host
      name: 'dsh-phone-remote'
      config:
        relayHttpUrl: https://relay.example.com
        hostId: <uuid>
        hostSecret: <secret>
        hostName: my-mac
        registrationToken: <RELAY_REGISTRATION_TOKEN>

注意這裏的優先級:一旦 patch 裏帶了 config,面板修改會覆蓋這裏的值。

安全邊界

  • 配對使用一次性 256-bit token,默認 5 分鐘過期。claim 端點免鑑權,但按 IP 限速;換取的 device token 只返回一次,relay 只存哈希。
  • 控制台路由只接受本機迴環或同源瀏覽器請求,跨源一律 403。
  • 單 Host 單手機:第二臺設備接管後,60 秒內會升級爲衝突,需要在面板撤銷後重新配對。
  • 日誌裏不出現 token、prompt、附件內容。

有哪些已知限制

README 裏明確寫了兩條:

  • 手機殼與 relay 的部署(含 HTTPS、登錄門)不在這個包內,需要看倉庫 deploy/README.md。
  • 審批和提問按 Session 路由;Host 進程重啓後,等待中的舊審批不可回答。

另外還有一點來自插件本身的運行方式:它以當前 dsh 進程的權限執行操作。安裝前應當檢查源碼與許可證,確認 relay 地址和註冊令牌不會落到不該訪問的人手裏。

適用場景

適合已經在用 DSH、想從手機繼續跟進會話和審批的人。局域網場景下它基本是零成本的:裝完插件、手機連同一 Wi-Fi 就能用,不涉及改配置或部署服務。需要跨網絡訪問時,就得自己準備一個帶 TLS 的 relay,這部分工作不在插件範圍內。

結尾

核心價值是把「手機遠程使用 DSH」從手寫轉發腳本變成一次 dsh plugin 安裝,本地默認模式幾乎不需要運維,權限面也收斂在 relay 和配對 token 上。

  • 目錄頁:https://www.skillhub.cn/plugins/yubi233/dsh-phone-remote
  • GitHub:https://github.com/yubi233/dsh-phone-remote
羽毛球分组比赛记分
小程序二维码

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

小夜