28.4 共享组件

生成模型:Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗:输入 ~190k tokens,输出 ~5k tokens(本节)


macOS 和 iOS 应用之间存在大量共享逻辑——Gateway WebSocket 协议、聊天 UI、Canvas 命令解析、设备认证等。这些共享代码统一放在 apps/shared/OpenClawKit/ 中。

28.4.1 OpenClawKit 架构

Swift 包结构

OpenClawKit 是一个 Swift 包,包含三个库 target:

// apps/shared/OpenClawKit/Package.swift
let package = Package(
    name: "OpenClawKit",
    platforms: [.iOS(.v18), .macOS(.v15)],
    products: [
        .library(name: "OpenClawProtocol", targets: ["OpenClawProtocol"]),
        .library(name: "OpenClawKit", targets: ["OpenClawKit"]),
        .library(name: "OpenClawChatUI", targets: ["OpenClawChatUI"]),
    ],
    dependencies: [
        .package(url: "ElevenLabsKit", exact: "0.1.0"),   // TTS 语音合成
        .package(url: "textual", exact: "0.3.1"),          // Markdown 渲染
    ],
)

三层架构

职责
文件数

OpenClawProtocol

Gateway JSON 模型(GatewayModels)、Wizard 帮助函数、AnyCodable

3

OpenClawKit

WebSocket 客户端、设备认证、Canvas 命令、TTS、能力声明、Deep Links

39

OpenClawChatUI

SwiftUI 聊天视图、消息渲染、Markdown、会话管理

13

OpenClawProtocol — 纯数据层

最底层只包含 Gateway 通信的数据模型,没有任何外部依赖:

这种分层确保了协议类型可以被任何 target 引用,而不会引入不必要的依赖。

OpenClawKit — 核心逻辑

中间层包含与 Gateway 交互的所有核心逻辑:

WebSocket 客户端

GatewayChannel 是共享的 WebSocket 客户端,通过协议抽象(WebSocketTasking)与具体的网络实现解耦:

URLSession 的默认实现设置了 16MB 的最大消息大小——大型快照和历史 payload 可能超过默认限制:

连接选项通过 GatewayConnectOptions 结构体传递:

能力系统

设备能力通过一个简洁的枚举定义:

每个能力对应一组命令类型(如 CameraCommandsScreenCommands),Gateway 根据节点声明的能力列表来决定暴露哪些工具给 AI 代理。

OpenClawChatUI — 共享聊天界面

最上层是 SwiftUI 聊天组件,被 macOS 和 iOS 共同使用:

ChatView 是一个完整的 SwiftUI 视图,包含消息列表、输入框、会话切换等。它通过 ChatTransport 协议与具体的网络层解耦——macOS 和 iOS 各自提供不同的 transport 实现。

Android 的共享策略

Android 应用无法直接使用 Swift 包。它的共享策略是:

  1. 资源文件复用:通过 Gradle 的 assets.srcDir 直接引用 OpenClawKit/Resources

  2. 协议重新实现:在 ai.openclaw.android.protocol 包中用 Kotlin 重新定义了能力枚举、命令类型等

  3. 通信协议一致:虽然语言不同,但 JSON 格式的 WebSocket 帧是跨平台统一的


本节小结

  1. OpenClawKit 是 macOS 和 iOS 共享的 Swift 包,采用三层架构:Protocol(纯数据)→ Kit(核心逻辑)→ ChatUI(SwiftUI 组件)。

  2. WebSocket 客户端通过协议抽象与 URLSession 解耦,支持 16MB 大消息和 TLS 证书钉扎。

  3. 能力系统通过 5 个枚举值声明设备硬件能力,Gateway 据此决定可用工具。

  4. ChatUI 层提供完整的 SwiftUI 聊天界面,通过 ChatTransport 协议支持不同的网络后端。

  5. Android 通过资源共享和协议重实现来保持跨平台一致性,JSON 帧格式是三个平台的统一契约。

Last updated