agent-context 0.1.0

Multi-backend agent context manager with three-zone memory model
Documentation
//! 变更事件与压缩策略。
//!
//! [`ChangeEvent`] 用于 `on_change` 回调通知 incremental 区的消息变动。
//! [`CompressStrategy`] 定义上下文压缩的策略选项。

use crate::role::Role;

// ---------------------------------------------------------------------------
// ChangeEvent
// ---------------------------------------------------------------------------

/// incremental 区的变更事件,通过 [`with_on_change`](crate::AgentContext::with_on_change) 回调发送。
#[derive(Debug, Clone)]
pub enum ChangeEvent<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>,
    },
}

// ---------------------------------------------------------------------------
// CompressStrategy
// ---------------------------------------------------------------------------

/// 上下文压缩策略。
#[derive(Debug, Clone)]
pub enum CompressStrategy {
    /// 摘要压缩:保留最近 `keep` 条,将更早的消息交由后端 LLM 生成摘要存入 compressed 区。
    Summarize {
        /// 保留的最新消息条数
        keep: usize,
        /// 自定义摘要提示词,`None` 时使用内置默认提示词
        prompt: Option<String>,
    },
}