memory-search: deduplicate seen set entries
mark_seen now takes the in-memory HashSet and checks before appending. Prevents the same key being written 30+ times from repeated search hits and context reloads. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
38ad2ef4be
commit
de36c0d39e
1 changed files with 6 additions and 4 deletions
|
|
@ -145,12 +145,13 @@ fn main() {
|
|||
let ctx = String::from_utf8_lossy(&output.stdout).to_string();
|
||||
if !ctx.trim().is_empty() {
|
||||
// Extract keys from all chunks for seen set
|
||||
let mut ctx_seen = load_seen(&state_dir, session_id);
|
||||
for line in ctx.lines() {
|
||||
if line.starts_with("--- ") && line.ends_with(" ---") {
|
||||
let inner = &line[4..line.len() - 4];
|
||||
if let Some(paren) = inner.rfind(" (") {
|
||||
let key = inner[..paren].trim();
|
||||
mark_seen(&state_dir, session_id, key);
|
||||
mark_seen(&state_dir, session_id, key, &mut ctx_seen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -312,7 +313,7 @@ fn main() {
|
|||
return;
|
||||
}
|
||||
|
||||
let seen = load_seen(&state_dir, session_id);
|
||||
let mut seen = load_seen(&state_dir, session_id);
|
||||
if debug { println!("[memory-search] {} keys in seen set", seen.len()); }
|
||||
|
||||
// Format results like poc-memory search output
|
||||
|
|
@ -332,7 +333,7 @@ fn main() {
|
|||
|
||||
if let Some(key) = extract_key_from_line(trimmed) {
|
||||
if seen.contains(&key) { continue; }
|
||||
mark_seen(&state_dir, session_id, &key);
|
||||
mark_seen(&state_dir, session_id, &key, &mut seen);
|
||||
mark_returned(&state_dir, session_id, &key);
|
||||
result_output.push_str(line);
|
||||
result_output.push('\n');
|
||||
|
|
@ -641,7 +642,8 @@ fn load_seen(dir: &Path, session_id: &str) -> HashSet<String> {
|
|||
}
|
||||
}
|
||||
|
||||
fn mark_seen(dir: &Path, session_id: &str, key: &str) {
|
||||
fn mark_seen(dir: &Path, session_id: &str, key: &str, seen: &mut HashSet<String>) {
|
||||
if !seen.insert(key.to_string()) { return; }
|
||||
let path = dir.join(format!("seen-{}", session_id));
|
||||
if let Ok(mut f) = fs::OpenOptions::new().create(true).append(true).open(path) {
|
||||
let ts = chrono::Local::now().format("%Y-%m-%dT%H:%M:%S");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue