Files
Genarrative/server-rs/crates/platform-agent-harness/src/memory.rs
T
kdletters d7f0c45164
Project CI / Repository checks (push) Successful in 1m3s
Project CI / Frontend tests (push) Successful in 1m59s
Project CI / Native shell tests (push) Successful in 2m27s
Project CI / Backend tests (push) Successful in 3m5s
抽取画布 Agent 公共执行框架
新增业务中立的 function-calling harness 与公共提示词协议

统一画布 Agent 工具路由约束和待确认控制语义

保留失败前输出并事务化收口 memory、deadline 与取消状态

迁移画布 Agent 和 API 编排并同步架构文档与项目记忆
2026-07-28 21:34:34 +08:00

58 lines
1.7 KiB
Rust

//! Agent 对话记忆的最小公共抽象。
use serde::{Deserialize, Serialize};
pub trait AgentMemoryBuffer<Message>: Send + Sync {
fn get_memory(&self) -> &[Message];
fn append_message(&mut self, message: Message);
}
pub trait AgentMemory<Message>: AgentMemoryBuffer<Message> {
/// 创建与当前 memory 行为等价、但写入彼此隔离的本轮事务副本。
fn begin_staged(&self) -> Box<dyn StagedAgentMemory<Message>>;
}
pub trait StagedAgentMemory<Message>: AgentMemoryBuffer<Message> {
/// 显式提交本轮事务,并返回下一轮继续使用的 committed memory。
///
/// 持久化实现应在这里发布 staged 写入;直接 drop staged transaction 表示回滚。
fn commit(self: Box<Self>) -> Box<dyn AgentMemory<Message>>;
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VecMemory<Message> {
messages: Vec<Message>,
}
impl<Message> VecMemory<Message> {
pub fn new(messages: Vec<Message>) -> Self {
Self { messages }
}
pub fn into_inner(self) -> Vec<Message> {
self.messages
}
}
impl<Message: Send + Sync> AgentMemoryBuffer<Message> for VecMemory<Message> {
fn get_memory(&self) -> &[Message] {
&self.messages
}
fn append_message(&mut self, message: Message) {
self.messages.push(message);
}
}
impl<Message: Clone + Send + Sync + 'static> AgentMemory<Message> for VecMemory<Message> {
fn begin_staged(&self) -> Box<dyn StagedAgentMemory<Message>> {
Box::new(self.clone())
}
}
impl<Message: Clone + Send + Sync + 'static> StagedAgentMemory<Message> for VecMemory<Message> {
fn commit(self: Box<Self>) -> Box<dyn AgentMemory<Message>> {
self
}
}