agentic_memory_mcp/session/
transaction.rs1use super::manager::SessionManager;
4use crate::types::McpResult;
5use agentic_memory::{CognitiveEvent, Edge, WriteEngine};
6
7pub struct Transaction<'a> {
9 session: &'a mut SessionManager,
10 events: Vec<CognitiveEvent>,
11 edges: Vec<Edge>,
12}
13
14impl<'a> Transaction<'a> {
15 pub fn new(session: &'a mut SessionManager) -> Self {
17 Self {
18 session,
19 events: Vec::new(),
20 edges: Vec::new(),
21 }
22 }
23
24 pub fn add_node(&mut self, event: CognitiveEvent) -> &mut Self {
26 self.events.push(event);
27 self
28 }
29
30 pub fn add_edge(&mut self, edge: Edge) -> &mut Self {
32 self.edges.push(edge);
33 self
34 }
35
36 pub fn commit(self) -> McpResult<Vec<u64>> {
38 let dimension = self.session.graph().dimension();
39 let write_engine = WriteEngine::new(dimension);
40
41 let result = write_engine
42 .ingest(self.session.graph_mut(), self.events, self.edges)
43 .map_err(|e| {
44 crate::types::McpError::AgenticMemory(format!("Transaction commit failed: {e}"))
45 })?;
46
47 self.session.mark_dirty();
48 self.session.save()?;
49
50 Ok(result.new_node_ids)
51 }
52}