agent_context/context/events/outbound.rs
1//! AgentContext → 请求者的通知消息。
2//!
3//! 这些消息由 `AgentContext` Actor 发出,通知变更订阅者或压缩结果订阅者。
4
5use crate::role::Role;
6
7// ---------------------------------------------------------------------------
8// NotifyChange
9// ---------------------------------------------------------------------------
10
11/// incremental 区的变更通知,通过 [`RequestSubscribeChange`](super::subscribe::RequestSubscribeChange) 注册的订阅者接收。
12#[derive(Debug, Clone)]
13pub enum NotifyChange<M> {
14 /// 追加了一条消息
15 Appended(M),
16 /// 更新了指定索引的消息,同时给出旧值和新值
17 Updated {
18 /// incremental 区索引
19 index: usize,
20 /// 旧消息
21 old: M,
22 /// 新消息
23 new: M,
24 },
25 /// 在指定索引插入了消息
26 Inserted {
27 /// incremental 区索引
28 index: usize,
29 /// 插入的消息
30 message: M,
31 },
32 /// 移除了指定索引的消息
33 Removed {
34 /// incremental 区索引
35 index: usize,
36 /// 被移除的消息
37 message: M,
38 },
39 /// 弹出了最后一条消息
40 Popped(M),
41 /// 按角色保留,其余消息被移除
42 Retained {
43 /// 保留的角色
44 role: Role,
45 /// 被移除的消息列表
46 removed: Vec<M>,
47 },
48 /// 清空了整个 incremental 区
49 Cleared {
50 /// 被清空的所有消息
51 removed: Vec<M>,
52 },
53}
54
55// ---------------------------------------------------------------------------
56// NotifyCompressedForReply
57// ---------------------------------------------------------------------------
58
59/// 压缩完成通知,通过 [`RequestSubscribeCompressed`](super::subscribe::RequestSubscribeCompressed) 注册的订阅者处理。
60///
61/// `AgentContext` 压缩完成后将摘要和保留消息发送给订阅者,
62/// 订阅者返回修改后的 `(摘要, 保留)` 对,`AgentContext` 再写入对应区域。
63#[derive(Debug, Clone)]
64pub struct NotifyCompressedForReply<M> {
65 /// LLM 生成的摘要消息
66 pub summary: Vec<M>,
67 /// 保留的最近消息
68 pub kept: Vec<M>,
69}