dsh-hermes-facade:用 Hermex iOS 客戶端驅動本機 DeepSeek Harness

前言

DeepSeek Harness(DSH)通常在桌面或瀏覽器裏操作智能體會話。若想在 iPhone、iPad 上以原生 SwiftUI 界面查看流式回覆、思考過程、工具卡片和審批,而不去 fork 客戶端或上架自建 App,需要在本機提供 Hermex 所識別的 hermes-webui(HTTP + SSE)或 Hermes host(REST + WebSocket JSON-RPC)服務。

dsh-hermes-facade 是 DSH 的 host 插件:在本地監聽迴環端口,在 Hermex 與 DSH 的 Typer Gateway 之間做協議轉換,不改動 DSH 原生的 :3080 入口。維護者爲 Gnanesh Kunal,源碼在 GitHub 以 MIT 許可證發佈,當前 package 版本爲 0.3.0。

插件定位與架構

一句話:讓本機 DSH 對外表現爲 Hermex 免費客戶端(Hermex,App Store)可連接的 Hermes 系列服務端。

README 中的數據路徑示意如下:

Hermex (iOS)  --HTTPS/SSE-->  tailscale serve :9443  -->  127.0.0.1:9120
                                                                   |
                                                          dsh-hermes-facade
                                                                   | in-process
                                                          dsh typertGateway

插件選擇「門面」而非 fork Hermex 的原因也很明確:Hermex 主界面走 hermes-webui 契約;冒充 webui 主機是變更面最小的做法,無需維護 Xcode 工程或獨立 App Store 條目。

核心功能

下面只列 README 與 package.json 中已寫明的能力。

hermes-webui 監聽(默認端口 9120)

  • 會話列表、詳情、歷史(最新 200 條;在最新 800 條內支持 50 條一頁的向前翻頁)。
  • 會話搜索(id、標題、消息內容;內容匹配帶摘要)。
  • 聊天:SSE 流式輸出、取消、token 增量、思考塊、工具卡片及結果。
  • 審批(once / session / always / deny)與澄清問答;重連後保留命令描述,過期提示返回 409 {"stale":true}。
  • 模型選擇與 reasoning effort;用量遙測(無費用字段,因 DSH 無定價)。
  • 工作區:列表只讀;工作區文件瀏覽器只讀。
  • 健康檢查、密碼認證與簽名 Cookie。

Hermes-protocol 監聽(可選,端口 9121)

Hermex 2.x 默認對接 Hermes host。插件可在同一進程內同時提供兩套契約:

端口 契約 在 App 中的表現
9120 hermes-webui(HTTP + SSE) Legacy 服務器;可能出現遷往 Hermes 的提示
9121 Hermes host(REST + WS JSON-RPC) 原生 Hermes 服務器

網關監聽器不重複實現 DSH,而是通過內部 token 轉回本機 webui 門面。README 列出聊天附件、會話內 Git(讀寫在無進行中的 turn 時可用)、Memory、Skills(只讀)、Tasks/cron 等覆蓋面;Bots 與會話導入未實現(返回 JSON-RPC -32601,App 會隱藏相關控件)。細節見倉庫內 docs/06-hermes-gateway.md。

啓用第二監聽器的配置示例(來自 README):

config:
  gatewayEnabled: true      # false 時僅保留 webui 監聽
  gatewayPort: 9121
  gatewayBindHost: 127.0.0.1
  gatewayLanHost: auto      # 同時在 Wi-Fi LAN 與 Tailscale IPv4 上提供明文 HTTP

環境與依賴

package.json 要求:

  • dsh:>=0.2.1-rc.1
  • node:>=22.6

安裝與啓用

先做插件安裝,再把 bundle 寫進 profile,最後重啓 host。

1、安裝插件(命令須與 README 一致):

dsh plugin --profile web add dsh-hermes-facade

2、在 ~/.dsh/profiles/web/package.json 的 bundle 列表中加入包名:

"dsh": { "profile": { "bundles": [ "... existing ...", "dsh-hermes-facade" ] } }

3、重啓 host 以加載插件:

dsh web

首次啓動會在日誌中打印一次性密碼,例如:

hermes-facade: FIRST RUN password = xxxxxxxxxxxx

哈希結果保存在 ~/.dsh/hermes-facade/password.json(權限 0600)。若要重置,刪除該文件後重啓即可。

典型用法:從手機連到本機

經 Tailscale HTTPS 暴露(僅 tailnet,不用 Funnel)

webui 契約:

tailscale serve --bg --https=9443 http://127.0.0.1:9120

若已啓用 Hermes 監聽器,可單獨暴露第二端口(App 通過 GET /api/status 判定服務器類型,同一 URL 不能兼有兩種角色):

tailscale serve --bg --https=9444 http://127.0.0.1:9121
tailscale serve status

在 Hermex 中選擇 Add server,URL 填 https://<machine>.<tailnet>.ts.net:9443,密碼填首次啓動時打印的值。

取消暴露時:

tailscale serve --https=9443 off

注意:不要用 serve reset,否則會連帶關閉 Funnel 與 :8443。

局域網或 Tailscale 明文 HTTP

Hermex 允許對本地網段主機及 Tailscale 100.64.0.0/10 使用明文 HTTP,因此前兩種方式可不配 TLS:

場景 URL 示例
同一 Wi-Fi http://<mac-lan-ip>:9120
Tailscale 明文 http://<mac-tailscale-ip>:9120
Tailscale + serve https://<machine>.<tailnet>.ts.net:9443

查地址可用:

ipconfig getifaddr en0      # Wi-Fi LAN
tailscale ip -4             # Tailscale IPv4

cordis.patch.yml 中 lanHost: auto 時纔會在非迴環地址監聽;否則僅 127.0.0.1,手機只能經 tailscale serve 到達。iOS 首次訪問會申請本地網絡權限,需允許。

若 HTTPS 地址長時間無響應,可改用 Tailscale 明文 IP,跳過 MagicDNS 與 TLS 握手。

開發與調試

Host 插件在 dsh web 啓動時加載,修改插件後需重啓。若只迭代 HTTP/SSE 契約,可單獨起 mock 服務:

node scripts/standalone.mjs --port 9120

該入口與 npm test 相同,可用 curl 覆蓋整面 API。

從源碼目錄加入 profile 時(README 節選):

dsh plugin --profile web add ~/self/dsh-hermes-facade

(需先在本機準備好對應路徑的 checkout,並按倉庫說明執行 npm run check && npm test。)

適用場景與注意

適合誰:已在運行 DSH、希望通過 Hermex 在移動設備上管理同一會話流(含審批、工具卡、澄清)的自託管用戶;已使用或計劃使用 Tailscale 將本機服務暴露給個人設備,且接受自行保管一次性密碼。

權限與安全:插件作爲 DSH host 的一部分,與當前 dsh 進程共享權限,可觸達 DSH 已開放的工作區與工具能力。安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證;勿將 Funnel 用於 Hermes 門面 README 明確反對的對外公開場景。

生態說明:DSH 奉行「一切皆插件」;Skillhub 插件目錄 爲社區站點,與 DeepSeek、幻方無官方從屬關係。

結尾

經過上面的步驟,本機 DSH 即可在移動端正向 Hermex 呈現會話、流式輸出與審批流程,而無需維護 fork 版客戶端。更多信息見目錄頁與倉庫 README:

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

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

小夜