From f864bbc1488cc219e7d568dc6595bd875fbb010f Mon Sep 17 00:00:00 2001 From: Jinwoo-H Date: Fri, 18 Sep 2026 14:19:39 -0400 Subject: [PATCH] test(session-search): pin the identity and acknowledgement across every entry point IPC, the runtime RPC method, the relay handler and the shared remote client each carry the identity out and the acknowledgement back, and the relay -- which has no repo catalog -- reports the scope rather than widening the search. --- .../session-search-scope-entry-points.test.ts | 15 +++++++++++++++ .../session-search-service-registry.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/ai-vault-search/session-search-scope-entry-points.test.ts b/src/main/ai-vault-search/session-search-scope-entry-points.test.ts index 8e162a2f359..9bce1715d3b 100644 --- a/src/main/ai-vault-search/session-search-scope-entry-points.test.ts +++ b/src/main/ai-vault-search/session-search-scope-entry-points.test.ts @@ -1,6 +1,7 @@ import { afterEach, describe, expect, it } from 'vitest' import { AiVaultHandler } from '../../relay/ai-vault-handler' import type { RelayDispatcher } from '../../relay/dispatcher' +import { createSessionSearchClient } from '../../shared/ai-vault-search-client' import { fakeSearchService } from '../../shared/ai-vault-search-test-fixture' import { searchAllExecutionHosts } from '../ipc/ai-vault-search-all-hosts' import { RpcDispatcher } from '../runtime/rpc/dispatcher' @@ -87,6 +88,20 @@ describe('every search entry point carries the scope identity through', () => { }) }) +describe('the shared remote client', () => { + it('carries the identity out and the acknowledgement back across a transport', async () => { + setSessionSearchService(fakeSearchService()) + installSessionSearchScopeCatalogSource(() => CATALOG) + const client = createSessionSearchClient( + (_method, params) => searchSessionService(params, 'relay'), + 'relay' + ) + expect(await client.searchSessions({ query: 'needle', within: WITHIN })).toMatchObject({ + resolvedWithin: { kind: 'workspace', paths: 1 } + }) + }) +}) + describe('an all-computers merge across mixed host versions', () => { it('drops an old host’s unscoped hits and names it as needing an update', async () => { const response = await searchAllExecutionHosts({ query: 'needle', within: WITHIN }, [ diff --git a/src/main/ai-vault-search/session-search-service-registry.ts b/src/main/ai-vault-search/session-search-service-registry.ts index 5af65187e99..1714f970f5c 100644 --- a/src/main/ai-vault-search/session-search-service-registry.ts +++ b/src/main/ai-vault-search/session-search-service-registry.ts @@ -72,7 +72,7 @@ type ScopedSessionSearch = { * does not know the workspace or project, which is an answer — never a reason to * fall back to searching everything. */ -export function applySessionSearchScope(parsed: AiVaultSearchRequest): ScopedSessionSearch | null { +function applySessionSearchScope(parsed: AiVaultSearchRequest): ScopedSessionSearch | null { const { within, ...request } = parsed if (!within) { return { request }