cli: convert cmd_edit to use memory_rpc

Add raw parameter to memory_render for getting content without
links footer. cmd_edit now uses memory_render(raw=true) to read
and memory_write to save.

Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
Kent Overstreet 2026-04-12 22:18:28 -04:00
parent 366b17163d
commit 4b4271f618
2 changed files with 20 additions and 20 deletions

View file

@ -228,11 +228,16 @@ pub fn journal_tools() -> [super::Tool; 3] {
async fn render(args: &serde_json::Value) -> Result<String> { async fn render(args: &serde_json::Value) -> Result<String> {
let key = get_str(args, "key")?; 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 arc = cached_store().await?;
let store = arc.lock().await; let store = arc.lock().await;
Ok(MemoryNode::from_store(&store, key) let node = MemoryNode::from_store(&store, key)
.ok_or_else(|| anyhow::anyhow!("node not found: {}", key))? .ok_or_else(|| anyhow::anyhow!("node not found: {}", key))?;
.render()) if raw {
Ok(node.content)
} else {
Ok(node.render())
}
} }
async fn write(agent: &Option<std::sync::Arc<crate::agent::Agent>>, args: &serde_json::Value) -> Result<String> { async fn write(agent: &Option<std::sync::Arc<crate::agent::Agent>>, args: &serde_json::Value) -> Result<String> {

View file

@ -225,13 +225,13 @@ pub fn cmd_edit(key: &[String]) -> Result<(), String> {
if key.is_empty() { if key.is_empty() {
return Err("edit requires a key".into()); return Err("edit requires a key".into());
} }
let raw_key = key.join(" "); let key = key.join(" ");
let store = store::Store::load()?;
let key = store.resolve_key(&raw_key).unwrap_or(raw_key.clone());
let content = store.nodes.get(&key) // Get raw content via RPC
.map(|n| n.content.clone()) let content = crate::mcp_server::memory_rpc(
.unwrap_or_default(); "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('/', "_"))); let tmp = std::env::temp_dir().join(format!("poc-memory-edit-{}.md", key.replace('/', "_")));
std::fs::write(&tmp, &content) std::fs::write(&tmp, &content)
@ -261,17 +261,12 @@ pub fn cmd_edit(key: &[String]) -> Result<(), String> {
return Err("Content is empty, aborting".into()); return Err("Content is empty, aborting".into());
} }
drop(store); super::check_dry_run();
let mut store = store::Store::load()?; let result = crate::mcp_server::memory_rpc(
let result = store.upsert(&key, &new_content)?; "memory_write",
match result { serde_json::json!({"key": key, "content": new_content}),
"unchanged" => println!("No change: '{}'", key), ).map_err(|e| e.to_string())?;
"updated" => println!("Updated '{}' (v{})", key, store.nodes[&key].version), println!("{}", result);
_ => println!("Created '{}'", key),
}
if result != "unchanged" {
store.save()?;
}
Ok(()) Ok(())
} }