From d0b98c75e574852e53894eabd98f5b91ca631c3f Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Mon, 2 Feb 2026 20:07:28 -0800 Subject: [PATCH] fix: make QMD cache key deterministic --- src/memory/search-manager.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/memory/search-manager.ts b/src/memory/search-manager.ts index bdde26a72..ca7076f52 100644 --- a/src/memory/search-manager.ts +++ b/src/memory/search-manager.ts @@ -191,5 +191,22 @@ class FallbackMemoryManager implements MemorySearchManager { } function buildQmdCacheKey(agentId: string, config: ResolvedQmdConfig): string { - return `${agentId}:${JSON.stringify(config)}`; + return `${agentId}:${stableSerialize(config)}`; +} + +function stableSerialize(value: unknown): string { + return JSON.stringify(sortValue(value)); +} + +function sortValue(value: unknown): unknown { + if (Array.isArray(value)) { + return value.map((entry) => sortValue(entry)); + } + if (value && typeof value === "object") { + const sortedEntries = Object.keys(value as Record) + .sort((a, b) => a.localeCompare(b)) + .map((key) => [key, sortValue((value as Record)[key])]); + return Object.fromEntries(sortedEntries); + } + return value; }