From b7f4755020965877ec1b91112f7d5eaf1a8b3677 Mon Sep 17 00:00:00 2001 From: Benjamin Jesuiter Date: Mon, 2 Feb 2026 20:46:51 +0100 Subject: [PATCH] Memory: fix QMD scope channel parsing --- src/memory/qmd-manager.ts | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/memory/qmd-manager.ts b/src/memory/qmd-manager.ts index c984aa238..8cd40e223 100644 --- a/src/memory/qmd-manager.ts +++ b/src/memory/qmd-manager.ts @@ -12,6 +12,7 @@ import { buildSessionEntry, type SessionFileEntry, } from "./session-files.js"; +import { parseAgentSessionKey } from "../sessions/session-key-utils.js"; import { requireNodeSqlite } from "./sqlite.js"; import type { MemoryEmbeddingProbeResult, @@ -561,8 +562,13 @@ export class QmdMemoryManager implements MemorySearchManager { private deriveChannelFromKey(key?: string) { if (!key) return undefined; - const parts = key.split(":").filter(Boolean); - if (parts.length >= 3 && (parts[1] === "group" || parts[1] === "channel")) { + const normalized = this.normalizeSessionKey(key); + if (!normalized) return undefined; + const parts = normalized.split(":").filter(Boolean); + if ( + parts.length >= 2 && + (parts[1] === "group" || parts[1] === "channel" || parts[1] === "dm") + ) { return parts[0]?.toLowerCase(); } return undefined; @@ -570,11 +576,22 @@ export class QmdMemoryManager implements MemorySearchManager { private deriveChatTypeFromKey(key?: string) { if (!key) return undefined; - if (key.includes(":group:")) return "group"; - if (key.includes(":channel:")) return "channel"; + const normalized = this.normalizeSessionKey(key); + if (!normalized) return undefined; + if (normalized.includes(":group:")) return "group"; + if (normalized.includes(":channel:")) return "channel"; return "direct"; } + private normalizeSessionKey(key: string): string | undefined { + const trimmed = key.trim(); + if (!trimmed) return undefined; + const parsed = parseAgentSessionKey(trimmed); + const normalized = (parsed?.rest ?? trimmed).toLowerCase(); + if (normalized.startsWith("subagent:")) return undefined; + return normalized; + } + private toDocLocation( collection: string, collectionRelativePath: string,