dsh-mobi-web:DSH 手機優先 Web 客戶端

前言

DeepSeek Harness(DSH)自帶 Web UI 體量較大,在經中繼的手機網絡上首屏加載往往要十秒以上,交互也偏桌面。社區裏另有名爲 dsh-mobile-gateway 的 npm 包,走的是掃碼與代理完整 UI 的路線。dsh-mobi-web 是另一類方案:在 harness 進程內掛一個 sidecar 網關,對外提供約 32 KB 的獨立移動頁,直連宿主服務,並支持「由手機發起的回合,審批只留在手機上」等行爲。下面按定位、能力、安裝與暴露方式說明用法與注意點。

這是什麼

dsh-mobi-web 是面向手機的 Web 客戶端插件,維護者爲 rainfish-home,歸類爲 DSH 客戶端插件。數據流大致爲:手機瀏覽器經 HTTPS(Tailscale Serve 或 Cloudflare Tunnel)訪問本機 127.0.0.1 上的網關端口,網關再與 harness 宿主服務同進程協作。

phone browser  ──HTTPS──▶  Cloudflare tunnel / Tailscale  ──▶  127.0.0.1:3083 (this plugin)  ──▶  harness host services

插件以 DSH bundle 形式發佈(自帶 cordis.patch.yml),當前 npm 包版本爲 0.1.0,許可證 MIT,要求 Node >=20。

核心功能

瀏覽與會話

  • 按 workspace 分組展示會話,與桌面一樣按 SessionSummary.updatedAt 排序;正在運行的會話有標記。
  • 活躍會話(運行中或 24 小時內有過活動)與更早會話分開,舊會話默認摺疊;已歸檔會話不展示;各 workspace 摺疊狀態會記住。

閱讀消息

  • 支持常見 Markdown:標題、列表、表格、引用、鏈接、行內與圍欄代碼塊。
  • 圍欄內的 Mermaid 在設備上渲染爲 SVG,點開可全屏平移縮放,再點關閉。
  • 長消息摺疊到約 460px,可「展開全文」;回覆支持 token 流式增長。

操作

  • 多行輸入(Enter 換行,僅發送按鈕提交);最多 4 張圖片(單張 4 MB,inline base64)。
  • 可中止正在運行的 turn;可在任意 workspace 標題欄「+」新建會話;可跳回最新消息。

審批(Origin affinity)

  • 審批請求經 SSE 以卡片形式到達。
  • 若該 turn 由手機發起,審批只留在手機端,最多等待 15 分鐘,超時取消,不會回落到無人值守的桌面;桌面發起的 turn 仍保持原有行爲(約 20 秒寬限後交回桌面)。
  • 默認配置項 approvalPriority 爲 'phone-first';設爲 'desktop' 可關閉攔截。

連接與生命週期

  • SSE 斷線指數退避重連(2 s 至 30 s),並以 6 s 輪詢兜底。
  • 網關隨 harness 進程啓停,無需單獨守護進程。

安裝與啓用

插件是 DSH bundle,安裝後會把依賴寫入 package.json 的 dsh.profile.bundles;新 bundle 需重啓應用或 dsh 後纔會掛載。

Web 及其他 profile(npm CLI):

dsh plugin --profile web add dsh-mobi-web     # from npm
dsh plugin --profile web add link:/path/to/dsh-mobi-web-plugin   # from a checkout

Desktop profile(Electron 專用,npm CLI 不管理 desktop):在應用內插件管理器安裝,或使用應用自帶的 dsh:

dsh plugin --profile desktop add dsh-mobi-web

本地檢出目錄名慣例仍爲 dsh-mobi-web-plugin,與 npm 包名 dsh-mobi-web 不同,勿與無關包 dsh-mobile-gateway 混淆。

暴露訪問與登錄

網關默認只監聽環回地址,需用隧道把端口暴露給手機:

tailscale serve --bg 3083          # phone on the same tailnet
# or a Cloudflare tunnel ingress: host → http://127.0.0.1:3083

瀏覽器打開 https://<your-host>/m/。

訪問口令:未在 patch 裏設置 token 時,首次啓動會在 $DSH_HOME/dsh-mobi-web-token(權限 0600)生成令牌;啓動日誌只打印文件路徑,用 cat 該文件讀取。也可在配置中設置 token: '…',或在完全可信的網絡使用 token: false 關閉門控。不推薦開啓 allowTokenUrl(?t=… 易泄露)。

配置要點

在對應 profile 的 cordis.patch.yml 中覆蓋配置時,patch 會替換整段 config 對象,需寫全非默認值。示例:

- id: dsh-mobi-web
  config:
    listenHost: '127.0.0.1'
    listenPort: 3083
    blockPaths: ['/dsh-whale/']
key 默認值 含義
listenHost 127.0.0.1 不綁定公網,由隧道終結 TLS
listenPort 3083(bundle patch;代碼默認 3080) 監聽端口
token 自動生成文件 Cookie 門控密碼;false 關閉
allowTokenUrl false 是否接受 URL 傳參令牌
blockPaths [] 匹配前綴返回 204,減輕頁面負載
approvalPriority 'phone-first' 'desktop' 關閉手機側攔截
pwa true 爲代理 UI 注入 manifest 與圖標
brotli true 對代理 UI 的 JS 再壓縮

主要 HTTP 路由包括移動頁 GET /m/、會話與 SSE GET /m/api/...、寫操作 POST /m/api/prompt 等;存活探測 GET /__gw/health 無需認證。

典型用法

  1. 在目標 profile 執行 dsh plugin … add dsh-mobi-web,重啓 harness。
  2. 用 Tailscale Serve 或 Cloudflare Tunnel 把 3083 映射到 HTTPS 主機名。
  3. 手機打開 /m/,輸入令牌登錄;在同一 tailnet 內使用,避免公網裸奔。
  4. 在手機上發起需要工具審批的對話;審批卡片只在本機瀏覽器出現,在時限內批准或拒絕。
  5. 需要看圖或流程時,在會話裏查看 Mermaid 渲染;需要發截圖時用圖片發送(最多 4 張)。

適用場景與注意

適合誰:已在單機跑 DSH、偶爾用手機查看會話、發 prompt、處理工具審批(含 shell)的開發者;網絡側願意用 Tailscale 等私有組網,或明確理解公網暴露風險的場景。

安全(README 強調):持有登錄令牌即相當於通過 harness 操作該機——可發 prompt、讀全部會話歷史、代你批准工具調用(含 shell)。網關代理的是整個 harness,而非僅聊天。建議放在 Tailscale 等私有網絡;令牌專用於此、不復用他處密碼;公網隧道需自知風險。插件以當前 dsh 進程權限運行,安裝前請閱讀 源碼與 MIT 許可證。

限制(文檔寫明):單用戶、單主機,無多賬號;無推送,手機休眠時審批只能等待(手機發起時最長約 15 分鐘)。歷史消息內圖片可渲染(README 在此處有截斷,其餘以倉庫爲準)。

設計約束:實現上拒絕在非環回地址啓動監聽;sidecar 內請求處理器均包 try/catch,避免未捕獲異常拖垮宿主。

結尾

dsh-mobi-web 用極小頁面和進程內網關,在弱網手機上補齊 DSH 的瀏覽、對話、Mermaid 與手機優先審批能力。安裝走官方 dsh plugin add dsh-mobi-web,暴露端口後訪問 /m/ 即可。更多說明見社區目錄 SkillHub 條目 與倉庫 GitHub README。

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

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

小夜