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 <vincentkoc@ieee.org>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
This commit is contained in:
llagy007
2026-07-11 19:19:40 +08:00
committed by GitHub
parent c49e5c480d
commit cba9ffb177
2 changed files with 26 additions and 1 deletions
@@ -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<string, unknown>, {
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<void>((resolve) => {
+5 -1
View File
@@ -635,6 +635,10 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem
},
): Promise<MemorySearchResult[]> {
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) {