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:
parent
366b17163d
commit
4b4271f618
2 changed files with 20 additions and 20 deletions
|
|
@ -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> {
|
||||||
|
|
|
||||||
|
|
@ -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(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue