diff --git a/src/agent/tools/memory.rs b/src/agent/tools/memory.rs index 5873dc6..c74481c 100644 --- a/src/agent/tools/memory.rs +++ b/src/agent/tools/memory.rs @@ -228,11 +228,16 @@ pub fn journal_tools() -> [super::Tool; 3] { async fn render(args: &serde_json::Value) -> Result { let key = get_str(args, "key")?; + let raw = args.get("raw").and_then(|v| v.as_bool()).unwrap_or(false); 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()) + let node = MemoryNode::from_store(&store, key) + .ok_or_else(|| anyhow::anyhow!("node not found: {}", key))?; + if raw { + Ok(node.content) + } else { + Ok(node.render()) + } } async fn write(agent: &Option>, args: &serde_json::Value) -> Result { diff --git a/src/cli/node.rs b/src/cli/node.rs index 35677a9..1a0ec20 100644 --- a/src/cli/node.rs +++ b/src/cli/node.rs @@ -225,13 +225,13 @@ pub fn cmd_edit(key: &[String]) -> Result<(), String> { if key.is_empty() { return Err("edit requires a key".into()); } - let raw_key = key.join(" "); - let store = store::Store::load()?; - let key = store.resolve_key(&raw_key).unwrap_or(raw_key.clone()); + let key = key.join(" "); - let content = store.nodes.get(&key) - .map(|n| n.content.clone()) - .unwrap_or_default(); + // Get raw content via RPC + let content = crate::mcp_server::memory_rpc( + "memory_render", + serde_json::json!({"key": key, "raw": true}), + ).unwrap_or_default(); let tmp = std::env::temp_dir().join(format!("poc-memory-edit-{}.md", key.replace('/', "_"))); std::fs::write(&tmp, &content) @@ -261,17 +261,12 @@ pub fn cmd_edit(key: &[String]) -> Result<(), String> { return Err("Content is empty, aborting".into()); } - drop(store); - let mut store = store::Store::load()?; - let result = store.upsert(&key, &new_content)?; - match result { - "unchanged" => println!("No change: '{}'", key), - "updated" => println!("Updated '{}' (v{})", key, store.nodes[&key].version), - _ => println!("Created '{}'", key), - } - if result != "unchanged" { - store.save()?; - } + super::check_dry_run(); + let result = crate::mcp_server::memory_rpc( + "memory_write", + serde_json::json!({"key": key, "content": new_content}), + ).map_err(|e| e.to_string())?; + println!("{}", result); Ok(()) }