Skip to content

Latest commit

 

History

History
451 lines (353 loc) · 14 KB

File metadata and controls

451 lines (353 loc) · 14 KB

GraphMeeting 逻辑设计审查报告

1. 设计目标回顾

1.1 核心架构

┌─────────────────────────────────────────────────────────────┐
│                      GraphMeeting 架构                       │
├─────────────────────────────────────────────────────────────┤
│  Flutter UI Layer                                           │
│  ├─ Chat UI (独白输入)                                       │
│  ├─ VineCanvas (3D 画布)                                    │
│  └─ ViewportControls (视角控制)                              │
├─────────────────────────────────────────────────────────────┤
│  EventBus (Dart Stream) ←── 新增,连接 UI 和 Core           │
├─────────────────────────────────────────────────────────────┤
│  Dart Core Layer                                            │
│  ├─ VineLayoutEngine (螺旋柱布局)                            │
│  ├─ TopologyAnalyzer (分叉/合并检测)                         │
│  └─ ConnectionManager (网络管理)                             │
├─────────────────────────────────────────────────────────────┤
│  FFI Bridge (flutter_rust_bridge)                           │
├─────────────────────────────────────────────────────────────┤
│  Rust Core Layer                                            │
│  ├─ compute_helix_position (坐标计算)                        │
│  ├─ analyze_content_type (内容分析)                          │
│  └─ detect_consensus (共识检测)                              │
└─────────────────────────────────────────────────────────────┘

1.2 关键设计原则

  • 零同时在线:完全异步,单向录制
  • 非线性结构:3D 藤蔓图,分叉/合并可视化
  • AI 自动结晶:关键节点生成叶子(总结/Todo)
  • 权限可控:服主管理可见范围
  • 百人规模:局域网 P2P + 远端服务器

2. 核心流程图

2.1 消息提交流程(已修复)

sequenceDiagram
    participant User as 用户
    participant Chat as ChatInputBar
    participant EventBus as EventBus
    participant VineCanvas as VineCanvas
    participant LayoutEngine as VineLayoutEngine
    participant Rust as Rust Core

    User->>Chat: 输入文字/录音
    Chat->>Chat: 创建 SoliloquyMessage
    Chat->>EventBus: submitMessage(msg)
    
    EventBus->>VineCanvas: onMessageSubmit
    VineCanvas->>VineCanvas: 转换为 MessageSource
    
    VineCanvas->>LayoutEngine: computeLayout(messages)
    LayoutEngine->>LayoutEngine: _computeHelixPosition()
    
    alt 需要高性能计算
        LayoutEngine->>Rust: compute_helix_position()
        Rust-->>LayoutEngine: [x, y, z]
    end
    
    LayoutEngine->>LayoutEngine: detectBranchesAndMerges()
    LayoutEngine->>LayoutEngine: _generateLeaves()
    LayoutEngine-->>VineCanvas: List<VineNode>
    
    VineCanvas->>VineCanvas: setState() 触发重绘
    VineCanvas->>VineCanvas: CustomPainter 渲染
    User-->>VineCanvas: 看到新节点生成
Loading

2.2 螺旋柱布局算法流程

flowchart TD
    A[输入: 消息列表] --> B[按时间排序]
    B --> C[分配参与者轨道]
    
    C --> D[对每个消息]
    D --> E{计算坐标}
    
    E --> F[时间角度: timeAngle = time / 10s * 2π]
    E --> G[参与者角度: participantAngle = lane / total * 2π]
    E --> H[总角度: θ = timeAngle + participantAngle]
    
    H --> I[动态半径: r = baseRadius + time * 2]
    I --> J[X = cos(θ) * r]
    I --> K[Z = sin(θ) * r]
    I --> L[Y = -time * timeScale]
    
    J --> M[创建 SpaceTimePoint]
    K --> M
    L --> M
    
    M --> N[检测节点类型]
    N --> O{类型判断}
    O -->|决策关键词| P[NodeType.milestone]
    O -->|引用旧消息| Q[NodeType.branch]
    O -->|其他| R[NodeType.message]
    
    P --> S[生成 AI 叶子]
    Q --> S
    R --> S
    
    S --> T[返回 VineNode 列表]
Loading

2.3 3D 渲染流程

flowchart LR
    A[VineCanvas] --> B[CustomPaint]
    B --> C[ChronoVinePainter]
    
    C --> D[按 Z 深度排序]
    D --> E[对每个节点]
    
    E --> F[Viewport3D.project]
    F --> G[3D → 2D 投影]
    
    G --> H[绘制藤蔓段]
    H --> I[贝塞尔曲线连接父节点]
    
    G --> J[绘制节点]
    J --> K[发光效果]
    K --> L[状态指示器]
    
    G --> M[绘制叶子]
    M --> N[悬浮动画]
    N --> O[关联度大小]
Loading

2.4 事件总线流程

flowchart TB
    subgraph EventBus["全局事件总线 (Singleton)"]
        E1[_messageController]
        E2[_nodeSelectController]
        E3[_replyController]
    end
    
    subgraph ChatUI["Chat UI 层"]
        C1[ChatInputBar]
        C2[MessageBubble]
    end
    
    subgraph CanvasUI["3D Canvas 层"]
        V1[VineCanvas]
        V2[Node 点击检测]
    end
    
    C1 -->|submitMessage| E1
    E1 -->|onMessageSubmit| V1
    
    V2 -->|selectNode| E2
    E2 -->|onNodeSelect| C2
    
    V2 -->|replyTo| E3
    E3 -->|onReply| C1
    
    style EventBus fill:#f9f,stroke:#333,stroke-width:4px
Loading

2.5 手势交互流程

flowchart TD
    A[用户手势] --> B{手势类型}
    
    B -->|单指水平拖拽| C[旋转视角 Y 轴]
    B -->|单指垂直拖拽| D[时间轴滚动]
    B -->|双指捏合| E[缩放 zoom]
    B -->|双击| F[聚焦节点/重置]
    B -->|长按| G[显示操作菜单]
    
    C --> H[Viewport3D.rotate]
    D --> I[Viewport3D.focusTo]
    E --> J[Viewport3D.zoomBy]
    F --> K[动画过渡]
    G --> L[回调 onNodeLongPress]
    
    H --> M[触发重绘 setState]
    I --> M
    J --> M
    K --> M
Loading

2.6 设计目标 vs 实际实现:网络同步

设计目标流程

sequenceDiagram
    participant A as 用户 A
    participant LocalA as 本地 CRDT
    participant Server as 服务器
    participant LocalB as 本地 CRDT
    participant B as 用户 B

    A->>LocalA: 提交消息
    LocalA->>LocalA: CRDT 更新
    LocalA->>Server: WebSocket 发送
    
    Server->>Server: 权限检查
    Server->>Server: AOI 过滤
    
    Server->>LocalB: 广播更新
    LocalB->>LocalB: CRDT 合并
    LocalB-->>B: UI 更新
Loading

当前实现

sequenceDiagram
    participant A as 用户 A
    participant EventBus as EventBus
    participant Canvas as VineCanvas
    participant ConnMgr as ConnectionManager

    A->>EventBus: 提交消息
    EventBus->>Canvas: 本地更新
    
    Note over ConnMgr: WebSocket 框架存在
    Note over ConnMgr: 但未实现消息处理
    
    Canvas-->>A: 显示节点
Loading

状态: ⚠️ 单机演示可用,网络同步待实现


3. 代码逻辑详细审查

3.1 数据模型层 ✅ 完整

组件 文件 状态 关键字段
时空坐标 space_time_axis.dart timestamp, participantId, threadDepth, layoutPosition
藤蔓节点 vine_node.dart 5 种 nodeType, parentId, branchIds, mergeTargetId
AI 叶子 leaf_attachment.dart 6 种 leafType, todos, relevanceScore
拓扑关系 vine_topology.dart 路径计算、祖先/后代查询
权限系统 role_permissions.dart 6 角色 + 11 种权限
世界设置 world_settings.dart 语音/网络/AI 配置

3.2 核心算法层 ✅ 已修复

螺旋柱坐标计算(修复后)

// lib/services/chrono_vine/vine_layout_engine.dart
SpaceTimePoint _computeHelixPosition({
  required MessageSource msg,
  required int laneIndex,
  required int totalLanes,
  required DateTime startTime,
}) {
  // 时间差(秒)
  final timeDiff = msg.timestamp.difference(startTime);
  final timeSeconds = timeDiff.inMilliseconds / 1000.0;
  
  // Y轴:时间向上(负值表示屏幕上方)
  final timeY = -timeSeconds * timeScale;
  
  // 螺旋角度:基于时间 + 参与者偏移
  final timeAngle = (timeSeconds / 10) * 2 * pi; // 每10秒转一圈
  final participantAngle = totalLanes > 0 
    ? (laneIndex / totalLanes) * 2 * pi 
    : 0.0;
  final totalAngle = timeAngle + participantAngle;
  
  // 动态半径(随时间略微扩展)
  final dynamicRadius = radius + (timeSeconds * 2);
  
  // XZ平面:环绕螺旋柱
  final x = cos(totalAngle) * dynamicRadius;
  final z = sin(totalAngle) * dynamicRadius;
  
  return SpaceTimePoint(
    timestamp: msg.timestamp,
    participantId: msg.authorId,
    threadDepth: threadDepth,
    layoutPosition: Offset3D(x: x, y: timeY, z: finalZ),
  );
}

验证:

  • ✅ 时间轴 Y 正确(向上为负)
  • ✅ 螺旋角度包含时间和参与者分量
  • ✅ 半径随时间动态扩展
  • ✅ 参与者均匀分布在 360°

3.3 网络层 ⚠️ 框架存在,实现待完善

功能 文件 状态 备注
连接管理 connection_manager.dart WebSocket + 延迟检测
离线队列 offline_queue.dart 消息缓存
权限过滤 NetworkManager 未实现
P2P 发现 Rust network/mod.rs mDNS 未实现
CRDT 同步 - 完全缺失

3.4 UI 层 ✅ 基本完整

组件 文件 状态 功能
藤蔓画布 vine_canvas.dart 手势、渲染、动画
Chat 输入 chat_input_bar.dart 文字/语音/附件
视角控制 viewport_controls.dart 旋转/缩放/模式
叶子详情 leaf_detail_panel.dart Todo 交互
世界列表 world_list_screen.dart Minecraft 风格
管理面板 world_admin_screen.dart 权限/设置

3.5 Rust 核心 ⚠️ 简化但可用

模块 文件 状态 FFI 导出
节点定义 world/node.rs 未导出(复杂类型)
布局引擎 world/layout.rs compute_helix_position
Avatar avatar/mod.rs 未导出
回放 world/replay.rs 未导出
AI ai/mod.rs ⚠️ analyze_content_type
网络 network/mod.rs 空壳

当前 FFI 导出函数:

// rust/src/lib.rs
pub fn init_logging()                           // 初始化日志
pub fn get_core_version() -> String             // 获取版本
pub fn compute_helix_position(...) -> [f32; 3]  // 螺旋柱坐标
pub fn analyze_content_type(String) -> i32      // 内容分析
pub fn detect_consensus(Vec<String>) -> i32     // 共识检测
pub fn get_decision_keywords() -> Vec<String>   // 决策关键词
pub fn get_contention_keywords() -> Vec<String> // 争议关键词
pub fn ping() -> String                         // 测试

4. 逻辑完整性评分(修复后)

模块 设计完整度 代码实现度 差距
数据模型 100% 95% 5%
核心算法 100% 85% 15%
网络同步 100% 30% 70%
UI 交互 100% 90% 10%
Rust 核心 100% 60% 40%
整体 100% 72% 28%

5. 关键缺失清单

5.1 必须实现(MVP 阻塞)

  1. ⚠️ CRDT 状态同步 - 多人协作的基础
  2. ⚠️ 语音转文字集成 - Whisper 接入
  3. ⚠️ 网络消息处理 - WebSocket 实际传输

5.2 重要但可延后

  1. mDNS 局域网发现
  2. AI 叶子实时生成(当前是规则匹配)
  3. 回放系统
  4. 导出功能

5.3 已知问题

  1. FFI 生成有警告(不影响运行)
  2. 复杂 Rust 类型未导出(VineNode, Room 等)
  3. 延迟检测逻辑未完整测试

6. 启动验证

6.1 构建状态

# Dart 代码
$ flutter analyze
# 0 errors ✓

# Rust 代码  
$ cd rust && cargo build --release
# 0 errors ✓

# FFI bridge
$ flutter_rust_bridge_codegen generate
# Done ✓

6.2 运行命令

# 快速启动(Debug 模式,支持 Hot Reload)
flutter run -d macos

# 完整构建(Release 模式)
flutter build macos

7. 文件清单

7.1 核心文件

路径 说明
lib/core/event_bus.dart 全局事件总线(新增)
lib/services/chrono_vine/vine_layout_engine.dart 螺旋柱布局(修复)
lib/services/chrono_vine/topology_analyzer.dart 分叉/合并检测
lib/services/network/connection_manager.dart 网络连接管理
lib/ui/widgets/vine_canvas.dart 3D 画布
lib/ui/widgets/chat/chat_input_bar.dart 独白输入
rust/src/lib.rs FFI 导出(简化)

7.2 文档

路径 说明
AGENTS.md 项目架构设计
logicdesign.md 本文件:逻辑审查与流程图

8. 结论

项目状态:✅ 框架完整,核心逻辑已修复,可运行演示

已实现

  1. ✅ 完整的数据模型(时序藤蔓)
  2. ✅ 3D 螺旋柱布局算法(已修复 helix 计算)
  3. ✅ Chat UI + 3D 视图联动(EventBus)
  4. ✅ Rust FFI 核心计算(简化但可用)
  5. ✅ 权限系统
  6. ✅ 网络框架

待完善

  1. ⚠️ 实时网络同步(CRDT)
  2. ⚠️ AI 叶子实时生成(接入 LLM)
  3. ⚠️ 语音转文字集成
  4. ⚠️ 回放系统

下一步建议: 运行 flutter run -d macos 验证单机演示版本,然后逐步接入网络同步。


最后更新:2026-02-06 审查人:Kimi Code CLI