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:

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

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

小夜