Clawnet 重构(协议 + 认证统一)
嗨 嗨 Peter — 方向很好;这将解锁更简单的用户体验 + 更强的安全性。 目的 单一、严谨的文档用于: 当前状态:协议、流程、信任边界。 痛点:审批、多跳路由、UI 重复。 提议的新状态:一个协议、作用域角色、统一的认证/配对、TLS 固定。 身份模型:稳定 ID + 可爱的别名。 迁移计划、风险、开放问题。 目标(来自讨论) 所有客户端使用一个协议(mac 应用、CLI、iOS、Android、无头节点)。 每个网络参与者都经过认证 + 配对。 角色清晰:节点 vs 操作者。 中央审批路由到用户所在位置。 所有远程流量使用 TLS 加密 + 可选固定。 最小化代码重复。 单台机器应该只显示一次(无 UI/节点重复条目)。 非目标(明确) 移除能力分离(仍需要最小权限)。 不经作用域检查就暴露完整的 Gateway 网关控制平面。 使认证依赖于人类标签(别名仍然是非安全性的)。 当前状态(现状) 两个协议 1) Gateway 网关 WebSocket(控制平面) 完整 API 表面:配置、渠道、模型、会话、智能体运行、日志、节点等。 默认绑定:loopback。通过 SSH/Tailscale 远程访问。 认证:通过 connect 的令牌/密码。 无 TLS 固定(依赖 loopback/隧道)。 代码: src/gateway/server/ws-connection/message-handler.ts src/gateway/client.ts docs/gateway/protocol.md 2) Bridge(节点传输) 窄允许列表表面,节点身份 + 配对。 TCP 上的 JSONL;可选 TLS + 证书指纹固定。 TLS 在设备发现 TXT 中公布指纹。 代码: src/infra/bridge/server/connection.ts src/gateway/server-bridge.ts src/node-host/bridge-client.ts docs/gateway/bridge-protocol.md 当前的控制平面客户端 CLI → 通过 callGateway(src/gateway/call.ts)连接 Gateway 网关 WS。 macOS 应用 UI → Gateway 网关 WS(GatewayConnection)。 Web 控制 UI → Gateway 网关 WS。 ACP → Gateway 网关 WS。 浏览器控制使用自己的 HTTP 控制服务器。 当前的节点 macOS 应用在节点模式下连接到 Gateway 网关 bridge(MacNodeBridgeSession)。 iOS/Android 应用连接到 Gateway 网关 bridge。 配对 + 每节点令牌存储在 Gateway 网关上。 当前审批流程(exec) 智能体通过 Gateway 网关使用 system.run。 Gateway 网关通过 bridge 调用节点。 节点运行时决定审批。 UI 提示由 mac 应用显示(当节点 == mac 应用时)。 节点向 Gateway 网关返回 invoke-res。 多跳,UI 绑定到节点主机。 当前的在线状态 + 身份 来自 WS 客户端的 Gateway 网关在线状态条目。 来自 bridge 的节点在线状态条目。 mac 应用可能为同一台机器显示两个条目(UI + 节点)。 节点身份存储在配对存储中;UI 身份是分开的。 问题/痛点 需要维护两个协议栈(WS + Bridge)。 远程节点上的审批:提示出现在节点主机上,而不是用户所在位置。 TLS 固定仅存在于 bridge;WS 依赖 SSH/Tailscale。 身份重复:同一台机器显示为多个实例。 角色模糊:UI + 节点 + CLI 能力没有明确分离。 提议的新状态(Clawnet) 一个协议,两个角色 带有角色 + 作用域的单一 WS 协议。 ...