网关拥有的配对(选项 B)

网关拥有的配对(选项 B)

适用范围

在以下情况使用此页面:

  • 在没有 macOS UI 的情况下实现节点配对批准
  • 添加用于批准远程节点的 CLI 流程
  • 使用节点管理扩展网关协议

在网关拥有的配对中,网关是允许哪些节点加入的真相来源。UI(macOS 应用、未来的客户端)只是批准或拒绝待处理请求的前端。

重要: WS 节点在 connect 期间使用设备配对(角色 node)。node.pair.* 是一个单独的配对存储,对 WS 握手进行门控。只有显式调用 node.pair.* 的客户端才使用此流程。

概念

  • 待处理请求:节点要求加入;需要批准。
  • 已配对节点:具有已发行令牌的已批准节点。
  • 传输:网关 WS 端点转发请求但不决定成员资格。(传统 TCP 网桥支持已弃用/移除。)

配对如何工作

  1. 节点连接到网关 WS 并请求配对。
  2. 网关存储待处理请求并发出 node.pair.requested
  3. 你批准或拒绝请求(CLI 或 UI)。
  4. 批准后,网关发出新令牌(重新配对时会轮换令牌)。
  5. 节点使用令牌重新连接并现在"已配对"。

待处理请求会在 5 分钟后自动过期。

CLI 工作流(无头友好)

moltbot nodes pending
moltbot nodes approve <requestId>
moltbot nodes reject <requestId>
moltbot nodes status
moltbot nodes rename --node <id|name|ip> --name "Living Room iPad"

nodes status 显示已配对/已连接的节点及其能力。

API 表面(网关协议)

事件:

  • node.pair.requested — 创建新的待处理请求时发出。
  • node.pair.resolved — 请求被批准/拒绝/过期时发出。

方法:

  • node.pair.request — 创建或重用待处理请求。
  • node.pair.list — 列出待处理 + 已配对的节点。
  • node.pair.approve — 批准待处理请求(发行令牌)。
  • node.pair.reject — 拒绝待处理请求。
  • node.pair.verify — 验证 { nodeId, token }

注意:

  • node.pair.request 对于每个节点是幂等的:重复调用返回相同的待处理请求。
  • 批准始终生成新令牌;从未从 node.pair.request 返回令牌。
  • 请求可能包括 silent: true 作为自动批准流程的提示。

自动批准(macOS 应用)

当以下情况时,macOS 应用可以尝试静默批准

  • 请求标记为 silent,并且
  • 应用可以使用相同的用户验证与网关主机的 SSH 连接。

如果静默批准失败,它会回退到正常的"批准/拒绝"提示。

存储(本地、私有)

配对状态存储在网关状态目录下(默认 ~/.moltbot):

  • ~/.moltbot/nodes/paired.json
  • ~/.moltbot/nodes/pending.json

如果你覆盖 MOLTBOT_STATE_DIRnodes/ 文件夹会随之移动。

安全注意事项:

  • 令牌是机密;将 paired.json 视为敏感信息。
  • 轮换令牌需要重新批准(或删除节点条目)。

传输行为

  • 传输是无状态的;它不存储成员资格。
  • 如果网关离线或配对被禁用,节点无法配对。
  • 如果网关处于远程模式,配对仍然针对远程网关的存储进行。