forked from kent/consciousness
kill cli/misc.rs
This commit is contained in:
parent
5a832b1d6c
commit
70097fa84b
6 changed files with 157 additions and 162 deletions
123
src/cli/node.rs
123
src/cli/node.rs
|
|
@ -156,3 +156,126 @@ pub fn cmd_edit(key: &[String]) -> Result<(), String> {
|
|||
println!("{}", result);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn cmd_search(keys: &[String]) -> Result<(), String> {
|
||||
if keys.is_empty() {
|
||||
return Err("search requires seed keys".into());
|
||||
}
|
||||
let result = crate::mcp_server::memory_rpc(
|
||||
"memory_search",
|
||||
serde_json::json!({"keys": keys}),
|
||||
).map_err(|e| e.to_string())?;
|
||||
print!("{}", result);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn cmd_query(expr: &[String]) -> Result<(), String> {
|
||||
if expr.is_empty() {
|
||||
return Err("query requires an expression (try: poc-memory query --help)".into());
|
||||
}
|
||||
|
||||
let query_str = expr.join(" ");
|
||||
let result = crate::mcp_server::memory_rpc(
|
||||
"memory_query",
|
||||
serde_json::json!({"query": query_str}),
|
||||
).map_err(|e| e.to_string())?;
|
||||
print!("{}", result);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Get group content via RPC (handles daemon or local fallback)
|
||||
pub fn get_group_content(group: &crate::config::ContextGroup, cfg: &crate::config::Config) -> Vec<(String, String)> {
|
||||
match group.source {
|
||||
crate::config::ContextSource::Journal => {
|
||||
// Query for recent journal entries
|
||||
let window: i64 = cfg.journal_days as i64 * 24 * 3600;
|
||||
let query = format!("all | type:episodic | age:<{} | sort:timestamp | limit:{}",
|
||||
window, cfg.journal_max);
|
||||
|
||||
let keys_str = match crate::mcp_server::memory_rpc(
|
||||
"memory_query",
|
||||
serde_json::json!({"query": query}),
|
||||
) {
|
||||
Ok(s) => s,
|
||||
Err(_) => return vec![],
|
||||
};
|
||||
|
||||
// Parse keys (one per line) and render each
|
||||
keys_str.lines()
|
||||
.filter(|k| !k.is_empty() && *k != "no results")
|
||||
.filter_map(|key| {
|
||||
let content = crate::mcp_server::memory_rpc(
|
||||
"memory_render",
|
||||
serde_json::json!({"key": key, "raw": true}),
|
||||
).ok()?;
|
||||
if content.trim().is_empty() { return None; }
|
||||
Some((key.to_string(), content))
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
crate::config::ContextSource::File => {
|
||||
group.keys.iter().filter_map(|key| {
|
||||
let content = std::fs::read_to_string(cfg.identity_dir.join(key)).ok()?;
|
||||
if content.trim().is_empty() { return None; }
|
||||
Some((key.clone(), content.trim().to_string()))
|
||||
}).collect()
|
||||
}
|
||||
crate::config::ContextSource::Store => {
|
||||
group.keys.iter().filter_map(|key| {
|
||||
let content = crate::mcp_server::memory_rpc(
|
||||
"memory_render",
|
||||
serde_json::json!({"key": key, "raw": true}),
|
||||
).ok()?;
|
||||
if content.trim().is_empty() { return None; }
|
||||
Some((key.clone(), content.trim().to_string()))
|
||||
}).collect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn cmd_load_context(stats: bool) -> Result<(), String> {
|
||||
let cfg = crate::config::get();
|
||||
|
||||
if stats {
|
||||
let mut total_words = 0;
|
||||
let mut total_entries = 0;
|
||||
println!("{:<25} {:>6} {:>8}", "GROUP", "ITEMS", "WORDS");
|
||||
println!("{}", "-".repeat(42));
|
||||
|
||||
for group in &cfg.context_groups {
|
||||
let entries = get_group_content(group, &cfg);
|
||||
let words: usize = entries.iter()
|
||||
.map(|(_, c)| c.split_whitespace().count())
|
||||
.sum();
|
||||
let count = entries.len();
|
||||
println!("{:<25} {:>6} {:>8}", group.label, count, words);
|
||||
total_words += words;
|
||||
total_entries += count;
|
||||
}
|
||||
|
||||
println!("{}", "-".repeat(42));
|
||||
println!("{:<25} {:>6} {:>8}", "TOTAL", total_entries, total_words);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
println!("=== MEMORY SYSTEM ({}) ===", cfg.assistant_name);
|
||||
|
||||
for group in &cfg.context_groups {
|
||||
let entries = get_group_content(group, &cfg);
|
||||
if !entries.is_empty() && group.source == crate::config::ContextSource::Journal {
|
||||
println!("--- recent journal entries ({}/{}) ---",
|
||||
entries.len(), cfg.journal_max);
|
||||
}
|
||||
for (key, content) in entries {
|
||||
if group.source == crate::config::ContextSource::Journal {
|
||||
println!("## {}", key);
|
||||
} else {
|
||||
println!("--- {} ({}) ---", key, group.label);
|
||||
}
|
||||
println!("{}\n", content);
|
||||
}
|
||||
}
|
||||
|
||||
println!("=== END MEMORY LOAD ===");
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue