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 <poc@bcachefs.org>
This commit is contained in:
ProofOfConcept 2026-04-10 15:22:18 -04:00 committed by Kent Overstreet
parent aade8a9cce
commit be6ac762f6

View file

@ -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<String> {
async fn render(args: &serde_json::Value) -> Result<String> {
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())
}