perf(server): eliminate O(N) heap cloning across standup, snippet, and graph handlers

This commit is contained in:
Riz Ashraf committed 2026-09-21 20:27:33 +01:00
1 parent 9d7cd347c6
commit 13c7eca4c2
3 files changed
+15 -7

No files matched your search

+1 -1
View File
@@ -419,7 +419,7 @@ impl McpTool for VisualizeGraphHandler {
if query.is_empty() || included.contains(r.from.as_str()) || included.contains(r.to.as_str()) {
included.insert(r.from.as_str());
included.insert(r.to.as_str());
to_draw.push(r.clone());
to_draw.push(r);
}
}
+13 -5
View File
@@ -254,11 +254,19 @@ impl McpTool for GenerateStandupReportHandler {
.unwrap_or_default()
.as_secs()
.saturating_sub(req.hours_lookback * 3600);
let tasks = state.tasks.read_with(|items| items.iter().filter(|t| t.updated_at >= cutoff).cloned().collect::<Vec<_>>());
let changes = state.ledger.read_with(|items| items.iter().filter(|c| c.timestamp >= cutoff).cloned().collect::<Vec<_>>());
let summaries = state.session_summaries.read_with(|items| items.iter().filter(|s| s.namespace == req.namespace && s.timestamp >= cutoff).cloned().collect::<Vec<_>>());
let report = serde_json::json!({ "tasks_updated": tasks, "code_changes": changes, "session_summaries": summaries });
Ok(report.to_string())
let report_str = state.tasks.read_with(|items| {
state.ledger.read_with(|changes| {
state.session_summaries.read_with(|summaries| {
let filtered_tasks: Vec<_> = items.iter().filter(|t| t.updated_at >= cutoff).collect();
let filtered_changes: Vec<_> = changes.iter().filter(|c| c.timestamp >= cutoff).collect();
let filtered_summaries: Vec<_> = summaries.iter().filter(|s| s.namespace == req.namespace && s.timestamp >= cutoff).collect();
let report = serde_json::json!({ "tasks_updated": filtered_tasks, "code_changes": filtered_changes, "session_summaries": filtered_summaries });
report.to_string()
})
})
});
Ok(report_str)
}
}
+1 -1
View File
@@ -151,7 +151,7 @@ impl McpTool for SearchSnippetsHandler {
contains_ignore_ascii_case(&s.name, &query)
|| contains_ignore_ascii_case(&s.description, &query)
|| contains_ignore_ascii_case(&s.language, &query)
}).cloned().collect();
}).collect();
serde_json::to_string(&results).unwrap_or_default()
});
Ok(data.to_string())