# F-260620-01 跨端 AI Chat:微信小程序 ↔ Rust 云后端 ↔ DevFlow 桌面端实时同步 > 创建:2026-06-20 | 状态:📐 设计草案(灵感 4495fbcd 待晋升 + 任务 6c816709 todo) > 上级索引:[../INDEX.md](../INDEX.md) ## 一、目标 微信小程序**远程**使用 DevFlow AI Chat(发送/停止/重新生成/审批/切换对话),体验与桌面端一致。桌面端与小程序打开同一对话时**双向实时同步**(类似微信电脑端 + 手机端同时在线)。 ## 二、架构(三层,穿 NAT) ``` 微信小程序(df-miniapp) ◄──WSS──► Rust 云后端(df-relay) ◄──WS 出站长连接──► 本地 DevFlow(df-tunnel) 前端 UI(复用 AI Chat) axum WS 中继/广播 AI 对话引擎(现有) ``` 桌面端**出站**连云(穿 NAT,无需端口映射/公网 IP),云后端中继小程序 ↔ 桌面端。 ### Layer 1:本地 DevFlow 桌面端 — `df-tunnel`(WS Client + 事件桥接) - **新建** `crates/df-tunnel/`:内嵌 tokio-tungstenite WS client - DevFlow 启动后主动连云后端 `wss://your-server/ws/device`(出站穿 NAT) - **事件桥接**:在 `app.emit("ai-chat-event", ...)` 的同时,clone event 推 WS 隧道 - **指令路由**:收到云后端发来的操作指令(send/stop/approve/regenerate/switch),调对应 Tauri command 逻辑 - **配对绑定**:桌面端首次配置云后端地址 + token,持久化 Settings KV ### Layer 2:云后端 — `df-relay`(Rust axum WS Server + 广播中继) - **新建** `crates/df-relay/`(axum + tokio-tungstenite) - WS Server 接受两类连接:小程序(device_id 鉴权)+ 桌面端(token 配对) - 广播中继:小程序操作 → 桌面端;桌面端事件 → 小程序 - 无业务逻辑(纯转发,保持轻量) ### Layer 3:微信小程序 — `df-miniapp`(前端 UI) - 微信小程序前端(复用桌面 AI Chat 逻辑/样式,适配小程序框架) - WSS 连云后端 - 远程操作映射到桌面端 Tauri command ## 三、技术选型:Rust 云后端(非 Go/Node) 灵感 4495fbcd(技术选型论证,score 60)核心命题:**Rust 云后端最大化代码复用 + 类型一致**。 1. **代码复用矩阵**:DevFlow 现有 10 Rust crate(df-storage/df-ai/df-ai-core/df-workflow/df-nodes/df-execute/df-ideas/df-types/df-mcp/df-project),云后端用 Rust 可直接 path 引用,零适配。Go 需全部重写或 FFI 桥接。 2. **类型系统一致性(最被低估)**:AiChatEvent 17 变体 + ChatMessage 10+ 字段 + 工具调用嵌套 JSON。两端同语言 → 编译时类型一致保证。跨语言 → 手动同步镜像类型 → 必然遗漏 → 运行时消息丢失。 3. **团队版演进路径**:云后端复用 df-types/df-ai-...,为「单机版 → 团队版」铺路(阶段2 云后端承载多用户/协作)。 ## 四、关键设计点(待定) | 维度 | 选项 | 待决策 | |---|---|---| | **同步粒度** | 事件流透传(ai-chat-event 经隧道)vs 状态同步(全量 messages) | 倾向事件流(增量,带宽低) | | **冲突处理** | 两端同时发消息/审批 | 时间戳 + 桌面端为真相源(AI 引擎在桌面) | | **安全** | token 配对 + WSS + 指令鉴权 | 必须(device_id + token 双因子) | | **离线** | 桌面端离线时小程序降级 | 提示"桌面端未连接"+ 缓存指令待重连 | | **部署** | df-relay 部署阿里云(ECS/容器) | 待定(成本/运维) | ## 五、关系链 - **灵感 4495fbcd**:跨端控制技术选型论证(score 60,pending_review,待晋升) - **任务 6c816709**:跨端 AI Chat 实现(todo,priority 1) ## 六、实施分阶段(待 todo 规划) | Phase | 内容 | 依赖 | |---|---|---| | **P1** | L2 df-relay 云后端(axum WS Server 基础 + 广播中继 + 鉴权) | 无 | | **P2** | L1 df-tunnel 桌面端(WS client + 事件桥接 + 指令路由 + 配对绑定) | P1 | | **P3** | L3 df-miniapp 小程序(前端 UI + WSS 连云) | P1/P2 | | **P4** | 双向同步完善(冲突 + 安全 + 离线 + 部署) | P1/P2/P3 | ## 七、与现有架构关系 - **df-mcp**(已做):对外 stdio 暴露数据层(本地)。跨端是**远程**(WS 隧道)。互补。 - **F-09 多会话**(已做):conv_id 路由。跨端事件透传复用 conv_id。 - **AiChatEvent 17 变体**(现有):跨端透传的事件契约(两端同类型,Rust 优势)。 > 待决策:晋升灵感 4495fbcd → 启动 P1?或暂缓(单机版稳定后再跨端)?