diff --git a/apps/browser-extension/utils/hybrid-recall.eval.ts b/apps/browser-extension/utils/hybrid-recall.eval.ts index 418a2f1a..7729ca4e 100644 --- a/apps/browser-extension/utils/hybrid-recall.eval.ts +++ b/apps/browser-extension/utils/hybrid-recall.eval.ts @@ -92,12 +92,13 @@ export const HYBRID_RECALL_FIXTURES: HybridRecallFixture[] = [ }, { id: "empty-and-whitespace-noise", - description: "Empty / whitespace hits must not invent prompt lines", - expectedTexts: ["Keep this fact"], - chunkOnlyTexts: [], + description: + "Whitespace-only memory must not block a valid chunk; blanks invent no lines", + expectedTexts: ["Keep this fact", "Important document text"], + chunkOnlyTexts: ["Important document text"], results: [ { memory: "Keep this fact" }, - { memory: " " }, + { memory: " ", chunk: "Important document text" }, { chunk: "" }, {}, ], diff --git a/apps/browser-extension/utils/search-request.test.ts b/apps/browser-extension/utils/search-request.test.ts index 071e1f29..17b96038 100644 --- a/apps/browser-extension/utils/search-request.test.ts +++ b/apps/browser-extension/utils/search-request.test.ts @@ -37,6 +37,15 @@ describe("formatSearchHitText", () => { ) }) + it("falls back to chunk when memory is only whitespace", () => { + expect( + formatSearchHitText({ + memory: " ", + chunk: "Important document text", + }), + ).toBe("Important document text") + }) + it("returns null for empty hits", () => { expect(formatSearchHitText({})).toBeNull() expect(formatSearchHitText({ memory: " " })).toBeNull() diff --git a/apps/browser-extension/utils/search-request.ts b/apps/browser-extension/utils/search-request.ts index cbbc76d7..d7b24c46 100644 --- a/apps/browser-extension/utils/search-request.ts +++ b/apps/browser-extension/utils/search-request.ts @@ -23,10 +23,10 @@ export function buildSearchMemoriesBody( /** Prefer extracted memory text; fall back to document chunk. */ export function formatSearchHitText(hit: SearchHit): string | null { - const text = hit.memory || hit.chunk - if (typeof text !== "string") return null - const trimmed = text.trim() - return trimmed.length > 0 ? trimmed : null + const memory = typeof hit.memory === "string" ? hit.memory.trim() : "" + const chunk = typeof hit.chunk === "string" ? hit.chunk.trim() : "" + const text = memory || chunk + return text.length > 0 ? text : null } /** Numbered prompt lines for Included Memories; skips empty hits. */