From bd9ce3ed0951c6bb809db3f44e40fdb0bc7d9e68 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Mon, 13 Apr 2026 01:57:23 -0400 Subject: [PATCH] keys_to_replay_items() -> memory.rs --- src/agent/tools/memory.rs | 29 ++++++++++++++++++++++++++++- src/subconscious/defs.rs | 26 -------------------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/agent/tools/memory.rs b/src/agent/tools/memory.rs index a8e31d2..358a6dd 100644 --- a/src/agent/tools/memory.rs +++ b/src/agent/tools/memory.rs @@ -7,7 +7,9 @@ use std::sync::Arc; use anyhow::{Context, Result}; use std::sync::OnceLock; +use crate::graph::Graph; use crate::hippocampus::memory::MemoryNode; +use crate::neuro::{consolidation_priority, ReplayItem}; use crate::store::Store; // ── Store handle ─────────────────────────────────────────────── @@ -444,6 +446,31 @@ async fn supersede(agent: &Option>, args: &s Ok(format!("superseded {} → {} ({})", old_key, new_key, reason)) } +/// Convert a list of keys to ReplayItems with priority and graph metrics. +pub fn keys_to_replay_items( + store: &Store, + keys: &[String], + graph: &Graph, +) -> Vec { + keys.iter() + .filter_map(|key| { + let node = store.nodes.get(key)?; + let priority = consolidation_priority(store, key, graph, None); + let cc = graph.clustering_coefficient(key); + + Some(ReplayItem { + key: key.clone(), + priority, + interval_days: node.spaced_repetition_interval, + emotion: node.emotion, + cc, + classification: "unknown", + outlier_score: 0.0, + }) + }) + .collect() +} + async fn query(args: &serde_json::Value) -> Result { let query_str = get_str(args, "query")?; let format = args.get("format").and_then(|v| v.as_str()).unwrap_or("compact"); @@ -457,7 +484,7 @@ async fn query(args: &serde_json::Value) -> Result { let results = crate::query_parser::execute_query(&store, &graph, query_str) .map_err(|e| anyhow::anyhow!("{}", e))?; let keys: Vec = results.into_iter().map(|r| r.key).collect(); - let items = crate::subconscious::defs::keys_to_replay_items(&store, &keys, &graph); + let items = keys_to_replay_items(&store, &keys, &graph); Ok(crate::subconscious::prompts::format_nodes_section(&store, &items, &graph)) } _ => { diff --git a/src/subconscious/defs.rs b/src/subconscious/defs.rs index 1dce9ac..2c961e1 100644 --- a/src/subconscious/defs.rs +++ b/src/subconscious/defs.rs @@ -15,7 +15,6 @@ // The query selects what to operate on; placeholders pull in context. use crate::graph::Graph; -use crate::neuro::{consolidation_priority, ReplayItem}; use crate::store::Store; use serde::Deserialize; @@ -665,28 +664,3 @@ pub fn run_agent( Ok(super::prompts::AgentBatch { steps: resolved_steps, node_keys: all_keys }) } - -/// Convert a list of keys to ReplayItems with priority and graph metrics. -pub fn keys_to_replay_items( - store: &Store, - keys: &[String], - graph: &Graph, -) -> Vec { - keys.iter() - .filter_map(|key| { - let node = store.nodes.get(key)?; - let priority = consolidation_priority(store, key, graph, None); - let cc = graph.clustering_coefficient(key); - - Some(ReplayItem { - key: key.clone(), - priority, - interval_days: node.spaced_repetition_interval, - emotion: node.emotion, - cc, - classification: "unknown", - outlier_score: 0.0, - }) - }) - .collect() -}