From eb2683fc59957abc93db8c06f657aa953fbba044 Mon Sep 17 00:00:00 2001 From: Christian Klotz Date: Sat, 1 Aug 2026 21:38:36 +0300 Subject: [PATCH] fix(agent): use type index for compaction discovery --- .../sqlite-node/src/sqlite/storage/branch-cache.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/storage/sqlite-node/src/sqlite/storage/branch-cache.ts b/packages/storage/sqlite-node/src/sqlite/storage/branch-cache.ts index 9c60f226f..e7247cb13 100644 --- a/packages/storage/sqlite-node/src/sqlite/storage/branch-cache.ts +++ b/packages/storage/sqlite-node/src/sqlite/storage/branch-cache.ts @@ -46,15 +46,19 @@ export async function readCachedEntryRowsByType( branch: CachedBranch, type: SessionEntryRow["type"], ): Promise { + // Drive the join from the usually sparse entry type. Ordering from branch_entries + // makes SQLite scan the complete cached path before filtering by type. return db .prepare( `SELECT e.session_id, e.id, e.entry_seq, e.parent_id, e.type, e.timestamp, e.payload - FROM branch_entries AS b - JOIN session_entries AS e ON e.session_id = b.session_id AND e.id = b.entry_id - WHERE b.session_id = ? AND b.branch_id = ? AND b.entry_seq <= ? AND e.type = ? - ORDER BY b.entry_seq DESC`, + FROM session_entries AS e INDEXED BY idx_session_entries_session_type + CROSS JOIN branch_entries AS b + WHERE e.session_id = ? AND e.type = ? + AND b.session_id = e.session_id AND b.entry_id = e.id + AND b.branch_id = ? AND b.entry_seq <= ? + ORDER BY e.entry_seq DESC`, ) - .all(sessionId, branch.branchId, branch.leafSeq, type); + .all(sessionId, type, branch.branchId, branch.leafSeq); } export async function readCachedEntrySeq(