- OutboundDispatcher 改用 ChannelManager 获取通道,不再维护独立注册表 - CliChatChannel 通过控制消息通道操作 SessionStore,移除独立引用 - MessageBus 统一通过 ChannelManager 创建,避免重复实例 - GatewayState 移除冗余字段,统一通过 ChannelManager 访问 - 新增 ControlInbound/ControlOutbound/ControlMessage 类型支持会话管理操作 - 添加 ARCHITECTURE_REVIEW.md 记录架构问题与修复状态
3.2 KiB
架构审查报告
生成时间: 2026-04-26 更新时间: 2026-04-26
审查摘要
本报告识别了当前代码库中的架构不合理、冗余和无效代码的问题。
问题清单
已修复
✅ #1 OutboundDispatcher 重复维护 Channel 注册表
修复方案: OutboundDispatcher 现在从 ChannelManager 获取 channels,而不是自己维护一份注册表。
修改文件:
src/bus/dispatcher.rs- 移除channels字段,改用ChannelManagersrc/channels/manager.rs- 添加register_channel方法src/gateway/mod.rs- 简化 dispatcher 初始化
✅ #2 CliChatChannel 持有独立的 SessionStore
修复方案: CliChatChannel 的 SessionStore 通过依赖注入从 ChannelManager 获取,而不是独立持有。
修改文件:
src/channels/cli_chat.rs- 添加set_store()方法src/channels/manager.rs- 添加cli_chat_channel字段src/gateway/mod.rs- 重构 channel 初始化流程
✅ #3 MessageBus 被创建两次引用
修复方案: 移除 GatewayState.bus 字段,直接使用 channel_manager.bus()。
修改文件:
src/gateway/mod.rs- 移除冗余的bus字段
✅ #4 GatewayState 同时持有 channel_manager 和 cli_chat_channel
修复方案: cli_chat_channel 只通过 ChannelManager 管理,GatewayState 不再单独持有。
修改文件:
src/gateway/mod.rs- 移除cli_chat_channel字段,添加cli_chat_channel()getter 方法
高优先级(待修复)
❌ Session 每次重建都创建新的 LLM Provider
文件: src/gateway/session.rs:349-361
问题: 每当 session TTL 过期(默认4小时),就会销毁并重建 session,同时创建新的 LLM provider 连接。
建议: Provider 应该池化复用,不随 session 销毁而重建。
❌ CliChatChannel::send 广播给所有客户端
文件: src/channels/cli_chat.rs:279-289
问题: OutboundMessage 有 chat_id 字段用于路由,但实现广播给所有客户端,而不是只发给对应 chat_id 的客户端。
建议: 根据 chat_id 过滤客户端,只发送给对应的客户端。
中优先级(待修复)
❌ default_tools() 每次调用创建新 ToolRegistry
文件: src/gateway/session.rs:212-227
建议: 如果工具列表是只读的,直接 clone Arc;如果需要修改,需要澄清设计意图。
低优先级(待修复)
❌ FeishuChannel::new 接收未使用的 provider_config
文件: src/channels/feishu.rs:175-178
❌ OutboundDispatcher::send_with_retry 永不执行的 unreachable
文件: src/bus/dispatcher.rs:81
❌ Channel trait 的 is_running 使用 std::sync::Mutex
文件: src/channels/base.rs:38 vs src/channels/cli_chat.rs:265-267
❌ LoopDetector 硬编码在 AgentLoop 中
文件: src/agent/agent_loop.rs:88-172
❌ InboundMessage 和 OutboundMessage 结构重复
文件: src/bus/message.rs
问题统计
| 状态 | 优先级 | 数量 |
|---|---|---|
| ✅ 已修复 | - | 4 |
| ❌ 待修复 | 高 | 2 |
| ❌ 待修复 | 中 | 1 |
| ❌ 待修复 | 低 | 5 |
| 总计 | - | 12 |