1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//! IM 通道集成模块
//!
//! 此模块分成两层:
//! - `echo_integration::channels` 的直接 façade 重导出
//! - 根 crate 独有的 `AgentChannelHandler` 薄适配层,用于把 `ReactAgent`
//! 接到 IM channel 会话模型上
//!
//! 如需直接依赖拆分后的 crate,可使用 [`crate::workspace::integration::channels`]。
//!
//! # 能力继承
//!
//! 通过 `AgentChannelHandler` 创建的 Agent 自动继承框架的所有能力:
//! - 内置工具(think、memory、answer)
//! - 外部工具(MCP、Skill、web、media、data)
//! - 长期记忆(remember/recall/forget)
//! - 上下文压缩
//! - 护栏(Guard)
//! - 权限策略
//!
//! # 快速开始
//!
//! ```rust,no_run
//! use echo_agent::prelude::*;
//! use echo_agent::channels::*;
//! use std::sync::Arc;
//!
//! # async fn example() -> echo_agent::error::Result<()> {
//! // 1. 创建 ChannelManager
//! let mut manager = ChannelManager::new();
//!
//! // 2. 注册通道
//! manager.register(Box::new(QqChannel::new(QqConfig {
//! app_id: "your-app-id".into(),
//! client_secret: "your-secret".into(),
//! })?));
//!
//! // 3. 使用 AgentChannelHandler 自动桥接
//! let session_config = SessionConfig::default();
//! let handler_factory = |_channel_id: &str| -> Arc<dyn MessageHandler> {
//! Arc::new(SessionHandler::new(
//! session_config.clone(),
//! || -> Box<dyn MessageHandler> {
//! Box::new(AgentChannelHandler::from_config(
//! AgentConfig::standard("qwen3-max", "im-assistant", "你是一个友好的助手")
//! .enable_tool(true)
//! .enable_memory(true)
//! ))
//! },
//! ))
//! };
//!
//! // 4. 启动
//! for result in manager.start_all(handler_factory).await {
//! result?;
//! }
//! # Ok(())
//! # }
//! ```
/// Direct re-exports from `echo_integration::channels`.
pub use *;
use crateAgent;
use crateReactAgent;
use crateAgentConfig;
use async_trait;
use Arc;
use Mutex;
/// 基于 ReactAgent 的 IM 消息处理器
///
/// 将 IM 通道的消息转发给 ReactAgent 处理,自动继承框架的全部能力
/// (工具、记忆、MCP、Skills、压缩、护栏等)。
///
/// 每个用户会话(由 `SessionHandler` 管理)持有独立的 `AgentChannelHandler`,
/// 确保对话隔离。