# 架构审查报告 > 生成时间: 2026-04-26 > 更新时间: 2026-04-26 ## 审查摘要 本报告识别了当前代码库中的架构不合理、冗余和无效代码的问题。 --- ## 问题清单 ### 已修复 #### ✅ #1 OutboundDispatcher 重复维护 Channel 注册表 **修复方案**: `OutboundDispatcher` 现在从 `ChannelManager` 获取 channels,而不是自己维护一份注册表。 **修改文件**: - `src/bus/dispatcher.rs` - 移除 `channels` 字段,改用 `ChannelManager` - `src/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** |