Merge pull request #26 from Kaelio/luca-martial/demo-data-wizard-ux

feat(cli): add demo guided tour with real Orbit project data
This commit is contained in:
Luca Martial 2026-05-12 01:06:45 -04:00 committed by GitHub
commit 950fa151ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
104 changed files with 6779 additions and 468 deletions

View file

@ -3,8 +3,6 @@ import { join, resolve } from 'node:path';
import { cancel, isCancel, select } from '@clack/prompts';
import { loadKtxProject } from '@ktx/context/project';
import type { KtxCliIo } from './cli-runtime.js';
import type { KtxDemoArgs } from './demo.js';
import { defaultDemoProjectDir } from './demo-assets.js';
import { formatSetupNextStepLines } from './next-steps.js';
import { isKtxSetupExitError, withSetupInterruptConfirmation } from './setup-interrupt.js';
import {
@ -148,7 +146,6 @@ export interface KtxSetupDeps {
removeAgents?: typeof removeKtxAgentInstall;
readyMenuDeps?: KtxSetupReadyMenuDeps;
entryMenuDeps?: KtxSetupEntryMenuDeps;
demo?: (args: KtxDemoArgs, io: KtxCliIo) => Promise<number>;
}
const SOURCE_DRIVERS = new Set(['dbt', 'metricflow', 'metabase', 'looker', 'lookml', 'notion']);
@ -200,13 +197,13 @@ async function runKtxSetupEntryMenu(
{ value: 'new-project', label: 'Create a new KTX project' },
{ value: 'agents', label: 'Connect a coding agent to KTX' },
{ value: 'status', label: 'Check setup status' },
{ value: 'demo', label: 'Try KTX with packaged demo data' },
{ value: 'demo', label: 'Explore a pre-built KTX project' },
{ value: 'exit', label: 'Exit' },
]
: [
{ value: 'setup', label: 'Set up KTX for my data' },
{ value: 'status', label: 'Check setup status' },
{ value: 'demo', label: 'Try KTX with packaged demo data' },
{ value: 'demo', label: 'Explore a pre-built KTX project' },
{ value: 'exit', label: 'Exit' },
];
const action = (await prompts.select({
@ -221,15 +218,11 @@ async function runKtxSetupDemoFromEntryMenu(
io: KtxCliIo,
deps: KtxSetupDeps,
): Promise<number> {
const runner = deps.demo ?? (await import('./demo.js')).runKtxDemo;
return await runner(
{
command: 'seeded',
projectDir: defaultDemoProjectDir(),
outputMode: 'viz',
inputMode: args.inputMode,
},
const { runDemoTour } = await import('./setup-demo-tour.js');
return await runDemoTour(
{ inputMode: args.inputMode },
io,
{ agents: deps.agents },
);
}