iOS 客户端与 WebSocket Gateway
iOS 客户端与 WebSocket 网关
相关源文件
本章引用的主要源码文件:
docs/IOS_CLIENT.mddocs/MOBILE_AGENT_SIMULATOR.mddocs/MOBILE_IOS_HOST_INTEGRATION.mddocs/MOBILE_SWIFT_AUDIT.mdios/Sources/JCodeKit/Connection.swiftios/Sources/JCodeKit/CredentialStore.swiftios/Sources/JCodeKit/JCodeClient.swiftios/Sources/JCodeKit/Protocol.swiftios/Tests/JCodeKitTests/ClientTests.swiftios/Tests/JCodeKitTests/ProtocolTests.swiftsrc/gateway.rssrc/gateway/auth.rssrc/gateway/registry.rs
jcode iOS 客户端是一款原生 SwiftUI 应用程序,旨在为 jcode 服务器提供移动端界面。虽然大语言模型(LLM)编排、工具执行和文件系统访问等繁重任务仍保留在桌面端/服务器端,但 iOS 应用支持远程交互、通过推送通知进行工具审批以及环境状态监控 docs/IOS_CLIENT.md:8-14。通信通过服务器上的 WebSocket 网关进行,该网关将网络流量桥接到内部代理运行时 src/gateway.rs:1-6。
系统架构
该架构利用 WebSocket 网关将现有的基于换行符分隔的 JSON 协议通过 TCP 暴露出来。安全性通常通过 Tailscale(WireGuard)隧道运行网关来处理,该隧道提供点对点加密,无需将端口暴露到公共互联网 docs/IOS_CLIENT.md:40-42。
高层组件映射
| 组件 | 代码实体 | 职责 |
|---|---|---|
| WebSocket 网关 | src/gateway.rs | 监听 TCP :7643 端口,处理配对,并将 WebSocket 帧中继到服务器 src/gateway.rs:9-13。 |
| 移动端核心 | jcode-mobile-core | 共享的 Rust 逻辑,用于状态机、协议适配器和语义化 UI docs/MOBILE_AGENT_SIMULATOR.md:43-51。 |
| iOS SDK | JCodeKit | jcode 协议和连接管理的 Swift 实现 ios/Sources/JCodeKit/JCodeClient.swift:119-122。 |
| 凭证存储 | CredentialStore | 使用 servers.json 安全持久化存储服务器认证令牌 ios/Sources/JCodeKit/CredentialStore.swift:36-47。 |
| 移动端模拟器 | jcode-mobile-sim | 用于代理驱动应用测试的 Linux 原生模拟器 docs/MOBILE_AGENT_SIMULATOR.md:53-60。 |
来源:docs/IOS_CLIENT.md:23-94,src/gateway.rs:34-47,docs/MOBILE_AGENT_SIMULATOR.md:30-37
架构流程:iOS 到服务器
下图展示了移动端请求如何通过网关流入核心代理引擎。
来源:docs/IOS_CLIENT.md:23-94,ios/Sources/JCodeKit/Connection.swift:3-37,ios/Sources/JCodeKit/JCodeClient.swift:119-149,src/gateway.rs:9-13
WebSocket 网关
网关是一个网络监听器,与 Unix 套接字并行运行。它将 WebSocket 帧转换为服务器 handle_client 循环期望的字节流格式 src/gateway.rs:63-71。
实现细节
- 端口:默认为
7643(手机键盘上的 "jc")src/gateway.rs:34-35。 - 协议:与 TUI Unix 套接字共享相同的
Request和ServerEventJSON 协议ios/Sources/JCodeKit/Protocol.swift:5-150。 - 认证:根据存储在
~/.jcode/devices.json中的DeviceRegistry验证十六进制令牌src/gateway/registry.rs:11-24。 - 传输:使用
tokio-tungstenite进行 WebSocket 握手,并使用UnixStream::pair()桥接到内部服务器src/gateway.rs:150-170。
设备配对流程
配对通过使用一个短时效的 6 位代码在移动设备和服务器实例之间建立信任关系 src/gateway/registry.rs:43-47。
来源:docs/IOS_CLIENT.md:98-119,src/gateway/registry.rs:43-112,ios/Sources/JCodeKit/CredentialStore.swift:61-65
JCodeKit SDK 与 iOS 应用
JCodeKit 是提供协议桥接的核心 Swift 框架。它定义了 JCodeClient,使用委托模式来更新 UI ios/Sources/JCodeKit/JCodeClient.swift:89-106。
- JCodeConnection:一个管理
URLSessionWebSocketTask的 Actor。它每 20 秒处理一次自动心跳,并监控.reloading事件以指示服务器交接ios/Sources/JCodeKit/Connection.swift:27-205。 - CredentialStore:管理
ServerCredential对象列表,将其持久化存储到应用支持目录,并设置受限的文件权限ios/Sources/JCodeKit/CredentialStore.swift:36-108。 - 协议映射:实现 Rust 中
Request和ServerEvent枚举的 SwiftCodable版本,包括对流式文本、工具执行和 Token 使用更新的支持ios/Sources/JCodeKit/Protocol.swift:5-150。
有关 SDK 和 SwiftUI 实现的详细信息,请参阅 JCodeKit SDK 与 iOS 应用。
移动端模拟器与核心协议
该项目正在向 Rust 优先 的移动端架构过渡。目标是将应用状态、连接生命周期和聊天逻辑迁移到 jcode-mobile-core 中,以便可以通过 Linux 原生的 jcode-mobile-sim 进行测试 docs/MOBILE_AGENT_SIMULATOR.md:9-14。
- 语义化 UI:核心将生成一个确定性的 UI 树,代理可以无需 OCR 即可检查和交互(点击、输入、滚动)
docs/MOBILE_AGENT_SIMULATOR.md:160-167。 - 测试:使用
mobile_simulator_tester.sh和黄金夹具来验证协议处理和状态转换docs/MOBILE_AGENT_SIMULATOR.md:176-179。
有关模拟器和共享 Rust 核心的详细信息,请参阅 移动端模拟器与核心协议。
构建与持续集成/持续部署(CI/CD)
iOS 项目通过 project.yml 文件(XcodeGen)进行管理,并使用 Codemagic 管线进行构建。该管线处理依赖关系、协议单元测试以及分发到 TestFlight docs/IOS_CLIENT.md:10-14。
来源:ios/Tests/JCodeKitTests/ProtocolTests.swift:43-152,docs/MOBILE_SWIFT_AUDIT.md:1-25