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> {
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<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() {
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(())
}