diff --git a/poc-memory/src/transcript.rs b/poc-memory/src/transcript.rs index beaf08a..3919050 100644 --- a/poc-memory/src/transcript.rs +++ b/poc-memory/src/transcript.rs @@ -203,11 +203,12 @@ impl Iterator for TailMessages { let obj_bytes = &self.mmap[open..=close]; - // Quick byte check: skip objects that aren't user/assistant - // messages. Avoids serde-parsing megabyte tool_result objects. - let is_user = memchr::memmem::find(obj_bytes, b"\"type\":\"user\"").is_some(); + // The "type" field is near the start of top-level objects. + // Only check the first 200 bytes to avoid scanning megabyte objects. + let prefix = &obj_bytes[..obj_bytes.len().min(200)]; + let is_user = memchr::memmem::find(prefix, b"\"type\":\"user\"").is_some(); let is_assistant = !is_user - && memchr::memmem::find(obj_bytes, b"\"type\":\"assistant\"").is_some(); + && memchr::memmem::find(prefix, b"\"type\":\"assistant\"").is_some(); if !is_user && !is_assistant { continue; } let obj: Value = match serde_json::from_slice(obj_bytes) {