From 01f165fb3125f0ca2b410bcab401cef689a77cf7 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 9 May 2026 20:07:31 +0100 Subject: [PATCH] refactor: clarify sqlite transcript hit rows --- .../memory-core/src/session-search-visibility.ts | 2 +- extensions/memory-wiki/src/query.ts | 2 +- src/plugin-sdk/session-transcript-hit.test.ts | 10 +++++----- src/plugin-sdk/session-transcript-hit.ts | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/extensions/memory-core/src/session-search-visibility.ts b/extensions/memory-core/src/session-search-visibility.ts index da992176d5e..5c58a597f23 100644 --- a/extensions/memory-core/src/session-search-visibility.ts +++ b/extensions/memory-core/src/session-search-visibility.ts @@ -47,7 +47,7 @@ export async function filterMemorySearchHitsBySessionVisibility(params: { continue; } const keys = resolveTranscriptStemToSessionKeys({ - store: combinedSessionEntries, + entries: combinedSessionEntries, stem: identity.stem, }); if (keys.length === 0) { diff --git a/extensions/memory-wiki/src/query.ts b/extensions/memory-wiki/src/query.ts index 7b06ed438a6..07a52c20326 100644 --- a/extensions/memory-wiki/src/query.ts +++ b/extensions/memory-wiki/src/query.ts @@ -1252,7 +1252,7 @@ async function createSessionMemoryPathVisibilityChecker(params: { return false; } const keys = resolveTranscriptStemToSessionKeys({ - store: combinedSessionEntries, + entries: combinedSessionEntries, stem, }); return keys.some((key) => guard.check(key).allowed); diff --git a/src/plugin-sdk/session-transcript-hit.test.ts b/src/plugin-sdk/session-transcript-hit.test.ts index b2bb763eeb7..b5d809d005e 100644 --- a/src/plugin-sdk/session-transcript-hit.test.ts +++ b/src/plugin-sdk/session-transcript-hit.test.ts @@ -38,17 +38,17 @@ describe("resolveTranscriptStemToSessionKeys", () => { ...overrides, }); - it("returns keys for every agent whose store entry matches the stem", () => { - const store: Record = { + it("returns keys for every agent whose session row matches the stem", () => { + const entries: Record = { "agent:main:s1": baseEntry({}), "agent:peer:s2": baseEntry({}), }; - const keys = resolveTranscriptStemToSessionKeys({ store, stem: "stem-a" }).toSorted(); + const keys = resolveTranscriptStemToSessionKeys({ entries, stem: "stem-a" }).toSorted(); expect(keys).toEqual(["agent:main:s1", "agent:peer:s2"]); }); - it("does not synthesize keys when the live store has no matching transcript", () => { - const keys = resolveTranscriptStemToSessionKeys({ store: {}, stem: "deleted-stem" }); + it("does not synthesize keys when live rows have no matching transcript", () => { + const keys = resolveTranscriptStemToSessionKeys({ entries: {}, stem: "deleted-stem" }); expect(keys).toEqual([]); }); diff --git a/src/plugin-sdk/session-transcript-hit.ts b/src/plugin-sdk/session-transcript-hit.ts index 0cf712faa13..4026fa43c6e 100644 --- a/src/plugin-sdk/session-transcript-hit.ts +++ b/src/plugin-sdk/session-transcript-hit.ts @@ -26,6 +26,7 @@ function parseSessionsPath(hitPath: string): { base: string; ownerAgentId?: stri /** * Derive transcript stem `S` from a memory search hit path for `source === "sessions"`. * Builtin index uses `sessions//`; QMD exports use `.md`. + * Legacy JSONL source paths are ignored; active transcript identity is SQLite. */ export function extractTranscriptStemFromSessionsMemoryHit(hitPath: string): string | null { return extractTranscriptIdentityFromSessionsMemoryHit(hitPath)?.stem ?? null; @@ -54,13 +55,12 @@ export function extractTranscriptIdentityFromSessionsMemoryHit( * `createSessionVisibilityGuard`), including cross-agent cases. */ export function resolveTranscriptStemToSessionKeys(params: { - store: Record; + entries: Record; stem: string; }): string[] { - const { store } = params; const matches: string[] = []; - for (const [sessionKey, entry] of Object.entries(store)) { + for (const [sessionKey, entry] of Object.entries(params.entries)) { if (entry.sessionId === params.stem) { matches.push(sessionKey); }