前言¶
DeepSeek Harness(DSH)桌面版內置 Web 能力,但 dsh --profile web 默認只監聽 loopback,手機或平板很難在同一 WiFi 下用瀏覽器連上本機實例。官方通過 --public-url 與 --trusted-host 做反代,對 Electron 拉起的 Host 並不適用:無法追加啓動參數、端口每次動態分配、根路徑還需要進程內存裏的 ?token= 才能換會話 Cookie。
dsh-web-gate(npm 包名 @realoiyo/dsh-web-gate)由 REALOIYO 維護,作爲 DSH 客戶端類插件,在 Host 進程內實現局域網網關:不改 DSH 頁面,同網段設備瀏覽器輸入密碼即可訪問本機 DSH。下文介紹其定位、安裝步驟與使用時的安全邊界。
這是什麼¶
一句話:在桌面 DSH 外掛一層 HTTP 網關,用密碼保護,讓局域網內的瀏覽器訪問本機 Harness。
插件在網關進程內讀取 ctx.webServer.port 與 ctx.connection.authenticatedUrl(),完成 token 握手與請求轉發;對經局域網 IP 訪問的頁面注入少量 polyfill,以彌補非安全上下文下 crypto.randomUUID 等 API 缺失、以及非迴環 hostname 導致設置無法持久化的問題。許可證爲 MIT,當前 npm 版本爲 0.2.1,依賴 Node >=22。
背景:爲何不直接反代¶
README 歸納了桌面版與 CLI Web profile 的差異:
- Host 由 Electron 啓動,不能像在命令行裏那樣追加
--public-url。 - Web 端口每次啓動變化,無法預先寫死反代 upstream。
- 首次訪問依賴僅存在於內存中的 launch token,外部反代難以自行完成 Cookie 會話建立。
因此網關實現在插件側,在 Host 生命週期內與 DSH Web Server 協同。
核心功能¶
密碼與會話¶
- 監聽可配置地址與端口(默認
0.0.0.0:3082),訪問需輸入網關密碼(默認隨機 10 位,最少 8 位)。 - 會話 Cookie 名爲
dsh_gate_session,由HMAC(secret, password)派生;修改密碼等同於註銷全部已登錄設備。 - 登錄失敗限速:單 IP 每分鐘 5 次失敗鎖定 60 秒;全局每分鐘 50 次失敗鎖定 30 秒。
上游代理與 Cookie 衛生¶
網關先用內部 launch token 請求 / 取得 DSH 會話 Cookie,再轉發外部請求,客戶端不看到 303 跳轉。
DSH 認證 Cookie 名含 host:port 的 sha256,桌面版端口變化且舊 Cookie 不清理,條目累積過多時請求頭可觸發 Node 約 16 KB 上限(HTTP 431,界面表現爲 Web authentication failed)。網關攔截上游全部 Set-Cookie,內存中只保留當前一條,客戶端側主要維護網關會話 Cookie。
polyfill 注入¶
經 http://<局域網 IP> 訪問時,瀏覽器可能缺少 crypto.randomUUID 或 AbortSignal.any,表現爲可讀不可寫;非迴環 hostname 還會讓 DSH 把設置存到 memory 而非 host。插件僅在 API 缺失時注入,不覆蓋原生實現;對 HTML 文檔移除 accept-encoding 以便插入腳本,JS/CSS 仍保持壓縮。
設置界面¶
安裝並在 DSH 中啓用後,監聽地址與密碼會寫入日誌,並出現在 設置 → 手機網關(可複製、可改密)。
安裝與啓用¶
DSH 插件以當前 dsh 進程權限運行,安裝前建議在 GitHub 倉庫 查看源碼與 MIT 許可證。
從 npm 安裝:
dsh plugin --profile desktop add @realoiyo/dsh-web-gate
從 GitHub 安裝(會走源碼構建):
dsh plugin --profile desktop add github:REALOIYO/dsh-web-gate
安裝後重啓 DSH。配置文件位於 $DSH_HOME/dsh-web-gate/settings.json,修改後需重啓生效。配置優先級爲:profile patch 中的 config > settings.json > 隨機生成。
| 鍵 | 默認值 | 說明 |
|---|---|---|
port |
3082 |
監聽端口 |
host |
"0.0.0.0" |
監聽地址 |
password |
隨機 10 位 | 訪問密碼,最少 8 位 |
secret |
隨機 32 字節 | 會話簽名密鑰,修改將使全部會話失效 |
典型用法¶
- 在桌面端按上文命令安裝插件並重啓 DSH。
- 在 設置 → 手機網關 查看本機局域網訪問地址與密碼(或查啓動日誌)。
- 確保手機/平板與電腦處於同一網段。
- 瀏覽器打開
http://<主機局域網 IP>:3082(端口以settings.json中port爲準),輸入網關密碼後使用 DSH Web 界面。
網關不提供公網隧道與專門移動端適配;可選安裝 qrcode-terminal 時在終端輸出二維碼(README 說明默認不生成二維碼)。
安全與限制¶
- 密碼爲唯一憑證;網關可在主機上代表 DSH 執行代碼,不應把密碼傳到不可信環境。
- 流量爲明文 HTTP,同網段內可被嗅探,僅適合可信局域網;跨網段應疊加 WireGuard、Tailscale 等隧道,不要直接暴露公網。
password以明文存於settings.json(權限0600),同機其他管理員賬戶可讀。- 不提供官方公網穿透;WebSocket 僅在握手階段校驗一次;
Host/Origin/Referer/Sec-Fetch-Site會改寫爲 loopback,若部署依賴真實 Host 需自行調整。
社區插件目錄 SkillHub 上的 dsh-web-gate 頁 與 GitHub 倉庫 可查閱更新與 Issue;目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。DSH 生態奉行「一切皆插件」,本插件適合需要在同一 WiFi 下用手機瀏覽器臨時操作本機 Harness、又不願改 DSH 本體界面的開發者。