dsh-dev-plugins:在非 localhost 權威下提供 dsh Web UI

前言

DeepSeek Harness(dsh)的 dsh web 默認面向本機瀏覽器:Host/Origin 校驗、頁面是否視爲 loopback、啓動 token 等行爲都按「瀏覽器與監聽進程在同一臺機器」設計。把 Web UI 放到反向代理、SSH 隧道或局域網地址後,常見現象是 /api 返回 403、Models 頁提示 settings 不可用、每次重啓 token 變、裸 URL 只有 401。手工改安裝包裏的 bundle 能勉強跑,但升級 dsh 要重複打補丁。

下面介紹社區插件 dsh-dev-plugins(維護者 0xshawn),以 web profile 下的插件 bundle 方式擴展 dsh,在不 patch 已安裝 dsh 的前提下,補齊遠程訪問與若干開發向 UI 能力。項目託管於 GitHub,目錄頁見 SkillHub。許可證 MIT,當前 package 版本 0.8.2,要求 Node >= 20;package.json 中聲明的 dsh 引擎範圍爲 >=0.2.0-0 <0.3.0-0。

這是什麼

dsh-dev-plugins 是一組隨 bundle 安裝的 dsh 插件集合。當前 release 的核心價值是:通過反向代理、SSH 隧道或 LAN 地址等非 localhost authority 訪問 dsh Web UI,同時保留 stock 的認證模型(launch token 換 signed、authority 綁定的 session cookie;每個 /api 請求仍走 Host/Origin fence)。插件解決部署摩擦,不繞過訪問控制。

與 stock dsh web 的差異

README 用對照表歸納了六類問題,下面按同一口徑簡述。

問題 stock dsh 本插件
/api Host/Origin fence 僅接受 loopback、監聽 bind 字面量、--trusted-host;代理 authority 下 RPC 易 403 將 DSH_DEV_PLUGINS_TRUSTED_HOSTS 中的 authority 追加到同一列表(--trusted-host 仍可用)
頁面視圖(connection.isLoopback) 由 location.hostname 推導;代理頁被當作非 loopback,settings 可能只在進程內存、host-document 動作隱藏 注入 __DSH_TRANSPORT__ = { ownsHost: true },與 dsh desktop shell 使用的 host-owned transport 一致
Launch token 每進程隨機;重啓後只能從日誌找帶 ?token= 的 URL 可通過 DSH_WEB_TOKEN 或插件配置固定
首次登錄 裸部署 URL 返回 plain 401 默認在裸 URL 提供 HTML token 表單(loginPage,可關)
後臺關注 標籤頁在後臺時完成會話或待審批不可見 默認 Web Notification(notifications,可關)
Token 用量歷史 聊天條僅當前 Session 默認側邊欄 Token usage 頁,按 workspace/日聚合 Host 持久 session 日誌(statsPage,可關)

此外 bundle 還提供:聊天 composer 中 Enter 換行(composerNewline),以及可選的 browser-control MCP 與 Chrome 擴展相關能力(browserControl)。0.5.0 起包名由 dsh-remote-access 改爲 dsh-dev-plugins,環境變量由舊名改爲 DSH_DEV_PLUGINS_TRUSTED_HOSTS;若曾安裝舊包,需先 remove 舊 row 再添加,並同步重命名環境變量。

安裝與啓用

從 GitHub 安裝(公開倉庫,無需 build):

dsh plugin --profile web add git+https://github.com/0xshawn/dsh-dev-plugins.git

本地 checkout 可用路徑安裝:

dsh plugin --profile web add /path/to/dsh-dev-plugins

安裝後需 重啓 dsh web——dsh 在啓動時加載 bundle。確認 profile 中該 row 已激活:

dsh --profile web --dump-config | grep -A6 'dsh-dev-plugins'

移除:

dsh plugin --profile web remove dsh-dev-plugins

下次重啓後恢復 stock 行爲。

配置

環境變量

變量 取值 作用
DSH_DEV_PLUGINS_TRUSTED_HOSTS 逗號分隔的 bare authority,如 dsh.example.com,dsh.example.com:8443 追加到 --trusted-host;無端口項可匹配任意端口
DSH_WEB_TOKEN 非空 launch token 固定登錄 token;空或未設置則仍爲每進程隨機 token

可用於 systemd、launchd、Docker 或 shell profile。若仍習慣 flag,可保留 --trusted-host;環境變量中的 authority 會追加到調用列表。authority 格式錯誤(含 scheme、path、userinfo 或零填充端口)會在啓動時按上游校驗失敗,不會靜默忽略。

示例:

DSH_WEB_TOKEN="$(cat /etc/dsh/web-token)" \
DSH_DEV_PLUGINS_TRUSTED_HOSTS="dsh.example.com" \
dsh web --host 127.0.0.1 --port 3080 --no-open

注意:若其他 profile patch 層整段覆蓋 connection.config,需在該層中重新聲明 trustedHosts 等字段,否則環境變量追加的 authority 可能被丟掉。

插件 config

在 $DSH_HOME/profiles/web/cordis.patch.yml 中覆蓋 dsh-dev-plugins row,例如:

- id: dsh-dev-plugins
  config:
    loopback: true
    launchToken: ''
    loginPage: true
    notifications: true
    statsPage: true
    composerNewline: true
    browserControl: true

launchToken 爲空時回退 DSH_WEB_TOKEN,再回退隨機 token;README 建議敏感 token 優先用 DSH_WEB_TOKEN,因 profile 配置爲明文。Settings → Dev plugins 提供表單,可不改 YAML 切換上述開關。

loginPage: true 時,已通過 Host/Origin fence 的 authority 在裸 URL 會看到 token 表單,提交後走 stock 的 GET ./?token=... 交換;未信任 authority 仍爲 401。loginPage: false 恢復 stock 401,適合前端已有自有登錄頁的場景。

典型用法

反向代理後訪問:瀏覽器側地址由 --public-url(及 DSH_WEB_URL 等)對外宣告;本插件不改變該語義。代理需保留瀏覽器 Host、正確處理 mount 前綴與 WebSocket Upgrade/Connection,並按上游文檔處理 cookie Path 與 HTTPS 下的 Secure。

從源碼 patch 遷移:停止在安裝流程裏 patch dsh bundle;安裝本 bundle 到 web profile 並重啓;保留 DSH_WEB_TOKEN 與 trusted host 配置;確認啓動日誌仍打印相同的 ?token= URL。

首次登錄無 printed URL:在已信任的 authority 上打開裸 URL,使用默認登錄表單輸入 token;錯誤 token 會重新渲染表單並提示錯誤。

適用場景與注意

適合需要在 非本機 authority 上使用 dsh Web UI、又不想每次升級 dsh 都重打補丁的開發者或自託管部署。附帶通知、workspace 級 token 統計、composer 換行等能力,面向日常 web profile 開發體驗。

插件與當前 dsh 進程同權限 運行;安裝前請自行審閱 源碼與 LICENSE。DeepSeek Harness 生態強調「一切皆插件」;SkillHub 插件目錄 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-dev-plugins 把遠程訪問 dsh Web UI 時常見的 fence、loopback 視圖、固定 token 與登錄體驗問題收進官方插件機制,並可選增強通知與 token 統計。需要細節與反向代理清單時,以倉庫 README(含 中文文檔)爲準。

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

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

小夜