Skip to content

Commit 92ae1e9

Browse files
authored
fix: Optimize thought completion marking from O(n²) to O(n) (#1486)
## Problem markThoughtCompletion scanned all subsequent items for every thought item using .slice().some(), making it O(n²) in conversation length. ## Changes 1. Replace nested scan with a single reverse pass using a Set to track seen turn contexts 2. Reduce time complexity from O(n²) to O(n) by eliminating repeated .slice().some() calls 3. Preserve identical completion semantics (checks for subsequent session_update or turnComplete) ## How did you test this? Manually
1 parent bc8fae9 commit 92ae1e9

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

apps/code/src/renderer/features/sessions/components/buildConversationItems.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,19 +98,19 @@ function isThoughtItem(
9898
}
9999

100100
function markThoughtCompletion(items: ConversationItem[]) {
101+
const seenContexts = new Set<TurnContext>();
102+
101103
for (let i = items.length - 1; i >= 0; i--) {
102104
const item = items[i];
103-
if (!isThoughtItem(item)) continue;
104105

105-
const hasSubsequentItem = items
106-
.slice(i + 1)
107-
.some(
108-
(next) =>
109-
next.type === "session_update" &&
110-
next.turnContext === item.turnContext,
111-
);
106+
if (isThoughtItem(item)) {
107+
item.thoughtComplete =
108+
seenContexts.has(item.turnContext) || item.turnContext.turnComplete;
109+
}
112110

113-
item.thoughtComplete = hasSubsequentItem || item.turnContext.turnComplete;
111+
if (item.type === "session_update") {
112+
seenContexts.add(item.turnContext);
113+
}
114114
}
115115
}
116116

0 commit comments

Comments
 (0)