diff --git a/src/main/ipc/ai-vault-runtime-owned-ssh.test.ts b/src/main/ipc/ai-vault-runtime-owned-ssh.test.ts index 66e8c60bd66..5ffec8003d5 100644 --- a/src/main/ipc/ai-vault-runtime-owned-ssh.test.ts +++ b/src/main/ipc/ai-vault-runtime-owned-ssh.test.ts @@ -290,6 +290,27 @@ describe('runtime-owned SSH AI Vault routing', () => { } ) }) + + it('does not resolve titles through another runtime for a locally owned SSH target', async () => { + mocks.requestActiveSshAiVaultSessionTitles.mockResolvedValue(null) + mocks.getActiveSshAiVaultHostInfo.mockReturnValue({}) + const findRuntimeOwningSshAiVaultHost = vi.fn() + const resolveRuntimeOwnedSshAiVaultSessionTitles = vi.fn() + registerAiVaultHandlers({ + findRuntimeOwningSshAiVaultHost, + resolveRuntimeOwnedSshAiVaultSessionTitles + }) + + await expect( + _internals.resolveAiVaultSessionTitles({ + executionHostScope: 'ssh:dev-box', + requests: [{ agent: 'codex', sessionId: 'session-1' }] + }) + ).resolves.toEqual({ titles: [] }) + + expect(findRuntimeOwningSshAiVaultHost).not.toHaveBeenCalled() + expect(resolveRuntimeOwnedSshAiVaultSessionTitles).not.toHaveBeenCalled() + }) }) function result(sessions: AiVaultSession[]): AiVaultListResult { diff --git a/src/main/ipc/ai-vault-session-title-routing.ts b/src/main/ipc/ai-vault-session-title-routing.ts index 0fbf2d9de6d..218deaf2fd3 100644 --- a/src/main/ipc/ai-vault-session-title-routing.ts +++ b/src/main/ipc/ai-vault-session-title-routing.ts @@ -11,7 +11,7 @@ import { import type { RuntimeOwnedSshAiVaultHost } from '../ai-vault/runtime-owned-ssh-session-list' import { resolveLocalAiVaultSessionTitles } from '../ai-vault/session-title-resolver' import { parseAiVaultSessionTitlesResult } from '../ai-vault/session-title-result-validation' -import { requestActiveSshAiVaultSessionTitles } from './ssh' +import { getActiveSshAiVaultHostInfo, requestActiveSshAiVaultSessionTitles } from './ssh' export type RuntimeAiVaultSessionTitleResolver = ( environmentId: string, @@ -70,6 +70,7 @@ async function resolveSshAiVaultSessionTitles( } if ( isRuntimeOwnedSshTargetId(targetId) || + getActiveSshAiVaultHostInfo(targetId) || !options.findRuntimeOwningSshAiVaultHost || !options.resolveRuntimeOwnedSsh ) {