From be6ac762f63680061af85c20fcaecaa8bfc2efd6 Mon Sep 17 00:00:00 2001 From: ProofOfConcept Date: Fri, 10 Apr 2026 15:22:18 -0400 Subject: [PATCH] memory_render: use cached store instead of loading from disk each call MemoryNode::load() was calling Store::load() on every render, hitting disk each time. Use cached_store() + MemoryNode::from_store() so repeated renders (4 per agent template) share the cached store. Co-Authored-By: Proof of Concept --- src/agent/tools/memory.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/agent/tools/memory.rs b/src/agent/tools/memory.rs index 5c34a1b..dc6f2fa 100644 --- a/src/agent/tools/memory.rs +++ b/src/agent/tools/memory.rs @@ -38,7 +38,7 @@ pub fn memory_tools() -> [super::Tool; 11] { [ Tool { name: "memory_render", description: "Read a memory node's content and links.", parameters_json: r#"{"type":"object","properties":{"key":{"type":"string","description":"Node key"}},"required":["key"]}"#, - handler: Arc::new(|_a, v| Box::pin(async move { render(&v) })) }, + handler: Arc::new(|_a, v| Box::pin(async move { render(&v).await })) }, Tool { name: "memory_write", description: "Create or update a memory node.", parameters_json: r#"{"type":"object","properties":{"key":{"type":"string","description":"Node key"},"content":{"type":"string","description":"Full content (markdown)"}},"required":["key","content"]}"#, handler: Arc::new(|a, v| Box::pin(async move { write(&a, &v).await })) }, @@ -89,9 +89,11 @@ pub fn journal_tools() -> [super::Tool; 3] { // ── Memory tools ─────────────────────────────────────────────── -fn render(args: &serde_json::Value) -> Result { +async fn render(args: &serde_json::Value) -> Result { let key = get_str(args, "key")?; - Ok(MemoryNode::load(key) + let arc = cached_store().await?; + let store = arc.lock().await; + Ok(MemoryNode::from_store(&store, key) .ok_or_else(|| anyhow::anyhow!("node not found: {}", key))? .render()) }