perf: completely eradicate large vector allocations and state locking double-clones in main, meta, env, workspaces, and notes modules
This commit is contained in:
1 parent
6b37799cc5
commit
9476bcd649
9 files changed
+352
-125
No files matched your search
@@ -368,60 +368,57 @@ impl McpTool for OmniSearchHandler {
|
||||
}
|
||||
}
|
||||
});
|
||||
for t in state.tasks.read() {
|
||||
if matches
|
||||
.iter()
|
||||
.any(|(id, typ, _, _, _)| id == &t.id && typ == "task")
|
||||
{
|
||||
tasks.push(t);
|
||||
state.tasks.read_with(|all_tasks| {
|
||||
for t in all_tasks {
|
||||
if matches
|
||||
.iter()
|
||||
.any(|(id, typ, _, _, _)| id == &t.id && typ == "task")
|
||||
{
|
||||
tasks.push(t.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
for s in state.snippets.read() {
|
||||
if matches
|
||||
.iter()
|
||||
.any(|(id, typ, _, _, _)| id == &s.name && typ == "snippet")
|
||||
{
|
||||
snippets.push(s);
|
||||
});
|
||||
state.snippets.read_with(|all_snippets| {
|
||||
for s in all_snippets {
|
||||
if matches
|
||||
.iter()
|
||||
.any(|(id, typ, _, _, _)| id == &s.name && typ == "snippet")
|
||||
{
|
||||
snippets.push(s.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
for a in state.adrs.read() {
|
||||
if matches
|
||||
.iter()
|
||||
.any(|(id, typ, _, _, _)| id == &a.id && typ == "adr")
|
||||
{
|
||||
adrs.push(a);
|
||||
});
|
||||
state.adrs.read_with(|all_adrs| {
|
||||
for a in all_adrs {
|
||||
if matches
|
||||
.iter()
|
||||
.any(|(id, typ, _, _, _)| id == &a.id && typ == "adr")
|
||||
{
|
||||
adrs.push(a.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let q = req.query.to_lowercase();
|
||||
let tech_debts: Vec<_> = state
|
||||
.tech_debts
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|d| {
|
||||
let tech_debts = state.tech_debts.read_with(|debts| {
|
||||
debts.iter().filter(|d| {
|
||||
req.namespace.as_ref().is_none_or(|ns| d.namespace == *ns)
|
||||
&& (contains_ignore_ascii_case(&d.description, &q)
|
||||
|| contains_ignore_ascii_case(&d.ideal_solution, &q))
|
||||
})
|
||||
.collect();
|
||||
let memos: Vec<_> = state
|
||||
.handoff_memos
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|m| {
|
||||
}).cloned().collect::<Vec<_>>()
|
||||
});
|
||||
let memos = state.handoff_memos.read_with(|memos| {
|
||||
memos.iter().filter(|m| {
|
||||
req.namespace.as_ref().is_none_or(|ns| m.namespace == *ns)
|
||||
&& contains_ignore_ascii_case(&m.content, &q)
|
||||
})
|
||||
.collect();
|
||||
let error_fixes: Vec<_> = state
|
||||
.error_fixes
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|f| {
|
||||
}).cloned().collect::<Vec<_>>()
|
||||
});
|
||||
let error_fixes = state.error_fixes.read_with(|fixes| {
|
||||
fixes.iter().filter(|f| {
|
||||
contains_ignore_ascii_case(&f.signature, &q)
|
||||
|| contains_ignore_ascii_case(&f.solution, &q)
|
||||
})
|
||||
.collect();
|
||||
}).cloned().collect::<Vec<_>>()
|
||||
});
|
||||
|
||||
let report = serde_json::json!({
|
||||
"knowledge_graph": kg.entities,
|
||||
@@ -453,36 +450,11 @@ impl McpTool for GetProjectHealthHandler {
|
||||
|
||||
async fn execute(&self, args: Value, state: Arc<MemoryState>) -> Result<String, String> {
|
||||
let req: GetProjectHealthTool = serde_json::from_value(args).map_err(|e| e.to_string())?;
|
||||
let active_tasks = state
|
||||
.tasks
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|t| t.status != "done")
|
||||
.count();
|
||||
let unresolved_debt = state
|
||||
.tech_debts
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|d| d.namespace == req.namespace && !d.is_resolved)
|
||||
.count();
|
||||
let unread_memos = state
|
||||
.handoff_memos
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|m| m.namespace == req.namespace)
|
||||
.count();
|
||||
let active_milestones = state
|
||||
.milestones
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|m| m.namespace == req.namespace && m.status != "done")
|
||||
.count();
|
||||
let remaining_checklists = state
|
||||
.pr_checklists
|
||||
.read()
|
||||
.into_iter()
|
||||
.filter(|c| c.namespace == req.namespace)
|
||||
.count();
|
||||
let active_tasks = state.tasks.read_with(|tasks| tasks.iter().filter(|t| t.status != "done").count());
|
||||
let unresolved_debt = state.tech_debts.read_with(|debts| debts.iter().filter(|d| d.namespace == req.namespace && !d.is_resolved).count());
|
||||
let unread_memos = state.handoff_memos.read_with(|memos| memos.iter().filter(|m| m.namespace == req.namespace).count());
|
||||
let active_milestones = state.milestones.read_with(|milestones| milestones.iter().filter(|m| m.namespace == req.namespace && m.status != "done").count());
|
||||
let remaining_checklists = state.pr_checklists.read_with(|checklists| checklists.iter().filter(|c| c.namespace == req.namespace).count());
|
||||
|
||||
let report = serde_json::json!({
|
||||
"active_tasks": active_tasks,
|
||||
@@ -498,3 +470,4 @@ impl McpTool for GetProjectHealthHandler {
|
||||
use crate::handlers_v2::utils::*;
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user