dsh-plugin-mesh:局域网自动发现 DSH 实例并跨机派发任务

前言

在多台机器上跑 DeepSeek Harness(DSH)时,常见做法是 SSH 登录对端、手动同步工作区,或在聊天里反复粘贴命令。机器一多,「哪台在线、该把任务派给谁」会变成额外负担。DSH 社区把能力拆成插件;dsh-plugin-mesh(维护者 peng456)面向同一问题:让各台 DSH 在局域网里互相看见,并在侧栏提供对端操作页,支持把任务交给对端 agent 执行,也可反向回派。

这是什么

dsh-plugin-mesh 是 DSH 的 Mesh 工作流插件(npm 包名 dsh-plugin-mesh,当前版本 v0.3.35,MIT 许可证)。启动后会在同一网段自动发现其他 DSH 实例,展示在线状态与对端上报的能力;支持双向派发任务。不在同一网段时,可启用内置的用户态 Tailscale(tsnet)节点,在 tailnet 上与局域网发现到的机器出现在同一列表里,用法一致。

生态上,DSH 遵循「一切皆插件」;插件目录站 SkillHub 由社区维护,与 DeepSeek / 幻方无官方从属关系。

核心功能

下面介绍插件在运行时的主要能力,均来自项目文档。

自动发现与在线状态

  • 向 UDP 组播 239.255.42.99:45892 周期性发送 JSON 心跳(默认间隔 5000 ms),并监听同一组。
  • 在本机 TCP 45917 提供小型 HTTP 对端 API(可通过配置改 port)。
  • 组播 TTL 为 1,仅在同一二层广播域有效;跨子网或组播被挡时,可依赖启动扫描与主动扫网段(mesh_scan)兜底。
  • 通过 ping 等探测维护对端在线状态。

文档强调零配置倾向:固定端口、自动扫描与 ping,装上后同网段实例可互相发现,不需要配对码(安全相关见下文「适用场景与注意」)。

侧栏 Mesh 页面

首次打开 Mesh 页面时,可为当前机器设置可读名称(默认可用主机名),其他机器通过该名称识别本机。页面用于查看对端列表、互联网组网(Tailscale)等操作;面向从零使用的说明见 展示页。

Agent 可调用的工具

插件向 agent 注册以下工具(参数与行为以仓库 llms.txt 为准):

工具 作用
mesh_peers 列出已发现对端:在线状态、地址、系统、用户及能力等
mesh_scan 主动扫描本网段,组播不可用时使用
mesh_run 向指定对端派发任务(异步:成功表示已接受,不表示执行完毕)
mesh_tasks 查看近期收发的 mesh 任务

mesh_run 必填 peer(机器名、instance id 或 ip:port)与 task。同一项工作可复用 thread,对端会复用会话以节省上下文;纯确认类消息可用 noWake: true 避免唤醒对端 agent。

跨互联网组网(Tailscale / tsnet)

局域网发现依赖组播或可达网段扫描;跨互联网时插件可下载预编译 sidecar(约 9MB gzip,缓存在 ~/.dsh/mesh/bin/),运行用户态 Tailscale 节点。终端用户无需安装 Go 或 Tailscale 客户端。需在 Tailscale 侧准备可复用的 auth key,在 Mesh 面板或配置中填写一次;密钥等状态写入 ~/.dsh/mesh/state.json(权限 0600)。

安装与启用

安装后必须重启 DSH 宿主进程,插件在启动时加载。

DSH Desktop(desktop profile)请在 DSH Desktop 自带终端 中执行;其他 profile 可在普通终端安装:

dsh plugin add dsh-plugin-mesh

Web 等非 desktop profile:

dsh plugin --profile web add dsh-plugin-mesh

文档说明:dsh plugin --profile desktop ... 在普通终端会被 dsh 拒绝,desktop profile 由 Electron 应用独占管理;此时应使用应用内终端,或使用源码目录下的 ./install.sh(用户要求不从 git clone 起步时,以 npm 包安装为主)。

重启后可用本地健康检查确认服务已起来:

curl -s http://127.0.0.1:45917/mesh/v1/health

返回 JSON 中应包含 "app":"dsh-mesh" 及本机标识等字段。

典型用法

1、同网段:看对端并派发任务

在 agent 对话中,可先让 agent 调用 mesh_peers 查看谁在线,再调用 mesh_run。概念示例(具体 peer 名以你环境中的 mesh_peers 结果为准):

请调用 mesh_peers,然后把任务「在 peer 机器上执行 npm test」通过 mesh_run 派给名为 my-build-box 的对端,thread 设为 deploy-test。

派发是异步的;进度与结果需通过对端 agent 会话或 mesh_tasks 查看。

2、组播不可用:主动扫描

若交换机 IGMP、AP 隔离或 Windows 防火墙拦截 UDP 45892,对端可能迟迟不出现。可让 agent 执行 mesh_scan,或依赖配置中的启动扫描(scanOnStart 默认为 true)。

3、跨网段:启用 tsnet

在 Mesh 面板 tailnet 卡片填写 Tailscale 可复用 auth key,或在 profile 的 cordis.patch.yml 中配置(注意:config: 会被整段替换而非合并,改一项需保留其余需要的键):

- id: mesh
  config:
    tsnetEnabled: true
    tsnetAuthKey: "tskey-auth-..."

启用后,tailnet 上的 DSH 与局域网发现的对端在同一列表中,mesh_run 用法相同。

适用场景与注意

适合谁:同一局域网或多台开发机、构建机、Termux 设备等,希望从一台 DSH 把「在对端执行」交给 agent,而不是自己 SSH 切来切去;需要跨公网时愿意用 Tailscale 账号做自组网。

权限与安全:

  • 插件以当前 dsh 进程权限运行;安装前应阅读 GitHub 源码 与 MIT 许可证,确认符合你的环境策略。
  • 默认 requirePairing 为 false:任何能访问本机 TCP 45917 的主机都可能 POST 任务并唤醒 agent(使用 permissionPreset,默认 workspace-write)。在不可信网络应打开 Mesh 面板中的配对开关,或配置 requirePairing: true 并让双方共享密钥;文档说明配对 token 走明文 HTTP 头,主要防误连,不防嗅探。
  • 组播心跳会在同一 L2 网段暴露机器卡片信息;共享密钥不会出现在组播内容中。
  • Android / Termux 上 sidecar 与省电策略有关,长期后台需按 README 将 DSH 加入电池白名单,否则心跳与会话可能中断(插件会按设计重建会话,但调试噪声会增加)。

网络端口:TCP 45917(对端 HTTP)、UDP 45892(组播)。跨子网 LAN 发现可能需要在配置中补充扫描范围(详见完整 README)。

结尾

dsh-plugin-mesh 把「多机 DSH 互相可见 + 双向派任务」做成可安装的 Mesh 插件:局域网靠组播与扫描,远网靠内置 tsnet,侧栏与 agent 工具(mesh_peers / mesh_run 等)覆盖日常编排。更多设计取舍与排障见仓库中文 README 与 DESIGN.md。

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

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

Xiaoye