Files
zclaw_openfang/docs/features/00-architecture/01-communication-layer.md
iven adfd7024df docs(claude): restructure documentation management and add feedback system
- Restructure §8 from "文档沉淀规则" to "文档管理规则" with 4 subsections
  - Add docs/ structure with features/ and knowledge-base/ directories
  - Add feature documentation template with 7 sections (概述/设计初衷/技术设计/预期作用/实际效果/演化路线/头脑风暴)
  - Add feature update trigger matrix (新增/修改/完成/问题/反馈)
  - Add documentation quality checklist
- Add §16
2026-03-16 13:54:03 +08:00

233 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 通信层 (Communication Layer)
> **分类**: 架构层
> **优先级**: P0 - 决定性
> **成熟度**: L4 - 生产
> **最后更新**: 2026-03-16
---
## 一、功能概述
### 1.1 基本信息
通信层是 ZCLAW 与 OpenFang Kernel 之间的核心桥梁,负责所有网络通信和协议适配。
| 属性 | 值 |
|------|-----|
| 分类 | 架构层 |
| 优先级 | P0 |
| 成熟度 | L4 |
| 依赖 | 无 |
### 1.2 相关文件
| 文件 | 路径 | 用途 |
|------|------|------|
| 核心实现 | `desktop/src/lib/gateway-client.ts` | WebSocket/REST 客户端 |
| 类型定义 | `desktop/src/types/agent.ts` | Agent 相关类型 |
| 测试文件 | `tests/desktop/gatewayStore.test.ts` | 集成测试 |
| HTTP 助手 | `desktop/src/lib/request-helper.ts` | 重试/超时/取消 |
---
## 二、设计初衷
### 2.1 问题背景
**用户痛点**:
1. OpenClaw 使用 TypeScriptOpenFang 使用 Rust协议差异大
2. WebSocket 和 REST 需要统一管理
3. 认证机制复杂Ed25519 + JWT
4. 网络不稳定时需要自动重连和降级
**系统缺失能力**:
- 缺乏统一的协议适配层
- 缺乏智能的连接管理
- 缺乏安全的凭证存储
**为什么需要**:
ZCLAW 需要同时支持 OpenClaw (旧) 和 OpenFang (新) 两种后端,且需要处理 WebSocket 流式通信和 REST API 两种协议。
### 2.2 设计目标
1. **协议统一**: WebSocket 优先REST 降级
2. **认证安全**: Ed25519 设备认证 + JWT 会话令牌
3. **连接可靠**: 自动重连、候选 URL 解析、心跳保活
4. **状态同步**: 连接状态实时反馈给 UI
### 2.3 竞品参考
| 项目 | 参考点 |
|------|--------|
| OpenClaw | WebSocket 流式协议设计 |
| NanoClaw | 轻量级 HTTP 客户端 |
| ZeroClaw | 边缘场景连接策略 |
### 2.4 设计约束
- **技术约束**: 必须支持浏览器和 Tauri 双环境
- **兼容性约束**: 同时支持 OpenClaw (18789) 和 OpenFang (4200/50051)
- **安全约束**: API Key 不能明文存储
---
## 三、技术设计
### 3.1 核心接口
```typescript
interface GatewayClient {
// 连接管理
connect(url?: string, token?: string): Promise<void>;
disconnect(): void;
isConnected(): boolean;
// 聊天
chat(message: string, options?: ChatOptions): Promise<ChatResponse>;
chatStream(message: string, options?: ChatOptions): Promise<void>;
// Agent 管理
listAgents(): Promise<Agent[]>;
listClones(): Promise<Clone[]>;
createClone(clone: CloneConfig): Promise<Clone>;
// Hands 管理
listHands(): Promise<Hand[]>;
triggerHand(handId: string, input: any): Promise<HandRun>;
approveHand(runId: string, approved: boolean): Promise<void>;
// 工作流
listWorkflows(): Promise<Workflow[]>;
executeWorkflow(workflowId: string): Promise<WorkflowRun>;
}
```
### 3.2 数据流
```
UI 组件
Zustand Store (chatStore, connectionStore)
GatewayClient
├──► WebSocket (ws://127.0.0.1:50051/ws)
│ │
│ └──► 流式事件 (assistant, tool, hand, workflow)
└──► REST API (/api/*)
└──► Vite Proxy → OpenFang Kernel
```
### 3.3 状态管理
```typescript
type ConnectionState =
| 'disconnected' // 未连接
| 'connecting' // 连接中
| 'connected' // 已连接
| 'error'; // 连接错误
```
### 3.4 关键算法
**URL 候选解析顺序**:
1. 显式传入的 URL
2. 本地 Gateway (Tauri 运行时)
3. 快速配置中的 Gateway URL
4. 存储的历史 URL
5. 默认 URL (`ws://127.0.0.1:50051/ws`)
6. 备选 URL 列表
---
## 四、预期作用
### 4.1 用户价值
| 价值类型 | 描述 |
|---------|------|
| 效率提升 | 流式响应,无需等待完整响应 |
| 体验改善 | 连接状态实时可见,断线自动重连 |
| 能力扩展 | 支持 OpenFang 全部 API |
### 4.2 系统价值
| 价值类型 | 描述 |
|---------|------|
| 架构收益 | 协议适配与业务逻辑解耦 |
| 可维护性 | 单一入口,易于调试 |
| 可扩展性 | 新 API 只需添加方法 |
### 4.3 成功指标
| 指标 | 基线 | 目标 | 当前 |
|------|------|------|------|
| 连接成功率 | 70% | 99% | 98% |
| 平均延迟 | 500ms | 100ms | 120ms |
| 重连时间 | 10s | 2s | 1.5s |
---
## 五、实际效果
### 5.1 已实现功能
- [x] WebSocket 连接管理
- [x] REST API 降级
- [x] Ed25519 设备认证
- [x] JWT Token 支持
- [x] URL 候选解析
- [x] 流式事件处理
- [x] 请求重试机制
- [x] 超时和取消
### 5.2 测试覆盖
- **单元测试**: 15+ 项
- **集成测试**: gatewayStore.test.ts
- **覆盖率**: ~85%
### 5.3 已知问题
| 问题 | 严重程度 | 状态 | 计划解决 |
|------|---------|------|---------|
| 无重大问题 | - | - | - |
### 5.4 用户反馈
连接稳定性好,流式响应体验流畅。
---
## 六、演化路线
### 6.1 短期计划1-2 周)
- [ ] 优化重连策略,添加指数退避
### 6.2 中期计划1-2 月)
- [ ] 支持多 Gateway 负载均衡
### 6.3 长期愿景
- [ ] 支持分布式 Gateway 集群
---
## 七、头脑风暴笔记
### 7.1 待讨论问题
1. 是否需要支持 gRPC 协议?
2. 离线模式如何处理?
### 7.2 创意想法
- 智能协议选择:根据网络条件自动选择 WebSocket/REST
- 连接池管理:复用连接,减少握手开销
### 7.3 风险与挑战
- **技术风险**: WebSocket 兼容性问题
- **缓解措施**: REST 降级兜底