mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-10 08:05:14 +02:00
Simplify CLI next steps
This commit is contained in:
parent
97a6b91f95
commit
be90ad27f4
7 changed files with 22 additions and 29 deletions
|
|
@ -4,7 +4,7 @@ import { join } from 'node:path';
|
|||
import { afterEach, describe, expect, it } from 'vitest';
|
||||
import { runDemoSeeded } from './demo-seeded.js';
|
||||
import { formatSeededInspect, inspectSeededProject } from './demo-seeded-inspect.js';
|
||||
import { KTX_NEXT_STEP_COMMANDS } from './next-steps.js';
|
||||
import { KTX_NEXT_STEP_DIRECT_COMMANDS } from './next-steps.js';
|
||||
|
||||
describe('seeded demo inspect contract', () => {
|
||||
const projectDir = join(tmpdir(), `ktx-demo-seeded-inspect-${process.pid}`);
|
||||
|
|
@ -59,7 +59,7 @@ describe('seeded demo inspect contract', () => {
|
|||
reports: { primaryPath: 'reports/seeded-demo-report.json', fileCount: 1 },
|
||||
replays: { primaryPath: 'replays/replay.memory-flow.v1.json', latestPath: 'replays/latest.memory-flow.v1.json' },
|
||||
},
|
||||
nextCommands: KTX_NEXT_STEP_COMMANDS,
|
||||
nextCommands: KTX_NEXT_STEP_DIRECT_COMMANDS,
|
||||
});
|
||||
|
||||
expect(inspect.generatedOutputs.replays.fileCount).toBeGreaterThanOrEqual(3);
|
||||
|
|
@ -91,10 +91,7 @@ describe('seeded demo inspect contract', () => {
|
|||
expect(output).toContain('Latest replay: seeded (packaged, prebuilt)');
|
||||
expect(output).toContain(' $ ktx agent tools --json');
|
||||
expect(output).toContain(' $ ktx agent context --json');
|
||||
expect(output).toContain(' $ ktx serve --mcp stdio --user-id local');
|
||||
expect(output.indexOf('ktx agent tools --json')).toBeLessThan(
|
||||
output.indexOf('ktx serve --mcp stdio --user-id local'),
|
||||
);
|
||||
expect(output).not.toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(output).not.toContain('ktx ask');
|
||||
expect(output).not.toContain('deterministic mode');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { join, resolve } from 'node:path';
|
|||
import type { MemoryFlowReplayInput } from '@ktx/context/ingest/memory-flow';
|
||||
import { loadPackagedDemoReplay } from './demo-assets.js';
|
||||
import { DEMO_LATEST_REPLAY_FILE, loadLatestDemoReplay } from './demo-replay-store.js';
|
||||
import { KTX_NEXT_STEP_COMMANDS, KTX_NEXT_STEP_COMMAND_WIDTH } from './next-steps.js';
|
||||
import { KTX_NEXT_STEP_COMMAND_WIDTH, KTX_NEXT_STEP_DIRECT_COMMANDS } from './next-steps.js';
|
||||
|
||||
type SeededInspectReadiness = 'missing' | 'ready' | 'corrupt';
|
||||
|
||||
|
|
@ -181,7 +181,7 @@ function sourceBundleFromManifest(manifest: DemoSeededManifest): SeededInspectSu
|
|||
}
|
||||
|
||||
function nextCommands(): SeededInspectSummary['nextCommands'] {
|
||||
return [...KTX_NEXT_STEP_COMMANDS];
|
||||
return [...KTX_NEXT_STEP_DIRECT_COMMANDS];
|
||||
}
|
||||
|
||||
function modeMetadataFromReplay(replay: MemoryFlowReplayInput | null): SeededInspectSummary['modeMetadata'] {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { DEMO_FULL_JOB_ID, defaultDemoProjectDir, ensureDemoProject } from './de
|
|||
import type { DemoFullResult } from './demo-full.js';
|
||||
import { createTestDemoPromptAdapter } from './demo-interaction.js';
|
||||
import type { renderMemoryFlowTui } from './memory-flow-tui.js';
|
||||
import { KTX_NEXT_STEP_COMMANDS } from './next-steps.js';
|
||||
import { KTX_NEXT_STEP_DIRECT_COMMANDS } from './next-steps.js';
|
||||
import { resetVizFallbackWarningsForTest } from './viz-fallback.js';
|
||||
|
||||
function makeIo(options: { isTTY?: boolean; columns?: number; rawMode?: boolean } = {}) {
|
||||
|
|
@ -205,7 +205,7 @@ describe('runKtxDemo', () => {
|
|||
expect(io.stdout()).toContain('Connection: orbit_demo');
|
||||
expect(io.stdout()).toContain('ktx sl list');
|
||||
expect(io.stdout()).toContain('ktx wiki list');
|
||||
expect(io.stdout()).toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(io.stdout()).not.toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(io.stdout()).not.toContain('KTX memory flow');
|
||||
expect(io.stderr()).toContain(
|
||||
'Visualization requested but stdin raw mode is unavailable; printing plain output.',
|
||||
|
|
@ -223,7 +223,7 @@ describe('runKtxDemo', () => {
|
|||
expect(testIo.stdout()).toContain('Connection: orbit_demo');
|
||||
expect(testIo.stdout()).toContain('ktx sl list');
|
||||
expect(testIo.stdout()).toContain('ktx wiki list');
|
||||
expect(testIo.stdout()).toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(testIo.stdout()).not.toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(testIo.stdout()).not.toContain('KTX memory flow');
|
||||
expect(testIo.stderr()).toContain(
|
||||
'Visualization requested but stdout is not an interactive terminal; printing plain output.',
|
||||
|
|
@ -284,7 +284,7 @@ describe('runKtxDemo', () => {
|
|||
expect(io.stdout()).toContain('LLM calls: none');
|
||||
expect(io.stdout()).toContain('Your KTX project files are at:');
|
||||
expect(io.stdout()).toContain(join(tmpdir(), 'ktx-demo-'));
|
||||
expect(io.stdout()).toContain('ktx serve --mcp stdio');
|
||||
expect(io.stdout()).not.toContain('ktx serve --mcp stdio');
|
||||
expect(io.stdout()).not.toContain(['ktx', 'mcp'].join(' '));
|
||||
expect(io.stdout()).not.toContain('deterministic');
|
||||
});
|
||||
|
|
@ -347,7 +347,7 @@ describe('runKtxDemo', () => {
|
|||
generatedContext: 'prebuilt from bundled assets',
|
||||
llmCalls: 'none',
|
||||
},
|
||||
nextCommands: KTX_NEXT_STEP_COMMANDS,
|
||||
nextCommands: KTX_NEXT_STEP_DIRECT_COMMANDS,
|
||||
});
|
||||
expect(parsed.generatedOutputs.replays.fileCount).toBeGreaterThanOrEqual(3);
|
||||
expect(jsonIo.stderr()).toBe('');
|
||||
|
|
@ -414,7 +414,7 @@ describe('runKtxDemo', () => {
|
|||
expect(testIo.stdout()).toContain('KTX finished ingesting your data');
|
||||
expect(testIo.stdout()).toContain('ktx sl list');
|
||||
expect(testIo.stdout()).toContain('ktx wiki list');
|
||||
expect(testIo.stdout()).toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(testIo.stdout()).not.toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(testIo.stdout()).not.toContain(['ktx', 'ask'].join(' '));
|
||||
expect(testIo.stdout()).not.toContain(['ktx', 'mcp'].join(' '));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ describe('MemoryFlowTuiApp', () => {
|
|||
expect(frame).toContain('KTX finished ingesting your data');
|
||||
expect(frame).toContain('ktx sl list');
|
||||
expect(frame).toContain('ktx wiki list');
|
||||
expect(frame).toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(frame).not.toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(frame).not.toContain(['ktx', 'ask'].join(' '));
|
||||
expect(frame).not.toContain(['ktx', 'mcp'].join(' '));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -66,11 +66,10 @@ describe('KTX demo next steps', () => {
|
|||
const rendered = formatNextStepLines().join('\n');
|
||||
|
||||
expect(rendered).toContain('KTX context is ready for agents.');
|
||||
expect(rendered).toContain('Preferred route: CLI + Skills');
|
||||
expect(rendered).toContain('no MCP server is required');
|
||||
expect(rendered).toContain('Direct CLI checks:');
|
||||
expect(rendered).toContain('Optional MCP:');
|
||||
expect(rendered).not.toContain('Ask your agent to use KTX');
|
||||
expect(rendered).toContain('ask a data question');
|
||||
expect(rendered).toContain('Verify with:');
|
||||
expect(rendered).not.toContain('Preferred route');
|
||||
expect(rendered).not.toContain('Optional MCP:');
|
||||
});
|
||||
|
||||
it('does not advertise removed Commander migration commands', () => {
|
||||
|
|
@ -80,7 +79,6 @@ describe('KTX demo next steps', () => {
|
|||
expect(rendered).toContain('ktx agent context --json');
|
||||
expect(rendered).toContain('ktx sl list');
|
||||
expect(rendered).toContain('ktx wiki list');
|
||||
expect(rendered).toContain('ktx serve --mcp stdio --user-id local');
|
||||
|
||||
for (const removed of [
|
||||
command('ktx', 'ask'),
|
||||
|
|
@ -91,6 +89,7 @@ describe('KTX demo next steps', () => {
|
|||
command('dev', 'knowledge'),
|
||||
command('ktx', 'ingest', 'run'),
|
||||
command('ktx', 'ingest', 'replay'),
|
||||
command('ktx', 'serve', '--mcp', 'stdio', '--user-id', 'local'),
|
||||
]) {
|
||||
expect(rendered).not.toContain(removed);
|
||||
}
|
||||
|
|
@ -123,7 +122,7 @@ describe('KTX demo next steps', () => {
|
|||
|
||||
expect(rendered).toContain('KTX context is ready for agents.');
|
||||
expect(rendered).toContain('ktx agent context --json');
|
||||
expect(rendered).toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(rendered).not.toContain('ktx serve --mcp stdio --user-id local');
|
||||
expect(rendered).not.toContain('Build KTX context next.');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -58,12 +58,9 @@ function commandLines(commands: ReadonlyArray<{ command: string; description: st
|
|||
|
||||
export function formatNextStepLines(indent = ' '): string[] {
|
||||
return [
|
||||
`${indent}KTX context is ready for agents.`,
|
||||
`${indent}Preferred route: CLI + Skills; installed rules call the pinned local CLI directly, so no MCP server is required.`,
|
||||
`${indent}Direct CLI checks:`,
|
||||
`${indent}KTX context is ready for agents. Open your coding agent in this directory and ask a data question.`,
|
||||
`${indent}Verify with:`,
|
||||
...commandLines(KTX_NEXT_STEP_DIRECT_COMMANDS, indent),
|
||||
`${indent}Optional MCP:`,
|
||||
...commandLines(KTX_NEXT_STEP_MCP_COMMANDS, indent),
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ describe('standalone built ktx CLI smoke', () => {
|
|||
expect(result.stdout).toContain('Notion:');
|
||||
expect(result.stdout).toContain('Semantic-layer sources:');
|
||||
expect(result.stdout).toContain('Knowledge pages:');
|
||||
expect(result.stdout).toContain('ktx serve --mcp stdio');
|
||||
expect(result.stdout).not.toContain('ktx serve --mcp stdio');
|
||||
expect(result.stdout).not.toContain(['--mode', 'deterministic'].join(' '));
|
||||
});
|
||||
|
||||
|
|
@ -336,7 +336,7 @@ describe('standalone built ktx CLI smoke', () => {
|
|||
expect(inspect.stdout).toContain('ktx agent tools --json');
|
||||
expect(inspect.stdout).toContain('ktx agent context --json');
|
||||
expect(inspect.stdout).not.toContain('ktx ask "your question here"');
|
||||
expect(inspect.stdout).toContain('ktx serve --mcp stdio');
|
||||
expect(inspect.stdout).not.toContain('ktx serve --mcp stdio');
|
||||
});
|
||||
|
||||
it('serves seeded demo wiki and semantic-layer context over stdio MCP', async () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue