From 9cb0bdbeac5a95bff694e3a147d2cb4feab79cc6 Mon Sep 17 00:00:00 2001 From: Andrey Avtomonov Date: Wed, 13 May 2026 18:49:28 +0200 Subject: [PATCH] fix(ingest): bypass adapter allow-list for public source ingest --- packages/cli/src/public-ingest.test.ts | 36 ++++++++++++++++++++++++++ packages/cli/src/public-ingest.ts | 1 + 2 files changed, 37 insertions(+) diff --git a/packages/cli/src/public-ingest.test.ts b/packages/cli/src/public-ingest.test.ts index 8f4d4b41..cbc1b813 100644 --- a/packages/cli/src/public-ingest.test.ts +++ b/packages/cli/src/public-ingest.test.ts @@ -485,6 +485,42 @@ describe('runKtxPublicIngest', () => { ); }); + it('bypasses adapter allow-lists for connection-centric source ingest', async () => { + const runIngest = vi.fn(async () => 0); + const io = makeIo(); + + await expect( + runKtxPublicIngest( + { + command: 'run', + projectDir: '/tmp/ktx', + targetConnectionId: 'docs', + all: false, + json: false, + inputMode: 'disabled', + }, + io.io, + { + loadProject: async () => + projectWithConnections({ + docs: { driver: 'notion' }, + }), + runIngest, + }, + ), + ).resolves.toBe(0); + + expect(runIngest).toHaveBeenCalledWith( + expect.objectContaining({ + command: 'run', + connectionId: 'docs', + adapter: 'notion', + allowImplicitAdapter: true, + }), + io.io, + ); + }); + it('routes public status and watch to the ingest status renderer', async () => { const runIngest = vi.fn(async () => 0); const statusIo = makeIo(); diff --git a/packages/cli/src/public-ingest.ts b/packages/cli/src/public-ingest.ts index 2f334ad0..ef1357af 100644 --- a/packages/cli/src/public-ingest.ts +++ b/packages/cli/src/public-ingest.ts @@ -477,6 +477,7 @@ export async function executePublicIngestTarget( ...(target.sourceDir ? { sourceDir: target.sourceDir } : {}), outputMode: sourceIngestOutputMode(args, io), inputMode: args.inputMode, + allowImplicitAdapter: true, }; const runIngest = deps.runIngest ?? runKtxIngest; const exitCode = deps.ingestProgress