cxs is a local-first CLI for searching Codex session logs. It is designed for progressive retrieval: find the right session first, then read
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf: optimize message array traversal in session parsing

Replaced the double array clone and reverse search pattern `[...messages].reverse().find(...)` in `buildSessionSummary` with a single reverse loop. This avoids multiple O(N) array memory allocations and traverses the array backwards with early returns, achieving the same result faster and more efficiently.

Co-authored-by: catoncat <204556023+catoncat@users.noreply.github.com>

authored by

google-labs-jules[bot]
catoncat
and committed by
Cat
f33f2bcc e167ce90

+13 -2
+3
.jules/bolt.md
··· 1 + ## 2025-02-18 - Avoid array spreading inside double traversal 2 + **Learning:** Found a performance bottleneck where `[...messages].reverse().find(...)` was used twice. This does unnecessary array allocations and double-pass array traversal. 3 + **Action:** Replace multiple reverse searches by spreading array with a single reverse loop (`for (let i = arr.length - 1; i >= 0; i--)`), which avoids array allocations completely and allows early returns in O(1) memory.
+10 -2
src/parser.ts
··· 122 122 function buildSessionSummary(messages: ParsedMessage[]): string { 123 123 const firstUser = messages.find((message) => message.role === "user"); 124 124 const firstAssistant = messages.find((message) => message.role === "assistant"); 125 - const latestUser = [...messages].reverse().find((message) => message.role === "user"); 126 - const latestAssistant = [...messages].reverse().find((message) => message.role === "assistant"); 125 + 126 + // OPTIMIZATION: Reverse loop avoids double array cloning/traversal overhead 127 + let latestUser: ParsedMessage | undefined; 128 + let latestAssistant: ParsedMessage | undefined; 129 + for (let i = messages.length - 1; i >= 0; i--) { 130 + const msg = messages[i]; 131 + if (!latestUser && msg.role === "user") latestUser = msg; 132 + if (!latestAssistant && msg.role === "assistant") latestAssistant = msg; 133 + if (latestUser && latestAssistant) break; 134 + } 127 135 128 136 const parts = [ 129 137 firstUser ? `user: ${normalizeSummaryText(firstUser.contentText)}` : "",