From 1d76c7254cb94fd51d9dd2a9f136fbb703352212 Mon Sep 17 00:00:00 2001 From: chengke <404835780@qq.com> Date: Wed, 2 Sep 2026 11:03:27 +0800 Subject: [PATCH 1/2] fix: stop feeding duplicate evidenceText into search tool context Notebook agent grounding already comes from result chunks with citeable refs; injecting evidenceText repeated the same bodies without refs. Co-authored-by: Cursor --- src/agent-harness/knowhere-text.test.ts | 3 +++ src/agent-harness/knowhere-text.ts | 3 ++- src/domains/chat/index.ts | 12 ------------ src/domains/chat/media-assets.test.ts | 2 -- src/domains/chat/media-assets.ts | 1 - 5 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/agent-harness/knowhere-text.test.ts b/src/agent-harness/knowhere-text.test.ts index e916cad..5ec8abb 100644 --- a/src/agent-harness/knowhere-text.test.ts +++ b/src/agent-harness/knowhere-text.test.ts @@ -25,8 +25,11 @@ describe("knowhereToolText", () => { expect(text).toContain('') expect(text).toContain('ref="r1:result:1"') expect(text).toContain('ref="asset:r1:result:1"') + expect(text).toContain("Page one summary.") expect(text).toContain("Call inspectImage") expect(text).toContain("before finalize") + expect(text).not.toContain("") + expect(text).not.toContain("Page one evidence.") expect(text).not.toContain("https://assets.example/page-1.png") }) diff --git a/src/agent-harness/knowhere-text.ts b/src/agent-harness/knowhere-text.ts index f5b19da..2140e7e 100644 --- a/src/agent-harness/knowhere-text.ts +++ b/src/agent-harness/knowhere-text.ts @@ -56,7 +56,8 @@ export const knowhereToolText = { stopReason: input.response.stopReason ?? undefined, failureReason: input.response.failureReason ?? undefined, }), - formatOptionalTextTag("evidence", input.response.evidenceText), + // Model grounding comes from (results). Do not also inject + // evidenceText — same bodies, no citeable refs, doubles context. formatEvidenceChunks(input.chunks), formatEvidenceAssets(input.assets), formatAssetInstruction(input.assets), diff --git a/src/domains/chat/index.ts b/src/domains/chat/index.ts index d2b7208..11a7b85 100644 --- a/src/domains/chat/index.ts +++ b/src/domains/chat/index.ts @@ -291,7 +291,6 @@ export const answerQuestionWithRetrieval = ( results: useNotebookSourceTitles(rawResults, input.sources), sources: input.sources, hardenChatAssetUrl: input.hardenChatAssetUrl, - evidenceText: formatRetrievalEvidenceText(retrievalResponses), }), ) const pageCitationResults = yield* Effect.tryPromise(() => @@ -1343,17 +1342,6 @@ function hasDisplayedManifestArtifacts(result: HarnessRunResult): boolean { return result.manifest.artifacts.some((artifact) => artifact.display) } -function formatRetrievalEvidenceText( - responses: readonly RetrievalQueryResponse[], -): string | undefined { - const evidenceText = responses - .map((response): string => response.evidenceText?.trim() ?? "") - .filter((value): boolean => value.length > 0) - .join("\n") - - return evidenceText || undefined -} - function getRetrievalResultKey(result: RetrievalResult): string { const source = result.source return [ diff --git a/src/domains/chat/media-assets.test.ts b/src/domains/chat/media-assets.test.ts index 470255d..1d74482 100644 --- a/src/domains/chat/media-assets.test.ts +++ b/src/domains/chat/media-assets.test.ts @@ -103,8 +103,6 @@ describe("chat media assets", () => { }), ], hardenChatAssetUrl, - evidenceText: - "[image-6-中华人民共和国居民身份证.jpg]\n[image-7-中国居民身份证.jpg]", }) expect(results).toHaveLength(1) diff --git a/src/domains/chat/media-assets.ts b/src/domains/chat/media-assets.ts index bafaae8..423a878 100644 --- a/src/domains/chat/media-assets.ts +++ b/src/domains/chat/media-assets.ts @@ -27,7 +27,6 @@ export type RetrievalResultAssetInput = { readonly results: readonly RetrievalResult[] readonly sources: readonly Source[] readonly hardenChatAssetUrl?: HardenChatAssetUrl - readonly evidenceText?: string } export async function enrichRetrievalResultsWithAssetUrls({ From 15d5cdeee5e0af280cbb1a20a3d3c2bcd8e6f9da Mon Sep 17 00:00:00 2001 From: chengke <404835780@qq.com> Date: Wed, 2 Sep 2026 11:07:00 +0800 Subject: [PATCH 2/2] test: assert search tool grounding comes from chunks only Co-authored-by: Cursor --- src/agent-harness/runtime.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/agent-harness/runtime.test.ts b/src/agent-harness/runtime.test.ts index 0a5ca19..74e7ef7 100644 --- a/src/agent-harness/runtime.test.ts +++ b/src/agent-harness/runtime.test.ts @@ -156,7 +156,8 @@ describe("agent harness runtime", () => { expect(firstResult).toContain('ref="r1:result:1"') expect(secondResult).toContain('retrievalCount="2"') - expect(secondResult).toContain("Second evidence") + expect(secondResult).toContain("Second retrieval evidence.") + expect(secondResult).not.toContain("") expect(secondResult).toContain('ref="r2:result:1"') expect(JSON.stringify(secondResult)).not.toContain("r1:result:1") expect(ledger.snapshot().chunks.map((chunk) => chunk.ref)).toEqual([