From 88f91f27c2d9fd4a674a329635f219f512a90b49 Mon Sep 17 00:00:00 2001 From: Andrey Avtomonov <7889985+andreybavt@users.noreply.github.com> Date: Thu, 14 May 2026 18:54:18 +0200 Subject: [PATCH] fix(cli): stabilize mcp daemon verification --- packages/cli/src/local-adapters.test.ts | 3 +++ packages/cli/src/managed-mcp-daemon.test.ts | 3 +++ packages/cli/src/mcp-http-server.ts | 2 +- packages/cli/src/print-command-tree.test.ts | 4 ++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/local-adapters.test.ts b/packages/cli/src/local-adapters.test.ts index 12f8d652..ffeff408 100644 --- a/packages/cli/src/local-adapters.test.ts +++ b/packages/cli/src/local-adapters.test.ts @@ -18,6 +18,9 @@ function sqlAnalysisStub() { async analyzeBatch() { return new Map(); }, + async validateReadOnly() { + return { ok: true }; + }, }; } diff --git a/packages/cli/src/managed-mcp-daemon.test.ts b/packages/cli/src/managed-mcp-daemon.test.ts index d54f33e3..7ffc277c 100644 --- a/packages/cli/src/managed-mcp-daemon.test.ts +++ b/packages/cli/src/managed-mcp-daemon.test.ts @@ -105,6 +105,9 @@ describe('managed MCP daemon lifecycle', () => { }); expect(status.kind).toBe('running'); + if (status.kind !== 'running') { + throw new Error(`Expected running status, received ${status.kind}`); + } expect(status.url).toBe('http://127.0.0.1:7878/mcp'); }); diff --git a/packages/cli/src/mcp-http-server.ts b/packages/cli/src/mcp-http-server.ts index b040ca6e..68e8eb3b 100644 --- a/packages/cli/src/mcp-http-server.ts +++ b/packages/cli/src/mcp-http-server.ts @@ -191,7 +191,7 @@ async function defaultMcpServerFactory(input: { }, }); - let memoryCapture; + let memoryCapture: ReturnType | undefined; try { memoryCapture = createLocalProjectMemoryCapture(input.project, { semanticLayerCompute, queryExecutor }); } catch (error) { diff --git a/packages/cli/src/print-command-tree.test.ts b/packages/cli/src/print-command-tree.test.ts index 86ef451e..7ffd97b9 100644 --- a/packages/cli/src/print-command-tree.test.ts +++ b/packages/cli/src/print-command-tree.test.ts @@ -12,11 +12,12 @@ describe('renderKtxCommandTree', () => { .filter((line) => /^ {2}[├└]── \S/.test(line)) .map((line) => line.replace(/^ {2}[├└]── /, '').trim().split(' ')[0]); - for (const expected of ['setup', 'connection', 'ingest', 'sl', 'dev']) { + for (const expected of ['setup', 'connection', 'ingest', 'sl', 'mcp', 'dev']) { expect(topLevel).toContain(expected); } expect(output).toContain('│ └── test '); + expect(output).toContain('│ ├── status Show KTX MCP daemon status'); expect(output).not.toContain('│ ├── add'); expect(output).not.toContain('│ ├── remove'); expect(output).not.toContain('│ ├── map'); @@ -24,7 +25,6 @@ describe('renderKtxCommandTree', () => { expect(output).not.toContain('│ ├── metabase'); expect(output).not.toContain('│ ├── notion'); expect(output).not.toContain('scan '); - expect(output).not.toContain('│ ├── status'); expect(output).not.toContain('│ ├── replay'); expect(output).not.toContain('│ └── replay'); expect(output).not.toContain('│ ├── run');