原生客户端
一句话概括
三个原生客户端应用(macOS、iOS、Android)充当轻量 Node 客户端,通过 WebSocket 向 Gateway 暴露设备能力(相机、麦克风、屏幕、位置、通讯录等),同时提供本地聊天 UI 和语音交互。
职责
- 通过 WebSocket 连接 Gateway,使用 Ed25519 设备认证和 TLS 证书锁定
- 向 Gateway 广播设备能力(相机、屏幕、位置、语音、通讯录、日历等)
- 执行 Gateway 调用的命令(
camera.snap、location.get、screen.record、canvas.navigate等) - 提供本地聊天界面,支持流式响应和 Markdown 渲染
- 支持语音交互:唤醒词检测和按键说话
- 通过内嵌 WebView 显示 A2UI Canvas,带 JavaScript 桥接
架构图
关键源码文件
共享(Apple 平台)
macOS
iOS
Android
WebSocket 协议(三个平台共享)
协议版本
所有应用使用协议 v3(min=3,max=3)。
连接握手
Node 调用流程
各平台设备能力
各平台 Node 命令
平台差异
TLS 与安全
A2UI Canvas 集成
三个平台均通过内嵌 WebView 实现 A2UI Canvas:
与其他模块的关系
-
依赖:
gateway/— WebSocket 服务器处理所有通信,提供 canvas 宿主,管理设备认证apps/shared/OpenClawKit/— iOS + macOS 共享 Swift 包(协议、会话、身份、命令)apps/shared/OpenClawChatUI/— iOS + macOS 共享聊天 UI 组件
-
被依赖:
- 无 — 原生应用是叶节点客户端
我的认知盲区
- SwabbleKit 唤醒词引擎的精确内部实现 — 第三方依赖,非 OpenClaw 源码
- macOS 上
PeekabooBridgeHostCoordinator如何处理 UI 自动化 — 似乎是一个重要功能 - Android 的 APK 自动更新机制(
AppUpdateHandler)— 如何发现和应用更新? - Watch 应用功能 — 引用了
WatchConnectivity但源码树中未找到实际的 watchOS 应用 - Android 是否支持 iOS 的完整命令集(通讯录、日历、提醒、照片),还是这些仅限 iOS
- 屏幕录制结果如何编码和传输 — WebSocket 帧的大小限制
- 各平台语音唤醒的准确性和电池影响
变更频率
- iOS:高 — 功能最丰富的平台,定期添加新命令和能力
- Android:中 — 跟随 iOS 功能,有一些平台特定的补充(SMS、前台 Service)
- macOS:中 — 菜单栏应用,功能集聚焦,Peekaboo 集成在演进
- 共享(OpenClawKit):中 — 协议变更首先传播到这里,然后到平台代码
- 协议(v3):低 — 线协议稳定;能力添加不需要协议变更