dsh-web-preview:在 DSH GUI 內預覽本機 Web 服務

前言

在 DeepSeek Harness(DSH)裏做前端或本地 Web 應用聯調時,常見做法是在對話界面裏嵌一個 iframe,指向 http://127.0.0.1:5173/ 這類地址。DSH 的 Web GUI 往往通過反向代理以 https 對外暴露;遠程瀏覽器打開時,127.0.0.1 會解析到瀏覽器所在機器,而不是跑 DSH 的那臺主機;同時 https 頁面加載 http 資源還會觸發混合內容攔截。結果是 iframe 裏看不到本機 dev server,或頁面一片空白。

dsh-web-preview(倉庫 qoqpqpq/dsh-web-preview)把 DSH 主機上的 loopback 服務經 DSH 同源路徑轉發出去,預覽仍走 https 且與 GUI 同源,從而規避上述問題。下面介紹它是什麼、能做什麼、如何安裝與配置。

這是什麼

維護者爲 qoqpqpq,在插件目錄中歸類爲客戶端(面向 DSH Web 端注入 UI 與路由)。一句話:在 DeepSeek Harness GUI 內預覽任意本機端口上的 Web 服務,並提供嵌入標籤頁、浮動窗口,以及 Console / Network / Errors 診斷面板。

官方簡介:Preview any local web server inside the DeepSeek Harness GUI — remote-browser-safe same-origin proxy with embed tab, floating window and Console/Network/Errors toolbox.

核心功能

以下能力均來自項目 README 與 package.json 說明。

遠程瀏覽器可用

  • 不經由裸 localhost iframe,避免 mixed content、錯誤 localhost、以及 DSH 側不必要的 X-Frame-Options 問題(README 表述爲 remote-browser-safe)。

兩種 UI 入口

  • Embedded tab:對話窗口中的「Web Preview」標籤(React slot 組件)。
  • Floating window:PREVIEW 按鈕 + 可拖拽浮動窗,適合側欄式預覽。

診斷工具箱

  • 可摺疊的 Console / Network / Errors 面板;插件向被代理的 HTML 注入捕獲腳本,將控制台輸出、fetch/XHR 與運行時錯誤 beacon 回主機緩衝,客戶端輪詢展示。

任意本地端口

  • 工具欄可輸入 localhost:5173、127.0.0.1:8080 等;客戶端將 origin 編碼爲 /web-preview/__proxy/<origin>/<path>,主機再轉發到對應 loopback 服務,無硬編碼端口。

配置默認值

  • 可通過 profile 預填工具欄 URL、固定默認 upstream,以及爲硬編碼根路徑(例如 /cesium/)配置 extra same-origin 別名。

實現分層(便於理解行爲)

層 作用
Client(client.js) 註冊 conversation.view 標籤與 shell.overlay 浮動窗;將 loopback URL 改寫爲同源 /web-preview/__proxy/...;輪詢 /web-preview/__events 獲取診斷。
Host(index.js) 在 DSH webServer 上註冊代理與診斷路由;轉發到 http://<origin>/<path>,向 HTML 注入捕獲腳本並緩衝診斷事件。

當前 package 版本爲 1.1.2,許可證 MIT。Node 引擎要求:^22.19.0 || >=24.0.0;peer 依賴含 @deepseek-ai/cordis(>=4.0.0)與 react(^18.2.0)。

安裝與啓用

從 DSH Plugin Market(或任意 curated registry 源)安裝,命令以 README 爲準:

dsh plugin --profile web add dsh-web-preview

安裝後重啓 dsh web。README 說明:啓動時無需額外審批——該插件爲 bundle,而非動態 Cordis 插件。

配置

所有配置項可選,寫在 profile patch 中該插件的 config: 下(loader 僅將 config: 傳給插件)。示例路徑與字段來自 README:

# ~/.dsh/profiles/web/cordis.patch.yml
- id: dsh-web-preview
  config:
    # Prefill the toolbar with this URL (client-side convenience).
    defaultUrl: "http://127.0.0.1:4173/"
    # Optional fixed upstream for the bare /web-preview/<path> form.
    defaultUpstream: "http://127.0.0.1:4173"
    # Extra DSH-origin prefixes forwarded to a local service. Needed when the
    # previewed app makes root-absolute requests that must stay on the same
    # origin but are NOT under /web-preview (e.g. Cesium's hardcoded /cesium/).
    extraAliases:
      - prefix: "/cesium"
        origin: "127.0.0.1:4173"
        path: "/cesium"
    # Optional override for the browser-error log (defaults to the OS temp dir).
    logPath: "/tmp/dsh-web-preview-errors.log"

若 defaultUpstream 爲空,只能通過工具欄輸入 URL 選擇目標;動態路徑 /web-preview/__proxy/<origin>/<path> 仍可在零配置下指向任意 localhost origin。

典型用法

  1. 按上一節安裝並重啓 dsh web。
  2. 在本機啓動 dev server(例如 Vite 默認 5173 或 README 示例中的 4173)。
  3. 打開 DSH Web GUI:使用對話區的 Web Preview 標籤,或點擊 PREVIEW 打開浮動窗。
  4. 在工具欄輸入目標,例如 http://127.0.0.1:4173/ 或 localhost:5173;客戶端會自動改寫爲 DSH 同源代理 URL 並在 iframe 中加載。
  5. 需要排查頁面行爲時,展開 Console / Network / Errors 面板;必要時可對 /web-preview/__clear 重置診斷緩衝(由插件 UI 或路由能力支持,緩衝上限 2000 條事件)。

路由均掛在 DSH 同源下,常見條目包括:

路由 方法 用途
/web-preview/__proxy/<origin>/<path> any 動態轉發到 http://<origin>/<path>
/web-preview/<path> any 轉發到 defaultUpstream(需已配置)
<alias.prefix>/<path> any 按 extraAliases 轉發
/web-preview/__events GET 拉取緩衝診斷(支持 ?since=<id>)
/web-preview/__config GET 解析後的插件配置(Client 讀取默認值)

適用場景與注意

適合誰

  • 通過遠程瀏覽器訪問 DSH(反向代理 + https),又需要在 GUI 裏看本機 dev server 的前端或智能體界面開發者。
  • 需要在 iframe 內快速看控制台與網絡請求、而不必單獨開瀏覽器 DevTools 的場景(能力以插件注入的捕獲腳本爲準)。

安全與權限

  • README 說明:主機僅轉發客戶端編碼後的 loopback 目標,不會代理任意遠程 URL;loopback 在編碼前由客戶端校驗。
  • 捕獲腳本運行在 iframe 內,受 iframe sandbox 約束,僅向 DSH 同源 beacon。
  • 插件以當前 DSH 進程權限運行;安裝前請自行審閱 GitHub 源碼 與 MIT 許可證。社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

DSH 生態強調「一切皆插件」;dsh-web-preview 解決的是 GUI 預覽本機 Web 服務時的同源與 mixed content 問題,並附帶基礎診斷面板。更多細節見目錄頁與倉庫 README。

羽毛球分组比赛记分
小程序二维码

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

小夜