dsh-lan-access:讓 DSH Web GUI 在局域網內可訪問

前言

DeepSeek Harness(DSH)默認把 Web GUI 綁在 127.0.0.1,只能在本機瀏覽器打開。想在同一 Wi‑Fi 下的手機或另一臺電腦上看對話進度、繼續會話,常見做法是 SSH 端口轉發或內網穿透——步驟多,還要額外維護隧道。

dsh-lan-access 是 Leon0555 維護的 DSH 聯網工具插件,通過 npm 一鍵安裝,把 Web 服務綁定到 0.0.0.0,並處理局域網 HTTP 下瀏覽器缺少 crypto.randomUUID 導致 RPC 失敗的問題。v0.1.2 起還自帶窄屏移動排版適配。下面介紹它的能力、安裝方式與安全邊界。

這是什麼

dsh-lan-access 面向「可信內網」場景:同一局域網下,手機、平板或其他電腦用瀏覽器訪問 http://<運行 DSH 設備的 IP>:3080,無需 SSH、無需內網穿透。

  • 維護者:Leon0555
  • 分類:聯網工具
  • 許可證:MIT
  • 當前版本:0.1.3(npm / GitHub)
  • 目錄頁:https://www.skillhub.cn/plugins/Leon0555/dsh-lan-access
  • 源碼:https://github.com/Leon0555/dsh-lan-access

核心功能

1. 局域網綁定

插件以 bundle patch 覆蓋 webserver 配置,將 host 改爲 0.0.0.0,端口保持 DSH 默認邏輯(ctx.webStartup.port ?? 3080)。綁定後,局域網內其他設備可通過 http://<運行 DSH 設備的 IP>:3080 訪問 Web GUI。

查本機 IP 示例(macOS):

ipconfig getifaddr en0

2. crypto.randomUUID polyfill

瀏覽器只在 HTTPS 或 localhost 等安全上下文暴露 crypto.randomUUID。局域網明文 HTTP 下該 API 不存在,會導致 DSH 的 RPC 全部失敗——項目/會話列表加載不出、無法添加工作區。

本插件通過 webServertapIndex 鉤子,向每次返回的 index.html<head> 注入兜底實現(標準 UUID v4,由 crypto.getRandomValues 生成)。帶冪等守衛,僅在非安全上下文生效,本機 localhost 訪問不受影響。

3. 手機/窄屏自動適配(v0.1.2+)

屏幕寬度 ≤820px 時自動切換緊湊移動排版,無需配置。主要包括:

  • 字號壓縮與排版收緊(消息流、代碼塊、標題層級)
  • 輸入框 font-size: 16px,規避 iOS 聚焦自動放大
  • 按鈕加大觸控目標、去除點擊延遲(touch-action: manipulation
  • 彈層/對話框全屏化(100dvh + 安全區適配),模型選擇等浮層固定定位防遮擋
  • 深色/淺色主題下均生效(跟隨 DSH 本身)

窄屏適配 CSS 移植自 dsh-lan-gate(MIT License),僅保留排版層,不含網關/審批功能。

安裝與啓用

方式一:讓 DSH 自行安裝

把項目鏈接貼給 DSH,讓它自己安裝即可(目錄頁:https://www.skillhub.cn/plugins/Leon0555/dsh-lan-access)。

方式二:從 npm 安裝

需要 pnpm(npm i -g pnpm)。執行:

dsh plugin --profile web add dsh-lan-access

本地開發安裝可用:

dsh plugin --profile web add file:/path/to/dsh-lan-access

安裝後重啓服務生效。若使用 launchd 常駐:

launchctl kickstart -k gui/$(id -u)/com.dsh.web

卸載

dsh plugin --profile web remove dsh-lan-access

卸載後 webserver 恢復默認僅 127.0.0.1,polyfill 不再注入。

典型用法

  1. 在本機安裝並重啓 DSH Web 服務。
  2. 查運行 DSH 設備的局域網 IP(如 macOS 上 ipconfig getifaddr en0)。
  3. 在同一 Wi‑Fi 下的手機或另一臺電腦瀏覽器打開 http://<IP>:3080
  4. 在本機 http://127.0.0.1:3080 完成模型、Provider、憑據等配置;遠程設備主要用於對話、看進度、在會話內選模型。

若遠程也需要完整訪問配置平面,README 給出的合規方案是 SSH 本地端口轉發:

ssh -L 3080:127.0.0.1:3080 用戶@MacIP

然後在客戶端訪問 http://127.0.0.1:3080。從服務端視角仍是迴環訪問,不繞過 DSH 的安全柵欄,且自帶 SSH 認證。需開啓 Mac 的「遠程登錄」,並自行評估 SSH 帶來的命令行訪問風險。

適用場景與注意

適合誰

  • 家庭或公司可信內網,想在手機/平板上繼續 DSH 對話、查看即時進度
  • 不想爲日常局域網訪問單獨搭 SSH 轉發或內網穿透
  • 需要在窄屏設備上獲得可讀、可點的 Web GUI 排版

安全提醒

綁定 0.0.0.0 後,同一網絡內任何設備都能連接 DSH,且無認證,等於整網都能觸達本機 DSH 進程的命令執行能力。僅限家庭/公司可信內網使用,公共 WiFi 請勿開啓。

建議:路由器/防火牆限制來源 IP;出外網訪問請疊加 Tailscale 等隧道。

插件以當前 DSH 進程權限運行。安裝前應閱讀源碼與 MIT 許可證,確認行爲符合你的安全預期。

遠程訪問限制(本插件有意不繞過)

DSH 把「配置平面」——設置頁、模型/Provider 管理、憑據、Agent Preset、目錄選擇、llm.discoverModels 等——硬性限制爲僅本機迴環(127.0.0.1)可訪問。即使本插件將 Web 服務綁定到 0.0.0.0,從局域網 IP 訪問這些接口仍會返回 HTTP 403。這是 DSH 官方安全邊界(dsh-client-connectionPRIVILEGED_METHODS);trustedHosts 白名單只是 DNS 反綁定柵欄,不是認證

本插件不繞過該柵欄,也不提供代理去改寫請求頭。

遠程(局域網)可用 HTTP 403(僅本機迴環)
對話、即時進度 設置頁(模型、Provider 配置)
會話內模型選擇(llm.providers / llm.models 憑據管理(credentials.*
會話歷史、工作區瀏覽 Agent Preset 管理
其餘正常 API 目錄選擇(host.pickDirectory)、llm.discoverModels

技術說明

  • 綁定:bundle patch 覆蓋 webserver 行(host: 0.0.0.0,port 保持 ctx.webStartup.port ?? 3080)。
  • polyfilltapIndexindex.html <head> 注入內聯腳本;非安全上下文才生效。
  • 手機適配:同一 tapIndex 注入 <style>@media (max-width: 820px)),選擇器針對 DSH 的 data-slotdata-chat-flowdata-composer-cardrole="dialog" 等穩定結構屬性。

結尾

dsh-lan-access 用三個改動解決局域網訪問 DSH 的實際障礙:綁定 0.0.0.0、補全 crypto.randomUUID、窄屏排版適配。它明確不開放配置與憑據域,適合在可信內網做「遠程對話、本機管配置」的分工。

  • 社區目錄:https://www.skillhub.cn/plugins/Leon0555/dsh-lan-access
  • GitHub:https://github.com/Leon0555/dsh-lan-access
  • npm:https://www.npmjs.com/package/dsh-lan-access
羽毛球分组比赛记分
小程序二维码

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

小夜