mirror of
https://github.com/moltbot/moltbot.git
synced 2026-05-10 12:32:27 +00:00
refactor: clarify sqlite transcript hit rows
This commit is contained in:
@@ -47,7 +47,7 @@ export async function filterMemorySearchHitsBySessionVisibility(params: {
|
||||
continue;
|
||||
}
|
||||
const keys = resolveTranscriptStemToSessionKeys({
|
||||
store: combinedSessionEntries,
|
||||
entries: combinedSessionEntries,
|
||||
stem: identity.stem,
|
||||
});
|
||||
if (keys.length === 0) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -38,17 +38,17 @@ describe("resolveTranscriptStemToSessionKeys", () => {
|
||||
...overrides,
|
||||
});
|
||||
|
||||
it("returns keys for every agent whose store entry matches the stem", () => {
|
||||
const store: Record<string, SessionEntry> = {
|
||||
it("returns keys for every agent whose session row matches the stem", () => {
|
||||
const entries: Record<string, SessionEntry> = {
|
||||
"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([]);
|
||||
});
|
||||
|
||||
@@ -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/<agent>/<session>`; QMD exports use `<stem>.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<string, SessionEntry>;
|
||||
entries: Record<string, SessionEntry>;
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user