From cba9ffb177eca82121c39d1eb5cb644c0e41c2af Mon Sep 17 00:00:00 2001 From: llagy007 <0668001470@xydigit.com> Date: Sat, 11 Jul 2026 19:19:40 +0800 Subject: [PATCH] fix(memory): skip blank search provider bootstrap (#103728) * fix(memory): skip blank search provider bootstrap * refactor(memory): simplify blank search preflight --------- Co-authored-by: Vincent Koc Co-authored-by: Peter Steinberger Co-authored-by: Peter Steinberger --- .../src/memory/manager.async-search.test.ts | 21 +++++++++++++++++++ extensions/memory-core/src/memory/manager.ts | 6 +++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/extensions/memory-core/src/memory/manager.async-search.test.ts b/extensions/memory-core/src/memory/manager.async-search.test.ts index 0f7424ae5c7a..5f34346868c2 100644 --- a/extensions/memory-core/src/memory/manager.async-search.test.ts +++ b/extensions/memory-core/src/memory/manager.async-search.test.ts @@ -4,6 +4,27 @@ import { awaitPendingManagerWork, startAsyncSearchSync } from "./manager-async-s import { MemoryIndexManager } from "./manager.js"; describe("memory search async sync", () => { + it("returns before provider or index bootstrap for a blank query", async () => { + const manager = Object.create(MemoryIndexManager.prototype) as MemoryIndexManager; + const ensureProviderInitialized = vi.fn(async () => {}); + const assertRequiredProviderAvailable = vi.fn(); + const hasIndexedContent = vi.fn(() => false); + const sync = vi.fn(async () => {}); + Object.assign(manager as unknown as Record, { + providerRequirement: { mode: "required" }, + ensureProviderInitialized, + assertRequiredProviderAvailable, + hasIndexedContent, + sync, + }); + + await expect(manager.search(" \n\t ")).resolves.toStrictEqual([]); + expect(ensureProviderInitialized).not.toHaveBeenCalled(); + expect(assertRequiredProviderAvailable).not.toHaveBeenCalled(); + expect(hasIndexedContent).not.toHaveBeenCalled(); + expect(sync).not.toHaveBeenCalled(); + }); + it("waits for dirty sync before querying", async () => { let releaseSync = () => {}; const pendingSync = new Promise((resolve) => { diff --git a/extensions/memory-core/src/memory/manager.ts b/extensions/memory-core/src/memory/manager.ts index fc0737ed29db..6ca27aa2c450 100644 --- a/extensions/memory-core/src/memory/manager.ts +++ b/extensions/memory-core/src/memory/manager.ts @@ -635,6 +635,10 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem }, ): Promise { opts?.onDebug?.({ backend: "builtin" }); + const normalizedQuery = query.trim(); + if (!normalizedQuery) { + return []; + } if (this.providerRequirement.mode === "required") { await this.ensureProviderInitialized(); this.assertRequiredProviderAvailable("search"); @@ -652,7 +656,7 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem hasIndexedContent = this.hasIndexedContent(); } const preflight = resolveMemorySearchPreflight({ - query, + query: normalizedQuery, hasIndexedContent, }); if (!preflight.shouldSearch) {