agent-context 0.1.4

Multi-backend agent context manager with three-zone memory model
Documentation
//! AgentContext → 请求者的通知消息。
//!
//! 这些消息由 `AgentContext` Actor 发出,通知变更订阅者或压缩结果订阅者。

use crate::role::Role;

// ---------------------------------------------------------------------------
// NotifyChange
// ---------------------------------------------------------------------------

/// incremental 区的变更通知,通过 [`RequestSubscribeChange`](super::subscribe::RequestSubscribeChange) 注册的订阅者接收。
#[derive(Debug, Clone)]
pub enum NotifyChange<M> {
    /// 追加了一条消息
    Appended(M),
    /// 更新了指定索引的消息,同时给出旧值和新值
    Updated {
        /// incremental 区索引
        index: usize,
        /// 旧消息
        old: M,
        /// 新消息
        new: M,
    },
    /// 在指定索引插入了消息
    Inserted {
        /// incremental 区索引
        index: usize,
        /// 插入的消息
        message: M,
    },
    /// 移除了指定索引的消息
    Removed {
        /// incremental 区索引
        index: usize,
        /// 被移除的消息
        message: M,
    },
    /// 弹出了最后一条消息
    Popped(M),
    /// 按角色保留,其余消息被移除
    Retained {
        /// 保留的角色
        role: Role,
        /// 被移除的消息列表
        removed: Vec<M>,
    },
    /// 清空了整个 incremental 区
    Cleared {
        /// 被清空的所有消息
        removed: Vec<M>,
    },
    /// 从 JSONL 批量加载消息替换了 incremental 区
    Loaded {
        /// 加载的消息列表
        messages: Vec<M>,
    },
}

// ---------------------------------------------------------------------------
// NotifyCompressedForReply
// ---------------------------------------------------------------------------

/// 压缩完成通知,通过 [`RequestSubscribeCompressed`](super::subscribe::RequestSubscribeCompressed) 注册的订阅者处理。
///
/// `AgentContext` 压缩完成后将摘要和保留消息发送给订阅者,
/// 订阅者返回修改后的 `(摘要, 保留)` 对,`AgentContext` 再写入对应区域。
#[derive(Debug, Clone)]
pub struct NotifyCompressedForReply<M> {
    /// LLM 生成的摘要消息
    pub summary: Vec<M>,
    /// 保留的最近消息
    pub kept: Vec<M>,
}