前言¶
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 和手機殼靜態頁,不需要額外部署任何東西。
典型用法:局域網模式(默認)¶
- 打開 DSH 網頁 → 設置 → 手機遠程。狀態卡直接給出局域網地址,例如
http://192.168.1.23:8787,並自動生成配對二維碼。 - 手機連同一個 Wi-Fi,打開該地址即可使用;也可以點「配對手機」掃碼;把這個地址發給別人同樣可用。
- 已配對設備可在面板裏隨時撤銷。
中繼默認端口 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