yamchart 0.8.3 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/{advisor-JMWAAWJO.js → advisor-CSVLJFOG.js} +3 -3
  2. package/dist/{chunk-N6PUISAQ.js → chunk-QLBCPJDL.js} +2 -2
  3. package/dist/{chunk-KP4CYPBL.js → chunk-RYTMXP2R.js} +49 -7
  4. package/dist/chunk-RYTMXP2R.js.map +1 -0
  5. package/dist/{chunk-4W6IVOKO.js → chunk-VTLZAE3C.js} +2 -2
  6. package/dist/{chunk-7AVPKKYY.js → chunk-VXDZEBAN.js} +20 -6
  7. package/dist/chunk-VXDZEBAN.js.map +1 -0
  8. package/dist/{connection-utils-VEKXRCOM.js → connection-utils-2SZAG2QM.js} +3 -3
  9. package/dist/{describe-X55JPLES.js → describe-ELE7CAVA.js} +4 -4
  10. package/dist/{dev-NZLS72PG.js → dev-AWJ7TF6G.js} +44 -15
  11. package/dist/dev-AWJ7TF6G.js.map +1 -0
  12. package/dist/dist-2OQOI2PU.js +54 -0
  13. package/dist/index.js +33 -24
  14. package/dist/index.js.map +1 -1
  15. package/dist/{init-UYQE5DPU.js → init-GVBYCLJT.js} +14 -1
  16. package/dist/init-GVBYCLJT.js.map +1 -0
  17. package/dist/public/assets/{EventManagement-7MyQq5KD.js → EventManagement-BoRjqKRW.js} +1 -1
  18. package/dist/public/assets/{LoginPage-BypxvDY2.js → LoginPage-6Mq23h5G.js} +1 -1
  19. package/dist/public/assets/{PublicViewer-CdDaYqTc.js → PublicViewer-D1_damvE.js} +1 -1
  20. package/dist/public/assets/{SetupWizard-CEGLuSGr.js → SetupWizard-OaUCCW42.js} +1 -1
  21. package/dist/public/assets/{ShareManagement-DcPZNRdx.js → ShareManagement-DxGEtGcz.js} +1 -1
  22. package/dist/public/assets/{UserManagement-VZ9Qvds0.js → UserManagement-CY0xL5Sd.js} +1 -1
  23. package/dist/public/assets/{index-Cxn1i3jV.js → index-BG7tFC30.js} +27 -27
  24. package/dist/public/assets/{index.es-06ls9Fpg.js → index.es-CeWJMj7-.js} +1 -1
  25. package/dist/public/assets/{jspdf.es.min-DER4Hnpt.js → jspdf.es.min-mo4OQEJV.js} +3 -3
  26. package/dist/public/index.html +1 -1
  27. package/dist/{query-3F5V5CZH.js → query-P4TSQES4.js} +3 -3
  28. package/dist/{sample-SWYXGWOM.js → sample-3VDU6ZAV.js} +3 -3
  29. package/dist/{search-ARIDL6DA.js → search-L5QA64T7.js} +4 -4
  30. package/dist/{source-resolver-UHKZVOOC.js → source-resolver-TTHGNPBK.js} +4 -4
  31. package/dist/source-resolver-TTHGNPBK.js.map +1 -0
  32. package/dist/{sync-warehouse-J4E2R2PW.js → sync-warehouse-KGT6XSXI.js} +8 -8
  33. package/dist/{tables-VAR2ZKUA.js → tables-IG4RYPCG.js} +4 -4
  34. package/dist/templates/default/docs/yamchart-reference.md +32 -0
  35. package/dist/templates/default/yamchart.yaml +10 -0
  36. package/dist/templates/empty/yamchart.yaml +10 -0
  37. package/dist/{test-SV5SLSLM.js → test-SN75DCIN.js} +3 -3
  38. package/package.json +1 -1
  39. package/dist/chunk-7AVPKKYY.js.map +0 -1
  40. package/dist/chunk-KP4CYPBL.js.map +0 -1
  41. package/dist/dev-NZLS72PG.js.map +0 -1
  42. package/dist/init-UYQE5DPU.js.map +0 -1
  43. /package/dist/{advisor-JMWAAWJO.js.map → advisor-CSVLJFOG.js.map} +0 -0
  44. /package/dist/{chunk-N6PUISAQ.js.map → chunk-QLBCPJDL.js.map} +0 -0
  45. /package/dist/{chunk-4W6IVOKO.js.map → chunk-VTLZAE3C.js.map} +0 -0
  46. /package/dist/{connection-utils-VEKXRCOM.js.map → connection-utils-2SZAG2QM.js.map} +0 -0
  47. /package/dist/{describe-X55JPLES.js.map → describe-ELE7CAVA.js.map} +0 -0
  48. /package/dist/{source-resolver-UHKZVOOC.js.map → dist-2OQOI2PU.js.map} +0 -0
  49. /package/dist/{query-3F5V5CZH.js.map → query-P4TSQES4.js.map} +0 -0
  50. /package/dist/{sample-SWYXGWOM.js.map → sample-3VDU6ZAV.js.map} +0 -0
  51. /package/dist/{search-ARIDL6DA.js.map → search-L5QA64T7.js.map} +0 -0
  52. /package/dist/{sync-warehouse-J4E2R2PW.js.map → sync-warehouse-KGT6XSXI.js.map} +0 -0
  53. /package/dist/{tables-VAR2ZKUA.js.map → tables-IG4RYPCG.js.map} +0 -0
  54. /package/dist/{test-SV5SLSLM.js.map → test-SN75DCIN.js.map} +0 -0
@@ -0,0 +1,54 @@
1
+ import {
2
+ ChartSchema,
3
+ ConnectionSchema,
4
+ DashboardSchema,
5
+ DimensionSchema,
6
+ DimensionTypeSchema,
7
+ EventSchema,
8
+ EventsFileSchema,
9
+ MeasureSchema,
10
+ MeasureTypeSchema,
11
+ ModelMetadataSchema,
12
+ ModelSchema,
13
+ ParameterSchema,
14
+ ProjectSchema,
15
+ RelationshipSchema,
16
+ ScheduleSchema,
17
+ SemanticConfigSchema,
18
+ SemanticEntitySchema,
19
+ SemanticFilterOperatorSchema,
20
+ SemanticFilterSchema,
21
+ SemanticModelSchema,
22
+ SemanticQuerySchema,
23
+ VERSION,
24
+ deepMerge,
25
+ resolveProjectConfig
26
+ } from "./chunk-RYTMXP2R.js";
27
+ import "./chunk-DGUM43GV.js";
28
+ export {
29
+ ChartSchema,
30
+ ConnectionSchema,
31
+ DashboardSchema,
32
+ DimensionSchema,
33
+ DimensionTypeSchema,
34
+ EventSchema,
35
+ EventsFileSchema,
36
+ MeasureSchema,
37
+ MeasureTypeSchema,
38
+ ModelMetadataSchema,
39
+ ModelSchema,
40
+ ParameterSchema,
41
+ ProjectSchema,
42
+ RelationshipSchema,
43
+ ScheduleSchema,
44
+ SemanticConfigSchema,
45
+ SemanticEntitySchema,
46
+ SemanticFilterOperatorSchema,
47
+ SemanticFilterSchema,
48
+ SemanticModelSchema,
49
+ SemanticQuerySchema,
50
+ VERSION,
51
+ deepMerge,
52
+ resolveProjectConfig
53
+ };
54
+ //# sourceMappingURL=dist-2OQOI2PU.js.map
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  findProjectRoot,
7
7
  loadEnvFile,
8
8
  validateProject
9
- } from "./chunk-N6PUISAQ.js";
9
+ } from "./chunk-QLBCPJDL.js";
10
10
  import {
11
11
  detail,
12
12
  error,
@@ -17,7 +17,7 @@ import {
17
17
  success,
18
18
  warning
19
19
  } from "./chunk-HJVVHYVN.js";
20
- import "./chunk-KP4CYPBL.js";
20
+ import "./chunk-RYTMXP2R.js";
21
21
  import "./chunk-5N3FYFBV.js";
22
22
  import "./chunk-UND73EOB.js";
23
23
  import "./chunk-DGUM43GV.js";
@@ -32,6 +32,13 @@ var __dirname = dirname(fileURLToPath(import.meta.url));
32
32
  var pkg = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
33
33
  var program = new Command();
34
34
  program.name("yamchart").description("Git-native business intelligence dashboards").version(pkg.version);
35
+ program.option("--env <name>", "Environment to use (default: local, or YAMCHART_ENV)");
36
+ program.hook("preAction", () => {
37
+ const opts = program.opts();
38
+ if (opts.env) {
39
+ process.env.YAMCHART_ENV = opts.env;
40
+ }
41
+ });
35
42
  program.command("validate").description("Validate configuration files").argument("[path]", "Path to yamchart project", ".").option("--dry-run", "Connect to database and test queries with EXPLAIN").option("-c, --connection <name>", "Connection to use for dry-run").option("--json", "Output as JSON").action(async (path, options) => {
36
43
  const startPath = resolve(path);
37
44
  const projectDir = await findProjectRoot(startPath);
@@ -97,16 +104,18 @@ program.command("dev").description("Start development server with hot reload").a
97
104
  detail("Run this command from a yamchart project directory");
98
105
  process.exit(2);
99
106
  }
100
- const { runDevServer } = await import("./dev-NZLS72PG.js");
107
+ const globalOpts = program.opts();
108
+ const { runDevServer } = await import("./dev-AWJ7TF6G.js");
101
109
  await runDevServer(projectDir, {
102
110
  port: parseInt(options.port, 10),
103
111
  apiOnly: options.apiOnly ?? false,
104
112
  open: options.open,
105
- version: pkg.version
113
+ version: pkg.version,
114
+ env: globalOpts.env
106
115
  });
107
116
  });
108
117
  program.command("init").description("Create a new yamchart project").argument("[directory]", "Target directory", ".").option("--example", "Create full example project with sample database").option("--empty", "Create only yamchart.yaml (no connections, models, or charts)").option("--force", "Overwrite existing files").action(async (directory, options) => {
109
- const { initProject } = await import("./init-UYQE5DPU.js");
118
+ const { initProject } = await import("./init-GVBYCLJT.js");
110
119
  const targetDir = resolve(directory);
111
120
  const result = await initProject(targetDir, options);
112
121
  if (!result.success) {
@@ -170,11 +179,11 @@ program.command("sync-dbt").description("Sync dbt project metadata into AI-reada
170
179
  if (!options.targetDatabase) {
171
180
  try {
172
181
  const { readFile } = await import("fs/promises");
173
- const { resolveConnection } = await import("./connection-utils-VEKXRCOM.js");
182
+ const { resolveConnection } = await import("./connection-utils-2SZAG2QM.js");
174
183
  const { detectDatabaseMismatch } = await import("./rewrite-database-FDJIXKZ2.js");
175
184
  const catalogJsonStr = await readFile(join(projectDir, ".yamchart", "catalog.json"), "utf-8");
176
185
  const catalogData = JSON.parse(catalogJsonStr);
177
- const connection = await resolveConnection(projectDir);
186
+ const connection = await resolveConnection(projectDir, void 0, program.opts().env);
178
187
  const connDb = connection.config?.database;
179
188
  const mismatch = detectDatabaseMismatch(catalogData.models, connDb);
180
189
  if (mismatch.mismatch) {
@@ -224,7 +233,7 @@ program.command("test").description("Run model tests (@returns schema checks and
224
233
  }
225
234
  loadEnvFile(projectDir);
226
235
  try {
227
- const { testProject, formatTestOutput } = await import("./test-SV5SLSLM.js");
236
+ const { testProject, formatTestOutput } = await import("./test-SN75DCIN.js");
228
237
  const result = await testProject(projectDir, model, {
229
238
  connection: options.connection,
230
239
  json: options.json
@@ -273,7 +282,7 @@ program.command("tables").description("List tables and views in the connected da
273
282
  loadEnvFile(projectDir);
274
283
  try {
275
284
  if (options.compare) {
276
- const { resolveTablesSource } = await import("./source-resolver-UHKZVOOC.js");
285
+ const { resolveTablesSource } = await import("./source-resolver-TTHGNPBK.js");
277
286
  const { compareTables, formatCompareTables } = await import("./compare-ZN6RUOOQ.js");
278
287
  let localResult;
279
288
  try {
@@ -304,7 +313,7 @@ program.command("tables").description("List tables and views in the connected da
304
313
  }
305
314
  return;
306
315
  }
307
- const { listTables } = await import("./tables-VAR2ZKUA.js");
316
+ const { listTables } = await import("./tables-IG4RYPCG.js");
308
317
  const result = await listTables(projectDir, {
309
318
  ...options,
310
319
  source: options.source || "auto"
@@ -342,7 +351,7 @@ program.command("describe").description("Show columns and types for a table").ar
342
351
  loadEnvFile(projectDir);
343
352
  try {
344
353
  if (options.compare) {
345
- const { resolveDescribeSource } = await import("./source-resolver-UHKZVOOC.js");
354
+ const { resolveDescribeSource } = await import("./source-resolver-TTHGNPBK.js");
346
355
  const { compareColumns, formatCompareColumns } = await import("./compare-ZN6RUOOQ.js");
347
356
  let localResult;
348
357
  try {
@@ -364,7 +373,7 @@ program.command("describe").description("Show columns and types for a table").ar
364
373
  }
365
374
  return;
366
375
  }
367
- const { describeTable } = await import("./describe-X55JPLES.js");
376
+ const { describeTable } = await import("./describe-ELE7CAVA.js");
368
377
  const result = await describeTable(projectDir, table, {
369
378
  ...options,
370
379
  source: options.source || "auto"
@@ -403,8 +412,8 @@ program.command("query").description("Execute SQL against a connection").argumen
403
412
  }
404
413
  loadEnvFile(projectDir);
405
414
  try {
406
- const { executeQuery } = await import("./query-3F5V5CZH.js");
407
- const { formatTable, formatJSON } = await import("./connection-utils-VEKXRCOM.js");
415
+ const { executeQuery } = await import("./query-P4TSQES4.js");
416
+ const { formatTable, formatJSON } = await import("./connection-utils-2SZAG2QM.js");
408
417
  const limit = options.limit ? parseInt(options.limit, 10) : void 0;
409
418
  const result = await executeQuery(projectDir, sql, {
410
419
  connection: options.connection,
@@ -431,8 +440,8 @@ program.command("sample").description("Show sample rows from a table or dbt mode
431
440
  }
432
441
  loadEnvFile(projectDir);
433
442
  try {
434
- const { sampleTable } = await import("./sample-SWYXGWOM.js");
435
- const { formatTable, formatJSON } = await import("./connection-utils-VEKXRCOM.js");
443
+ const { sampleTable } = await import("./sample-3VDU6ZAV.js");
444
+ const { formatTable, formatJSON } = await import("./connection-utils-2SZAG2QM.js");
436
445
  const limit = options.limit ? parseInt(options.limit, 10) : void 0;
437
446
  const result = await sampleTable(projectDir, table, {
438
447
  connection: options.connection,
@@ -462,7 +471,7 @@ program.command("search").description("Search for tables and columns by keyword"
462
471
  }
463
472
  loadEnvFile(projectDir);
464
473
  try {
465
- const { searchDatabase } = await import("./search-ARIDL6DA.js");
474
+ const { searchDatabase } = await import("./search-L5QA64T7.js");
466
475
  const result = await searchDatabase(projectDir, keyword, {
467
476
  ...options,
468
477
  source: options.source || "auto"
@@ -516,7 +525,7 @@ catalogCmd.command("tables").description("List tables from cached catalog").opti
516
525
  process.exit(2);
517
526
  }
518
527
  try {
519
- const { listTables } = await import("./tables-VAR2ZKUA.js");
528
+ const { listTables } = await import("./tables-IG4RYPCG.js");
520
529
  const result = await listTables(projectDir, {
521
530
  source: "catalog",
522
531
  schema: options.schema
@@ -558,7 +567,7 @@ catalogCmd.command("describe").description("Show cached columns and types for a
558
567
  process.exit(2);
559
568
  }
560
569
  try {
561
- const { describeTable } = await import("./describe-X55JPLES.js");
570
+ const { describeTable } = await import("./describe-ELE7CAVA.js");
562
571
  const result = await describeTable(projectDir, table, { source: "catalog" });
563
572
  if (options.json) {
564
573
  console.log(JSON.stringify(result.columns, null, 2));
@@ -600,7 +609,7 @@ catalogCmd.command("search").description("Search cached metadata for tables and
600
609
  process.exit(2);
601
610
  }
602
611
  try {
603
- const { searchDatabase } = await import("./search-ARIDL6DA.js");
612
+ const { searchDatabase } = await import("./search-L5QA64T7.js");
604
613
  const result = await searchDatabase(projectDir, keyword, { source: "catalog" });
605
614
  if (options.json) {
606
615
  console.log(JSON.stringify(result.results, null, 2));
@@ -725,7 +734,7 @@ program.command("sync-warehouse").description("Sync warehouse table metadata int
725
734
  }
726
735
  loadEnvFile(projectDir);
727
736
  try {
728
- const { runSyncWarehouse } = await import("./sync-warehouse-J4E2R2PW.js");
737
+ const { runSyncWarehouse } = await import("./sync-warehouse-KGT6XSXI.js");
729
738
  await runSyncWarehouse(projectDir, options);
730
739
  } catch (err) {
731
740
  error(err instanceof Error ? err.message : String(err));
@@ -776,7 +785,7 @@ program.command("advisor").description("AI-powered dbt model advisor \u2014 sugg
776
785
  process.exit(2);
777
786
  }
778
787
  loadEnvFile(projectDir);
779
- const { runAdvisor } = await import("./advisor-JMWAAWJO.js");
788
+ const { runAdvisor } = await import("./advisor-CSVLJFOG.js");
780
789
  await runAdvisor(projectDir, question, {
781
790
  top: options.top ? parseInt(options.top, 10) : 5,
782
791
  json: options.json,
@@ -866,8 +875,8 @@ semanticCmd.command("query").description("Run a structured query against the sem
866
875
  console.log(result.sql);
867
876
  return;
868
877
  }
869
- const { resolveConnection, createConnector, formatTable, formatJSON } = await import("./connection-utils-VEKXRCOM.js");
870
- const connection = await resolveConnection(projectDir, options.connection);
878
+ const { resolveConnection, createConnector, formatTable, formatJSON } = await import("./connection-utils-2SZAG2QM.js");
879
+ const connection = await resolveConnection(projectDir, options.connection, program.opts().env);
871
880
  const connector = createConnector(connection, projectDir);
872
881
  const start = performance.now();
873
882
  await connector.connect();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { resolve, basename, dirname, join } from 'path';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { validateProject } from './commands/validate.js';\nimport { findProjectRoot, loadEnvFile } from './utils/config.js';\nimport pc from 'picocolors';\nimport * as output from './utils/output.js';\nimport { checkForUpdate } from './utils/update-check.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\n\nconst program = new Command();\n\nprogram\n .name('yamchart')\n .description('Git-native business intelligence dashboards')\n .version(pkg.version);\n\nprogram\n .command('validate')\n .description('Validate configuration files')\n .argument('[path]', 'Path to yamchart project', '.')\n .option('--dry-run', 'Connect to database and test queries with EXPLAIN')\n .option('-c, --connection <name>', 'Connection to use for dry-run')\n .option('--json', 'Output as JSON')\n .action(async (path: string, options: { dryRun?: boolean; connection?: string; json?: boolean }) => {\n const startPath = resolve(path);\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n if (options.json) {\n console.log(JSON.stringify({ success: false, error: 'yamchart.yaml not found' }));\n } else {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n }\n process.exit(2);\n }\n\n // Load .env file\n loadEnvFile(projectDir);\n\n if (!options.json) {\n output.header('Validating yamchart project...');\n }\n\n const result = await validateProject(projectDir, {\n dryRun: options.dryRun ?? false,\n connection: options.connection,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n // Print results\n for (const error of result.errors) {\n output.error(error.file);\n output.detail(error.message);\n if (error.suggestion) {\n output.detail(error.suggestion);\n }\n }\n\n for (const warning of result.warnings) {\n output.warning(warning.file);\n output.detail(warning.message);\n }\n\n output.newline();\n\n if (result.success) {\n output.success(`Schema: ${result.stats.passed} passed`);\n } else {\n output.error(`Schema: ${result.stats.passed} passed, ${result.stats.failed} failed`);\n }\n\n if (result.dryRunStats) {\n output.newline();\n if (result.dryRunStats.failed === 0) {\n output.success(`Queries: ${result.dryRunStats.passed} passed (EXPLAIN OK)`);\n } else {\n output.error(`Queries: ${result.dryRunStats.passed} passed, ${result.dryRunStats.failed} failed`);\n }\n }\n\n output.newline();\n\n if (result.success) {\n output.success('Validation passed');\n } else {\n output.error(`Validation failed with ${result.errors.length} error(s)`);\n }\n }\n\n process.exit(result.success ? 0 : 1);\n });\n\nprogram\n .command('dev')\n .description('Start development server with hot reload')\n .argument('[path]', 'Path to yamchart project', '.')\n .option('-p, --port <number>', 'Port to listen on', '3001')\n .option('--api-only', 'Only serve API, no web UI')\n .option('--no-open', 'Do not open browser automatically')\n .action(async (path: string, options: { port: string; apiOnly?: boolean; open: boolean }) => {\n const startPath = resolve(path);\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n const { runDevServer } = await import('./commands/dev.js');\n\n await runDevServer(projectDir, {\n port: parseInt(options.port, 10),\n apiOnly: options.apiOnly ?? false,\n open: options.open,\n version: pkg.version,\n });\n });\n\nprogram\n .command('init')\n .description('Create a new yamchart project')\n .argument('[directory]', 'Target directory', '.')\n .option('--example', 'Create full example project with sample database')\n .option('--empty', 'Create only yamchart.yaml (no connections, models, or charts)')\n .option('--force', 'Overwrite existing files')\n .action(async (directory: string, options: { example?: boolean; empty?: boolean; force?: boolean }) => {\n const { initProject } = await import('./commands/init.js');\n const targetDir = resolve(directory);\n\n const result = await initProject(targetDir, options);\n\n if (!result.success) {\n output.error(result.error || 'Failed to create project');\n process.exit(1);\n }\n\n output.newline();\n output.success(`Created ${directory === '.' ? basename(targetDir) : directory}/`);\n for (const file of result.files.slice(0, 10)) {\n output.detail(file);\n }\n if (result.files.length > 10) {\n output.detail(`... and ${result.files.length - 10} more files`);\n }\n output.newline();\n output.info(`Run \\`cd ${directory === '.' ? basename(targetDir) : directory} && yamchart dev\\` to start.`);\n });\n\nprogram\n .command('sync-dbt')\n .description('Sync dbt project metadata into AI-readable catalog')\n .option('-s, --source <type>', 'Source type: local, github, dbt-cloud', 'local')\n .option('-p, --path <dir>', 'Path to dbt project (for local source)')\n .option('--repo <repo>', 'GitHub repository (for github source)')\n .option('--branch <branch>', 'Git branch (for github source)', 'main')\n .option('-i, --include <patterns...>', 'Include glob patterns')\n .option('-e, --exclude <patterns...>', 'Exclude glob patterns')\n .option('-t, --tag <tags...>', 'Filter by dbt tags')\n .option('--refresh', 'Re-sync using saved configuration')\n .option('--target-database <database>', 'Override database in ref() paths (e.g. switch from dev to prod)')\n .action(async (options: {\n source: 'local' | 'github' | 'dbt-cloud';\n path?: string;\n repo?: string;\n branch?: string;\n include?: string[];\n exclude?: string[];\n tag?: string[];\n refresh?: boolean;\n targetDatabase?: string;\n }) => {\n const { syncDbt, loadSyncConfig } = await import('./commands/sync-dbt.js');\n\n // Find project root\n const projectDir = await findProjectRoot(process.cwd());\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n // Handle refresh mode\n if (options.refresh) {\n const savedConfig = await loadSyncConfig(projectDir);\n if (!savedConfig) {\n output.error('No saved sync config found');\n output.detail('Run sync-dbt without --refresh first');\n process.exit(1);\n }\n output.info(`Re-syncing from ${savedConfig.source}:${savedConfig.path || savedConfig.repo}`);\n }\n\n const spin = output.spinner('Syncing dbt metadata...');\n\n const result = await syncDbt(projectDir, {\n source: options.source,\n path: options.path,\n repo: options.repo,\n branch: options.branch,\n include: options.include || [],\n exclude: options.exclude || [],\n tags: options.tag || [],\n refresh: options.refresh,\n targetDatabase: options.targetDatabase,\n });\n\n spin.stop();\n\n if (!result.success) {\n output.error(result.error || 'Sync failed');\n process.exit(1);\n }\n\n output.success(`Synced ${result.modelsIncluded} models to .yamchart/catalog.md`);\n if (result.modelsExcluded > 0) {\n output.detail(`${result.modelsExcluded} models filtered out`);\n }\n\n // Show lineage warnings\n if (result.warnings) {\n for (const w of result.warnings) {\n output.warning(w);\n }\n }\n\n // Check for database mismatch (skip if --target-database was used)\n if (!options.targetDatabase) {\n try {\n const { readFile } = await import('fs/promises');\n const { resolveConnection } = await import('./commands/connection-utils.js');\n const { detectDatabaseMismatch } = await import('./dbt/rewrite-database.js');\n const catalogJsonStr = await readFile(join(projectDir, '.yamchart', 'catalog.json'), 'utf-8');\n const catalogData = JSON.parse(catalogJsonStr);\n const connection = await resolveConnection(projectDir);\n // Extract database from connection config (varies by type)\n const connDb = (connection as Record<string, any>).config?.database as string | undefined;\n const mismatch = detectDatabaseMismatch(catalogData.models, connDb);\n if (mismatch.mismatch) {\n output.warning(\n `Catalog tables reference database \"${mismatch.catalogDatabase}\" but your default ` +\n `connection uses \"${mismatch.connectionDatabase}\". Models using ref() may query the wrong database.`\n );\n output.detail(\n `To fix: yamchart sync-dbt --refresh --target-database ${mismatch.connectionDatabase}`\n );\n }\n } catch {\n // Connection not configured or unreadable — skip silently\n }\n }\n });\n\nprogram\n .command('generate')\n .description('Generate SQL model stubs from dbt catalog')\n .argument('[model]', 'Specific model to generate (optional)')\n .option('--yolo', 'Skip all prompts, use defaults for everything')\n .action(async (model: string | undefined, options: { yolo?: boolean }) => {\n const { generate } = await import('./commands/generate.js');\n\n const projectDir = await findProjectRoot(process.cwd());\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n const result = await generate(projectDir, {\n model,\n yolo: options.yolo,\n });\n\n if (!result.success) {\n output.error(result.error || 'Generate failed');\n process.exit(1);\n }\n\n output.success(`Generated ${result.filesCreated} model stubs`);\n if (result.filesSkipped > 0) {\n output.detail(`${result.filesSkipped} files skipped`);\n }\n });\n\nprogram\n .command('test')\n .description('Run model tests (@returns schema checks and @tests data assertions)')\n .argument('[model]', 'Specific model to test (optional, tests all if omitted)')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .action(async (model: string | undefined, options: { connection?: string; json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n if (options.json) {\n console.log(JSON.stringify({ success: false, error: 'yamchart.yaml not found' }));\n } else {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n }\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { testProject, formatTestOutput } = await import('./commands/test.js');\n const result = await testProject(projectDir, model, {\n connection: options.connection,\n json: options.json,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n formatTestOutput(result, result.connectionName);\n }\n\n process.exit(result.success ? 0 : 1);\n } catch (err) {\n if (options.json) {\n console.log(\n JSON.stringify({ success: false, error: err instanceof Error ? err.message : String(err) }),\n );\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(2);\n }\n });\n\nprogram\n .command('update')\n .description('Check for yamchart updates')\n .action(async () => {\n const { runUpdate } = await import('./commands/update.js');\n await runUpdate(pkg.version);\n });\n\nprogram\n .command('reset-password')\n .description('Reset a user password (requires auth to be enabled)')\n .requiredOption('-e, --email <email>', 'Email address of the user')\n .action(async (options: { email: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n const { resetPassword } = await import('./commands/reset-password.js');\n await resetPassword(projectDir, options.email);\n });\n\nprogram\n .command('tables')\n .description('List tables and views in the connected database')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('-s, --schema <name>', 'Filter to schema')\n .option('-d, --database <name>', 'Filter to database (Snowflake/Databricks)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .option('--compare', 'Compare local metadata against live database')\n .action(async (options: { connection?: string; schema?: string; database?: string; json?: boolean; source?: string; compare?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n if (options.compare) {\n const { resolveTablesSource } = await import('./commands/source-resolver.js');\n const { compareTables, formatCompareTables } = await import('./commands/compare.js');\n\n let localResult;\n try {\n localResult = await resolveTablesSource(projectDir, 'catalog', options.connection, {\n schema: options.schema,\n database: options.database,\n });\n } catch {\n try {\n localResult = await resolveTablesSource(projectDir, 'model', options.connection, {\n schema: options.schema,\n database: options.database,\n });\n } catch {\n output.error('Cannot compare — no local metadata found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n process.exit(1);\n }\n }\n\n const dbResult = await resolveTablesSource(projectDir, 'db', options.connection, {\n schema: options.schema,\n database: options.database,\n });\n const diffs = compareTables(localResult.tables, dbResult.tables);\n\n if (options.json) {\n console.log(JSON.stringify(diffs, null, 2));\n } else {\n console.log(formatCompareTables(localResult.source, diffs));\n }\n return;\n }\n\n const { listTables } = await import('./commands/tables.js');\n const result = await listTables(projectDir, {\n ...options,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.tables, null, 2));\n } else {\n const sourceLabel = result.source === 'db'\n ? `${result.connectionName} (${result.connectionType})`\n : `Source: ${result.source}`;\n output.header(`Tables in ${sourceLabel}`);\n if (result.tables.length === 0) {\n output.info('No tables found');\n } else {\n for (const table of result.tables) {\n const schema = table.schema ? `${table.schema}.` : '';\n const typeLabel = table.type === 'VIEW' ? pc.dim(' (view)') : '';\n console.log(` ${schema}${table.name}${typeLabel}`);\n }\n output.newline();\n output.info(`${result.tables.length} table(s) found${result.durationMs > 0 ? ` (${result.durationMs.toFixed(0)}ms)` : ''}`);\n }\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('describe')\n .description('Show columns and types for a table')\n .argument('<table>', 'Table name (can be fully qualified, e.g. schema.table)')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .option('--compare', 'Compare local metadata against live database')\n .action(async (table: string, options: { connection?: string; json?: boolean; source?: string; compare?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n if (options.compare) {\n const { resolveDescribeSource } = await import('./commands/source-resolver.js');\n const { compareColumns, formatCompareColumns } = await import('./commands/compare.js');\n\n let localResult;\n try {\n localResult = await resolveDescribeSource(projectDir, table, 'catalog', options.connection);\n } catch {\n try {\n localResult = await resolveDescribeSource(projectDir, table, 'model', options.connection);\n } catch {\n output.error('Cannot compare — no local metadata found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n process.exit(1);\n }\n }\n\n const dbResult = await resolveDescribeSource(projectDir, table, 'db', options.connection);\n const diffs = compareColumns(localResult.columns, dbResult.columns);\n\n if (options.json) {\n console.log(JSON.stringify(diffs, null, 2));\n } else {\n console.log(formatCompareColumns(localResult.table, localResult.source, diffs));\n }\n return;\n }\n\n const { describeTable } = await import('./commands/describe.js');\n const result = await describeTable(projectDir, table, {\n ...options,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.columns, null, 2));\n } else {\n if (result.resolvedFrom) {\n output.detail(`Resolved \"${result.resolvedFrom}\" → ${result.table}`);\n }\n const sourceLabel = result.source === 'db'\n ? `${result.connectionName} (${result.connectionType})`\n : `Source: ${result.source}`;\n output.header(`${result.table} (${sourceLabel})`);\n\n const nameWidth = Math.max(4, ...result.columns.map((c) => c.name.length));\n const typeWidth = Math.max(4, ...result.columns.map((c) => c.type.length));\n\n console.log(` ${'name'.padEnd(nameWidth)} ${'type'.padEnd(typeWidth)} nullable`);\n console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(typeWidth)} ${'─'.repeat(8)}`);\n\n for (const col of result.columns) {\n const nullable = col.nullable === 'YES' ? pc.dim('yes') : 'no';\n console.log(` ${col.name.padEnd(nameWidth)} ${pc.dim(col.type.padEnd(typeWidth))} ${nullable}`);\n }\n\n output.newline();\n output.info(`${result.columns.length} column(s)${result.durationMs > 0 ? ` (${result.durationMs.toFixed(0)}ms)` : ''}`);\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('query')\n .description('Execute SQL against a connection')\n .argument('<sql>', 'SQL query to execute')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .option('-l, --limit <number>', 'Max rows to return (default: 100)')\n .action(async (sql: string, options: { connection?: string; json?: boolean; limit?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { executeQuery } = await import('./commands/query.js');\n const { formatTable, formatJSON } = await import('./commands/connection-utils.js');\n\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const result = await executeQuery(projectDir, sql, {\n connection: options.connection,\n json: options.json,\n limit,\n });\n\n if (options.json) {\n console.log(formatJSON(result));\n } else {\n console.log(formatTable(result));\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('sample')\n .description('Show sample rows from a table or dbt model')\n .argument('<table>', 'Table name or dbt model name')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('-l, --limit <number>', 'Rows to show (default: 5)')\n .option('--json', 'Output as JSON')\n .action(async (table: string, options: { connection?: string; json?: boolean; limit?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { sampleTable } = await import('./commands/sample.js');\n const { formatTable, formatJSON } = await import('./commands/connection-utils.js');\n\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const result = await sampleTable(projectDir, table, {\n connection: options.connection,\n json: options.json,\n limit,\n });\n\n if (options.json) {\n console.log(formatJSON(result));\n } else {\n if (result.resolvedFrom) {\n output.detail(`Resolved \"${result.resolvedFrom}\" → ${result.table}`);\n }\n console.log(formatTable(result));\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('search')\n .description('Search for tables and columns by keyword')\n .argument('<keyword>', 'Keyword to search for')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .action(async (keyword: string, options: { connection?: string; json?: boolean; source?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { searchDatabase } = await import('./commands/search.js');\n const result = await searchDatabase(projectDir, keyword, {\n ...options,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.results, null, 2));\n } else {\n const sourceLabel = result.source === 'db'\n ? `${result.connectionName} (${result.connectionType})`\n : `Source: ${result.source}`;\n output.header(`Search results for \"${result.keyword}\" in ${sourceLabel}`);\n\n const tables = result.results.filter((r) => r.type === 'table');\n const columns = result.results.filter((r) => r.type === 'column');\n\n if (tables.length > 0) {\n output.newline();\n console.log(' Tables:');\n for (const t of tables) {\n const qualified = t.schema ? `${t.schema}.${t.table}` : t.table;\n console.log(` ${qualified}`);\n }\n }\n\n if (columns.length > 0) {\n output.newline();\n console.log(' Columns:');\n const nameWidth = Math.max(...columns.map((c) => {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n return qualified.length;\n }));\n for (const c of columns) {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n const colType = c.columnType ? pc.dim(c.columnType) : '';\n console.log(` ${qualified.padEnd(nameWidth + 2)}${colType}`);\n }\n }\n\n if (result.results.length === 0) {\n output.detail('No matches found');\n }\n\n output.newline();\n output.info(`${result.results.length} result(s)${result.durationMs > 0 ? ` (${result.durationMs.toFixed(0)}ms)` : ''}`);\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst catalogCmd = program\n .command('catalog')\n .description('Explore cached local metadata (no database connection needed)');\n\ncatalogCmd\n .command('tables')\n .description('List tables from cached catalog')\n .option('-s, --schema <name>', 'Filter to schema')\n .option('--json', 'Output as JSON')\n .action(async (options: { schema?: string; json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { listTables } = await import('./commands/tables.js');\n const result = await listTables(projectDir, {\n source: 'catalog',\n schema: options.schema,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.tables, null, 2));\n } else {\n output.header('Tables (from catalog)');\n if (result.tables.length === 0) {\n output.info('No tables found in catalog');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else {\n const filtered = options.schema\n ? result.tables.filter((t) => t.schema.toLowerCase().includes(options.schema!.toLowerCase()))\n : result.tables;\n for (const table of filtered) {\n const schema = table.schema ? `${table.schema}.` : '';\n const typeLabel = table.type === 'VIEW' ? pc.dim(' (view)') : table.type === 'SOURCE' ? pc.dim(' (source)') : '';\n console.log(` ${schema}${table.name}${typeLabel}`);\n }\n output.newline();\n output.info(`${filtered.length} table(s) from catalog`);\n }\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('No catalog found')) {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\ncatalogCmd\n .command('describe')\n .description('Show cached columns and types for a table')\n .argument('<table>', 'Table name or model name')\n .option('--json', 'Output as JSON')\n .action(async (table: string, options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { describeTable } = await import('./commands/describe.js');\n const result = await describeTable(projectDir, table, { source: 'catalog' });\n\n if (options.json) {\n console.log(JSON.stringify(result.columns, null, 2));\n } else {\n if (result.resolvedFrom) {\n output.detail(`Resolved \"${result.resolvedFrom}\" → ${result.table}`);\n }\n output.header(`${result.table} (from catalog)`);\n\n const nameWidth = Math.max(4, ...result.columns.map((c) => c.name.length));\n const typeWidth = Math.max(4, ...result.columns.map((c) => c.type.length));\n\n console.log(` ${'name'.padEnd(nameWidth)} ${'type'.padEnd(typeWidth)} nullable`);\n console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(typeWidth)} ${'─'.repeat(8)}`);\n\n for (const col of result.columns) {\n const nullable = col.nullable === 'YES' ? pc.dim('yes') : 'no';\n console.log(` ${col.name.padEnd(nameWidth)} ${pc.dim(col.type.padEnd(typeWidth))} ${nullable}`);\n }\n\n output.newline();\n output.info(`${result.columns.length} column(s)`);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('No catalog found')) {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else if (err instanceof Error && err.message.includes('not found in catalog')) {\n output.error(err.message);\n output.detail('Try `yamchart catalog search` to find available tables');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\ncatalogCmd\n .command('search')\n .description('Search cached metadata for tables and columns')\n .argument('<keyword>', 'Keyword to search for')\n .option('--json', 'Output as JSON')\n .action(async (keyword: string, options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { searchDatabase } = await import('./commands/search.js');\n const result = await searchDatabase(projectDir, keyword, { source: 'catalog' });\n\n if (options.json) {\n console.log(JSON.stringify(result.results, null, 2));\n } else {\n output.header(`Search results for \"${keyword}\" (from catalog)`);\n\n const tables = result.results.filter((r) => r.type === 'table');\n const columns = result.results.filter((r) => r.type === 'column');\n\n if (tables.length > 0) {\n output.newline();\n console.log(' Tables:');\n for (const t of tables) {\n const qualified = t.schema ? `${t.schema}.${t.table}` : t.table;\n console.log(` ${qualified}`);\n }\n }\n\n if (columns.length > 0) {\n output.newline();\n console.log(' Columns:');\n const nameWidth = Math.max(...columns.map((c) => {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n return qualified.length;\n }));\n for (const c of columns) {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n const colType = c.columnType ? pc.dim(c.columnType) : '';\n console.log(` ${qualified.padEnd(nameWidth + 2)}${colType}`);\n }\n }\n\n if (result.results.length === 0) {\n output.detail('No matches found in catalog');\n output.detail('Try `yamchart search <keyword>` to search the live database');\n }\n\n output.newline();\n output.info(`${result.results.length} result(s) from catalog`);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('No catalog found')) {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\ncatalogCmd\n .command('status')\n .description('Show catalog sync status')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { readFile } = await import('fs/promises');\n const catalogPath = join(projectDir, '.yamchart', 'catalog.json');\n\n let catalogData: { syncedAt?: string; source?: { type: string }; models?: Array<{ source?: string; columns?: unknown[] }> };\n try {\n catalogData = JSON.parse(await readFile(catalogPath, 'utf-8'));\n } catch {\n if (options.json) {\n console.log(JSON.stringify({ exists: false }));\n } else {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n }\n process.exit(1);\n return;\n }\n\n const models = catalogData.models || [];\n const dbtModels = models.filter((m) => m.source === 'dbt');\n const warehouseModels = models.filter((m) => m.source === 'warehouse');\n const sourceModels = models.filter((m) => m.source === 'dbt-source');\n const totalColumns = models.reduce((sum, m) => sum + (m.columns?.length || 0), 0);\n\n // Try to load warehouse sync state\n let syncState: { syncedAt?: string; connection?: string; schemas?: string[] } | null = null;\n try {\n const syncPath = join(projectDir, '.yamchart', 'warehouse-sync.json');\n syncState = JSON.parse(await readFile(syncPath, 'utf-8'));\n } catch {\n // No sync state\n }\n\n if (options.json) {\n console.log(JSON.stringify({\n exists: true,\n syncedAt: catalogData.syncedAt,\n source: catalogData.source,\n models: models.length,\n dbtModels: dbtModels.length,\n warehouseModels: warehouseModels.length,\n sourceModels: sourceModels.length,\n totalColumns,\n warehouseSync: syncState ? {\n syncedAt: syncState.syncedAt,\n connection: syncState.connection,\n schemas: syncState.schemas,\n } : null,\n }, null, 2));\n } else {\n output.header('Catalog Status');\n console.log(` Last synced: ${catalogData.syncedAt || 'unknown'}`);\n console.log(` Models: ${models.length} total (${dbtModels.length} dbt, ${warehouseModels.length} warehouse, ${sourceModels.length} sources)`);\n console.log(` Columns: ${totalColumns}`);\n\n if (syncState) {\n output.newline();\n console.log(` Warehouse sync:`);\n console.log(` Connection: ${syncState.connection || 'default'}`);\n console.log(` Schemas: ${syncState.schemas?.join(', ') || 'all'}`);\n console.log(` Last sync: ${syncState.syncedAt || 'unknown'}`);\n }\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('sync-warehouse')\n .description('Sync warehouse table metadata into the catalog')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('-s, --schema <schemas>', 'Comma-separated schemas to sync')\n .option('-d, --database <name>', 'Database to sync (Snowflake/Databricks)')\n .option('--skip-samples', 'Skip sample row collection')\n .option('--refresh', 'Re-run with saved connection/schema config')\n .option('--full', 'Force full re-sync (ignore incremental state)')\n .option('--json', 'Output sync summary as JSON')\n .action(async (options) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { runSyncWarehouse } = await import('./commands/sync-warehouse.js');\n await runSyncWarehouse(projectDir, options);\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('lineage')\n .description('Show upstream dependencies for a model')\n .argument('<model>', 'Model name to trace lineage for')\n .option('--depth <n>', 'Maximum depth to trace (default: unlimited)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .action(async (model: string, options: { depth?: string; json?: boolean; source?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { getLineage } = await import('./commands/lineage.js');\n const depth = options.depth ? parseInt(options.depth, 10) : undefined;\n const result = await getLineage(projectDir, model, {\n depth,\n json: options.json,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.tree, null, 2));\n } else {\n console.log(result.rendered);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('ENOENT')) {\n output.error('No catalog found. Run `yamchart sync-dbt` first.');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\nprogram\n .command('advisor')\n .description('AI-powered dbt model advisor — suggests improvements informed by your BI layer')\n .argument('[question]', 'Question to ask, or \"audit\" for comprehensive analysis')\n .option('--top <n>', 'Limit audit suggestions (default: 5)')\n .option('--json', 'Output as JSON')\n .option('--dbt-path <path>', 'Override the synced dbt project path')\n .option('-c, --connection <name>', 'Connection to use for warehouse introspection')\n .action(async (question: string | undefined, options: { top?: string; json?: boolean; dbtPath?: string; connection?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n if (options.json) {\n console.log(JSON.stringify({ success: false, error: 'yamchart.yaml not found' }));\n } else {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n }\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n const { runAdvisor } = await import('./commands/advisor.js');\n await runAdvisor(projectDir, question, {\n top: options.top ? parseInt(options.top, 10) : 5,\n json: options.json,\n dbtPath: options.dbtPath,\n connection: options.connection,\n });\n });\n\nconst semanticCmd = program\n .command('semantic')\n .description('Explore the semantic layer — auto-generated measures and dimensions from your catalog')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { readFile } = await import('fs/promises');\n const catalogPath = join(projectDir, '.yamchart', 'catalog.json');\n const catalogJson = JSON.parse(await readFile(catalogPath, 'utf-8'));\n\n const { listSemanticEntities } = await import('./commands/semantic.js');\n const result = listSemanticEntities(catalogJson);\n\n if (options.json) {\n console.log(JSON.stringify(result.entities, null, 2));\n return;\n }\n\n if (result.entities.length === 0) {\n output.info('No semantic entities found.');\n output.detail('Run `yamchart sync-dbt` or `yamchart sync-warehouse` to populate the catalog.');\n return;\n }\n\n output.header(`Semantic Layer — ${result.entities.length} entities`);\n\n for (const entity of result.entities) {\n console.log(` ${pc.bold(entity.name)}`);\n console.log(` ${pc.dim(entity.source_table)}`);\n if (entity.description) {\n console.log(` ${entity.description}`);\n }\n if (entity.measures.length > 0) {\n console.log(` Measures: ${entity.measures.map((m) => `${m.name} (${pc.dim(m.type)})`).join(', ')}`);\n }\n if (entity.dimensions.length > 0) {\n console.log(` Dimensions: ${entity.dimensions.map((d) => `${d.name} (${pc.dim(d.type)})`).join(', ')}`);\n }\n console.log();\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('ENOENT')) {\n output.error('No catalog found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\nsemanticCmd\n .command('query')\n .description('Run a structured query against the semantic layer')\n .requiredOption('-e, --entity <name>', 'Entity name (e.g. fct_revenue)')\n .requiredOption('-m, --measures <measures>', 'Comma-separated measure names')\n .option('-d, --dimensions <dimensions>', 'Comma-separated dimension names')\n .option('-f, --filter <filter...>', 'Filters in format dimension=value')\n .option('--order <field>', 'Order by field')\n .option('--desc', 'Order descending (default: ascending)')\n .option('-l, --limit <n>', 'Row limit (default: 100)')\n .option('-c, --connection <name>', 'Connection to use')\n .option('--json', 'Output as JSON')\n .option('--sql', 'Print compiled SQL only (do not execute)')\n .action(async (options: {\n entity: string;\n measures: string;\n dimensions?: string;\n filter?: string[];\n order?: string;\n desc?: boolean;\n limit?: string;\n connection?: string;\n json?: boolean;\n sql?: boolean;\n }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { readFile } = await import('fs/promises');\n const catalogPath = join(projectDir, '.yamchart', 'catalog.json');\n const catalogJson = JSON.parse(await readFile(catalogPath, 'utf-8'));\n\n const { querySemanticEntity } = await import('./commands/semantic.js');\n\n // Parse filters: \"region=US\" → { dimension: 'region', operator: 'equals', value: 'US' }\n const filters = (options.filter || []).map((f) => {\n const eqIdx = f.indexOf('=');\n if (eqIdx === -1) throw new Error(`Invalid filter format: \"${f}\". Use dimension=value`);\n return {\n dimension: f.slice(0, eqIdx),\n operator: 'equals' as const,\n value: f.slice(eqIdx + 1),\n };\n });\n\n const result = querySemanticEntity(catalogJson, {\n entity: options.entity,\n measures: options.measures.split(',').map((s) => s.trim()),\n dimensions: options.dimensions ? options.dimensions.split(',').map((s) => s.trim()) : [],\n filters,\n order_by: options.order ? { field: options.order, direction: options.desc ? 'desc' : 'asc' } : undefined,\n limit: options.limit ? parseInt(options.limit, 10) : 100,\n });\n\n // --sql: just print the SQL\n if (options.sql) {\n console.log(result.sql);\n return;\n }\n\n // Execute the query\n const { resolveConnection, createConnector, formatTable, formatJSON } = await import('./commands/connection-utils.js');\n const connection = await resolveConnection(projectDir, options.connection);\n const connector = createConnector(connection, projectDir);\n\n const start = performance.now();\n await connector.connect();\n const queryResult = await connector.execute(result.sql);\n await connector.disconnect();\n const durationMs = Math.round((performance.now() - start) * 100) / 100;\n\n if (options.json) {\n console.log(formatJSON({\n columns: queryResult.columns,\n rows: queryResult.rows,\n rowCount: queryResult.rows.length,\n durationMs,\n }));\n } else {\n output.detail(`Entity: ${result.entityName}`);\n output.detail(`SQL: ${result.sql.replace(/\\n/g, ' ').slice(0, 120)}...`);\n output.newline();\n console.log(formatTable({\n columns: queryResult.columns,\n rows: queryResult.rows,\n rowCount: queryResult.rows.length,\n durationMs,\n }));\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('ENOENT')) {\n output.error('No catalog found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\nprogram.parse();\n\n// Passive update check — runs in background, prints on exit if outdated\nlet updateNotification: string | null = null;\n\ncheckForUpdate(pkg.version).then((update) => {\n if (update) {\n updateNotification = `\\n Update available: ${update.current} → ${update.latest}\\n Run: yamchart update to see what's new\\n`;\n }\n});\n\nprocess.on('exit', () => {\n if (updateNotification) {\n // Use dim styling so it doesn't compete with command output\n console.error(`\\n${pc.dim(updateNotification)}`);\n }\n});\n"],"mappings":"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","names":["error","warning"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { resolve, basename, dirname, join } from 'path';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { validateProject } from './commands/validate.js';\nimport { findProjectRoot, loadEnvFile } from './utils/config.js';\nimport pc from 'picocolors';\nimport * as output from './utils/output.js';\nimport { checkForUpdate } from './utils/update-check.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\n\nconst program = new Command();\n\nprogram\n .name('yamchart')\n .description('Git-native business intelligence dashboards')\n .version(pkg.version);\n\nprogram.option('--env <name>', 'Environment to use (default: local, or YAMCHART_ENV)');\n\n// Propagate --env to process.env so all downstream callers pick it up\nprogram.hook('preAction', () => {\n const opts = program.opts();\n if (opts.env) {\n process.env.YAMCHART_ENV = opts.env;\n }\n});\n\nprogram\n .command('validate')\n .description('Validate configuration files')\n .argument('[path]', 'Path to yamchart project', '.')\n .option('--dry-run', 'Connect to database and test queries with EXPLAIN')\n .option('-c, --connection <name>', 'Connection to use for dry-run')\n .option('--json', 'Output as JSON')\n .action(async (path: string, options: { dryRun?: boolean; connection?: string; json?: boolean }) => {\n const startPath = resolve(path);\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n if (options.json) {\n console.log(JSON.stringify({ success: false, error: 'yamchart.yaml not found' }));\n } else {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n }\n process.exit(2);\n }\n\n // Load .env file\n loadEnvFile(projectDir);\n\n if (!options.json) {\n output.header('Validating yamchart project...');\n }\n\n const result = await validateProject(projectDir, {\n dryRun: options.dryRun ?? false,\n connection: options.connection,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n // Print results\n for (const error of result.errors) {\n output.error(error.file);\n output.detail(error.message);\n if (error.suggestion) {\n output.detail(error.suggestion);\n }\n }\n\n for (const warning of result.warnings) {\n output.warning(warning.file);\n output.detail(warning.message);\n }\n\n output.newline();\n\n if (result.success) {\n output.success(`Schema: ${result.stats.passed} passed`);\n } else {\n output.error(`Schema: ${result.stats.passed} passed, ${result.stats.failed} failed`);\n }\n\n if (result.dryRunStats) {\n output.newline();\n if (result.dryRunStats.failed === 0) {\n output.success(`Queries: ${result.dryRunStats.passed} passed (EXPLAIN OK)`);\n } else {\n output.error(`Queries: ${result.dryRunStats.passed} passed, ${result.dryRunStats.failed} failed`);\n }\n }\n\n output.newline();\n\n if (result.success) {\n output.success('Validation passed');\n } else {\n output.error(`Validation failed with ${result.errors.length} error(s)`);\n }\n }\n\n process.exit(result.success ? 0 : 1);\n });\n\nprogram\n .command('dev')\n .description('Start development server with hot reload')\n .argument('[path]', 'Path to yamchart project', '.')\n .option('-p, --port <number>', 'Port to listen on', '3001')\n .option('--api-only', 'Only serve API, no web UI')\n .option('--no-open', 'Do not open browser automatically')\n .action(async (path: string, options: { port: string; apiOnly?: boolean; open: boolean }) => {\n const startPath = resolve(path);\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n const globalOpts = program.opts();\n const { runDevServer } = await import('./commands/dev.js');\n\n await runDevServer(projectDir, {\n port: parseInt(options.port, 10),\n apiOnly: options.apiOnly ?? false,\n open: options.open,\n version: pkg.version,\n env: globalOpts.env,\n });\n });\n\nprogram\n .command('init')\n .description('Create a new yamchart project')\n .argument('[directory]', 'Target directory', '.')\n .option('--example', 'Create full example project with sample database')\n .option('--empty', 'Create only yamchart.yaml (no connections, models, or charts)')\n .option('--force', 'Overwrite existing files')\n .action(async (directory: string, options: { example?: boolean; empty?: boolean; force?: boolean }) => {\n const { initProject } = await import('./commands/init.js');\n const targetDir = resolve(directory);\n\n const result = await initProject(targetDir, options);\n\n if (!result.success) {\n output.error(result.error || 'Failed to create project');\n process.exit(1);\n }\n\n output.newline();\n output.success(`Created ${directory === '.' ? basename(targetDir) : directory}/`);\n for (const file of result.files.slice(0, 10)) {\n output.detail(file);\n }\n if (result.files.length > 10) {\n output.detail(`... and ${result.files.length - 10} more files`);\n }\n output.newline();\n output.info(`Run \\`cd ${directory === '.' ? basename(targetDir) : directory} && yamchart dev\\` to start.`);\n });\n\nprogram\n .command('sync-dbt')\n .description('Sync dbt project metadata into AI-readable catalog')\n .option('-s, --source <type>', 'Source type: local, github, dbt-cloud', 'local')\n .option('-p, --path <dir>', 'Path to dbt project (for local source)')\n .option('--repo <repo>', 'GitHub repository (for github source)')\n .option('--branch <branch>', 'Git branch (for github source)', 'main')\n .option('-i, --include <patterns...>', 'Include glob patterns')\n .option('-e, --exclude <patterns...>', 'Exclude glob patterns')\n .option('-t, --tag <tags...>', 'Filter by dbt tags')\n .option('--refresh', 'Re-sync using saved configuration')\n .option('--target-database <database>', 'Override database in ref() paths (e.g. switch from dev to prod)')\n .action(async (options: {\n source: 'local' | 'github' | 'dbt-cloud';\n path?: string;\n repo?: string;\n branch?: string;\n include?: string[];\n exclude?: string[];\n tag?: string[];\n refresh?: boolean;\n targetDatabase?: string;\n }) => {\n const { syncDbt, loadSyncConfig } = await import('./commands/sync-dbt.js');\n\n // Find project root\n const projectDir = await findProjectRoot(process.cwd());\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n // Handle refresh mode\n if (options.refresh) {\n const savedConfig = await loadSyncConfig(projectDir);\n if (!savedConfig) {\n output.error('No saved sync config found');\n output.detail('Run sync-dbt without --refresh first');\n process.exit(1);\n }\n output.info(`Re-syncing from ${savedConfig.source}:${savedConfig.path || savedConfig.repo}`);\n }\n\n const spin = output.spinner('Syncing dbt metadata...');\n\n const result = await syncDbt(projectDir, {\n source: options.source,\n path: options.path,\n repo: options.repo,\n branch: options.branch,\n include: options.include || [],\n exclude: options.exclude || [],\n tags: options.tag || [],\n refresh: options.refresh,\n targetDatabase: options.targetDatabase,\n });\n\n spin.stop();\n\n if (!result.success) {\n output.error(result.error || 'Sync failed');\n process.exit(1);\n }\n\n output.success(`Synced ${result.modelsIncluded} models to .yamchart/catalog.md`);\n if (result.modelsExcluded > 0) {\n output.detail(`${result.modelsExcluded} models filtered out`);\n }\n\n // Show lineage warnings\n if (result.warnings) {\n for (const w of result.warnings) {\n output.warning(w);\n }\n }\n\n // Check for database mismatch (skip if --target-database was used)\n if (!options.targetDatabase) {\n try {\n const { readFile } = await import('fs/promises');\n const { resolveConnection } = await import('./commands/connection-utils.js');\n const { detectDatabaseMismatch } = await import('./dbt/rewrite-database.js');\n const catalogJsonStr = await readFile(join(projectDir, '.yamchart', 'catalog.json'), 'utf-8');\n const catalogData = JSON.parse(catalogJsonStr);\n const connection = await resolveConnection(projectDir, undefined, program.opts().env);\n // Extract database from connection config (varies by type)\n const connDb = (connection as Record<string, any>).config?.database as string | undefined;\n const mismatch = detectDatabaseMismatch(catalogData.models, connDb);\n if (mismatch.mismatch) {\n output.warning(\n `Catalog tables reference database \"${mismatch.catalogDatabase}\" but your default ` +\n `connection uses \"${mismatch.connectionDatabase}\". Models using ref() may query the wrong database.`\n );\n output.detail(\n `To fix: yamchart sync-dbt --refresh --target-database ${mismatch.connectionDatabase}`\n );\n }\n } catch {\n // Connection not configured or unreadable — skip silently\n }\n }\n });\n\nprogram\n .command('generate')\n .description('Generate SQL model stubs from dbt catalog')\n .argument('[model]', 'Specific model to generate (optional)')\n .option('--yolo', 'Skip all prompts, use defaults for everything')\n .action(async (model: string | undefined, options: { yolo?: boolean }) => {\n const { generate } = await import('./commands/generate.js');\n\n const projectDir = await findProjectRoot(process.cwd());\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n const result = await generate(projectDir, {\n model,\n yolo: options.yolo,\n });\n\n if (!result.success) {\n output.error(result.error || 'Generate failed');\n process.exit(1);\n }\n\n output.success(`Generated ${result.filesCreated} model stubs`);\n if (result.filesSkipped > 0) {\n output.detail(`${result.filesSkipped} files skipped`);\n }\n });\n\nprogram\n .command('test')\n .description('Run model tests (@returns schema checks and @tests data assertions)')\n .argument('[model]', 'Specific model to test (optional, tests all if omitted)')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .action(async (model: string | undefined, options: { connection?: string; json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n if (options.json) {\n console.log(JSON.stringify({ success: false, error: 'yamchart.yaml not found' }));\n } else {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n }\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { testProject, formatTestOutput } = await import('./commands/test.js');\n const result = await testProject(projectDir, model, {\n connection: options.connection,\n json: options.json,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n formatTestOutput(result, result.connectionName);\n }\n\n process.exit(result.success ? 0 : 1);\n } catch (err) {\n if (options.json) {\n console.log(\n JSON.stringify({ success: false, error: err instanceof Error ? err.message : String(err) }),\n );\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(2);\n }\n });\n\nprogram\n .command('update')\n .description('Check for yamchart updates')\n .action(async () => {\n const { runUpdate } = await import('./commands/update.js');\n await runUpdate(pkg.version);\n });\n\nprogram\n .command('reset-password')\n .description('Reset a user password (requires auth to be enabled)')\n .requiredOption('-e, --email <email>', 'Email address of the user')\n .action(async (options: { email: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n const { resetPassword } = await import('./commands/reset-password.js');\n await resetPassword(projectDir, options.email);\n });\n\nprogram\n .command('tables')\n .description('List tables and views in the connected database')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('-s, --schema <name>', 'Filter to schema')\n .option('-d, --database <name>', 'Filter to database (Snowflake/Databricks)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .option('--compare', 'Compare local metadata against live database')\n .action(async (options: { connection?: string; schema?: string; database?: string; json?: boolean; source?: string; compare?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n if (options.compare) {\n const { resolveTablesSource } = await import('./commands/source-resolver.js');\n const { compareTables, formatCompareTables } = await import('./commands/compare.js');\n\n let localResult;\n try {\n localResult = await resolveTablesSource(projectDir, 'catalog', options.connection, {\n schema: options.schema,\n database: options.database,\n });\n } catch {\n try {\n localResult = await resolveTablesSource(projectDir, 'model', options.connection, {\n schema: options.schema,\n database: options.database,\n });\n } catch {\n output.error('Cannot compare — no local metadata found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n process.exit(1);\n }\n }\n\n const dbResult = await resolveTablesSource(projectDir, 'db', options.connection, {\n schema: options.schema,\n database: options.database,\n });\n const diffs = compareTables(localResult.tables, dbResult.tables);\n\n if (options.json) {\n console.log(JSON.stringify(diffs, null, 2));\n } else {\n console.log(formatCompareTables(localResult.source, diffs));\n }\n return;\n }\n\n const { listTables } = await import('./commands/tables.js');\n const result = await listTables(projectDir, {\n ...options,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.tables, null, 2));\n } else {\n const sourceLabel = result.source === 'db'\n ? `${result.connectionName} (${result.connectionType})`\n : `Source: ${result.source}`;\n output.header(`Tables in ${sourceLabel}`);\n if (result.tables.length === 0) {\n output.info('No tables found');\n } else {\n for (const table of result.tables) {\n const schema = table.schema ? `${table.schema}.` : '';\n const typeLabel = table.type === 'VIEW' ? pc.dim(' (view)') : '';\n console.log(` ${schema}${table.name}${typeLabel}`);\n }\n output.newline();\n output.info(`${result.tables.length} table(s) found${result.durationMs > 0 ? ` (${result.durationMs.toFixed(0)}ms)` : ''}`);\n }\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('describe')\n .description('Show columns and types for a table')\n .argument('<table>', 'Table name (can be fully qualified, e.g. schema.table)')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .option('--compare', 'Compare local metadata against live database')\n .action(async (table: string, options: { connection?: string; json?: boolean; source?: string; compare?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n if (options.compare) {\n const { resolveDescribeSource } = await import('./commands/source-resolver.js');\n const { compareColumns, formatCompareColumns } = await import('./commands/compare.js');\n\n let localResult;\n try {\n localResult = await resolveDescribeSource(projectDir, table, 'catalog', options.connection);\n } catch {\n try {\n localResult = await resolveDescribeSource(projectDir, table, 'model', options.connection);\n } catch {\n output.error('Cannot compare — no local metadata found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n process.exit(1);\n }\n }\n\n const dbResult = await resolveDescribeSource(projectDir, table, 'db', options.connection);\n const diffs = compareColumns(localResult.columns, dbResult.columns);\n\n if (options.json) {\n console.log(JSON.stringify(diffs, null, 2));\n } else {\n console.log(formatCompareColumns(localResult.table, localResult.source, diffs));\n }\n return;\n }\n\n const { describeTable } = await import('./commands/describe.js');\n const result = await describeTable(projectDir, table, {\n ...options,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.columns, null, 2));\n } else {\n if (result.resolvedFrom) {\n output.detail(`Resolved \"${result.resolvedFrom}\" → ${result.table}`);\n }\n const sourceLabel = result.source === 'db'\n ? `${result.connectionName} (${result.connectionType})`\n : `Source: ${result.source}`;\n output.header(`${result.table} (${sourceLabel})`);\n\n const nameWidth = Math.max(4, ...result.columns.map((c) => c.name.length));\n const typeWidth = Math.max(4, ...result.columns.map((c) => c.type.length));\n\n console.log(` ${'name'.padEnd(nameWidth)} ${'type'.padEnd(typeWidth)} nullable`);\n console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(typeWidth)} ${'─'.repeat(8)}`);\n\n for (const col of result.columns) {\n const nullable = col.nullable === 'YES' ? pc.dim('yes') : 'no';\n console.log(` ${col.name.padEnd(nameWidth)} ${pc.dim(col.type.padEnd(typeWidth))} ${nullable}`);\n }\n\n output.newline();\n output.info(`${result.columns.length} column(s)${result.durationMs > 0 ? ` (${result.durationMs.toFixed(0)}ms)` : ''}`);\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('query')\n .description('Execute SQL against a connection')\n .argument('<sql>', 'SQL query to execute')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .option('-l, --limit <number>', 'Max rows to return (default: 100)')\n .action(async (sql: string, options: { connection?: string; json?: boolean; limit?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { executeQuery } = await import('./commands/query.js');\n const { formatTable, formatJSON } = await import('./commands/connection-utils.js');\n\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const result = await executeQuery(projectDir, sql, {\n connection: options.connection,\n json: options.json,\n limit,\n });\n\n if (options.json) {\n console.log(formatJSON(result));\n } else {\n console.log(formatTable(result));\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('sample')\n .description('Show sample rows from a table or dbt model')\n .argument('<table>', 'Table name or dbt model name')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('-l, --limit <number>', 'Rows to show (default: 5)')\n .option('--json', 'Output as JSON')\n .action(async (table: string, options: { connection?: string; json?: boolean; limit?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { sampleTable } = await import('./commands/sample.js');\n const { formatTable, formatJSON } = await import('./commands/connection-utils.js');\n\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const result = await sampleTable(projectDir, table, {\n connection: options.connection,\n json: options.json,\n limit,\n });\n\n if (options.json) {\n console.log(formatJSON(result));\n } else {\n if (result.resolvedFrom) {\n output.detail(`Resolved \"${result.resolvedFrom}\" → ${result.table}`);\n }\n console.log(formatTable(result));\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('search')\n .description('Search for tables and columns by keyword')\n .argument('<keyword>', 'Keyword to search for')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .action(async (keyword: string, options: { connection?: string; json?: boolean; source?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { searchDatabase } = await import('./commands/search.js');\n const result = await searchDatabase(projectDir, keyword, {\n ...options,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.results, null, 2));\n } else {\n const sourceLabel = result.source === 'db'\n ? `${result.connectionName} (${result.connectionType})`\n : `Source: ${result.source}`;\n output.header(`Search results for \"${result.keyword}\" in ${sourceLabel}`);\n\n const tables = result.results.filter((r) => r.type === 'table');\n const columns = result.results.filter((r) => r.type === 'column');\n\n if (tables.length > 0) {\n output.newline();\n console.log(' Tables:');\n for (const t of tables) {\n const qualified = t.schema ? `${t.schema}.${t.table}` : t.table;\n console.log(` ${qualified}`);\n }\n }\n\n if (columns.length > 0) {\n output.newline();\n console.log(' Columns:');\n const nameWidth = Math.max(...columns.map((c) => {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n return qualified.length;\n }));\n for (const c of columns) {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n const colType = c.columnType ? pc.dim(c.columnType) : '';\n console.log(` ${qualified.padEnd(nameWidth + 2)}${colType}`);\n }\n }\n\n if (result.results.length === 0) {\n output.detail('No matches found');\n }\n\n output.newline();\n output.info(`${result.results.length} result(s)${result.durationMs > 0 ? ` (${result.durationMs.toFixed(0)}ms)` : ''}`);\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nconst catalogCmd = program\n .command('catalog')\n .description('Explore cached local metadata (no database connection needed)');\n\ncatalogCmd\n .command('tables')\n .description('List tables from cached catalog')\n .option('-s, --schema <name>', 'Filter to schema')\n .option('--json', 'Output as JSON')\n .action(async (options: { schema?: string; json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { listTables } = await import('./commands/tables.js');\n const result = await listTables(projectDir, {\n source: 'catalog',\n schema: options.schema,\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.tables, null, 2));\n } else {\n output.header('Tables (from catalog)');\n if (result.tables.length === 0) {\n output.info('No tables found in catalog');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else {\n const filtered = options.schema\n ? result.tables.filter((t) => t.schema.toLowerCase().includes(options.schema!.toLowerCase()))\n : result.tables;\n for (const table of filtered) {\n const schema = table.schema ? `${table.schema}.` : '';\n const typeLabel = table.type === 'VIEW' ? pc.dim(' (view)') : table.type === 'SOURCE' ? pc.dim(' (source)') : '';\n console.log(` ${schema}${table.name}${typeLabel}`);\n }\n output.newline();\n output.info(`${filtered.length} table(s) from catalog`);\n }\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('No catalog found')) {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\ncatalogCmd\n .command('describe')\n .description('Show cached columns and types for a table')\n .argument('<table>', 'Table name or model name')\n .option('--json', 'Output as JSON')\n .action(async (table: string, options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { describeTable } = await import('./commands/describe.js');\n const result = await describeTable(projectDir, table, { source: 'catalog' });\n\n if (options.json) {\n console.log(JSON.stringify(result.columns, null, 2));\n } else {\n if (result.resolvedFrom) {\n output.detail(`Resolved \"${result.resolvedFrom}\" → ${result.table}`);\n }\n output.header(`${result.table} (from catalog)`);\n\n const nameWidth = Math.max(4, ...result.columns.map((c) => c.name.length));\n const typeWidth = Math.max(4, ...result.columns.map((c) => c.type.length));\n\n console.log(` ${'name'.padEnd(nameWidth)} ${'type'.padEnd(typeWidth)} nullable`);\n console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(typeWidth)} ${'─'.repeat(8)}`);\n\n for (const col of result.columns) {\n const nullable = col.nullable === 'YES' ? pc.dim('yes') : 'no';\n console.log(` ${col.name.padEnd(nameWidth)} ${pc.dim(col.type.padEnd(typeWidth))} ${nullable}`);\n }\n\n output.newline();\n output.info(`${result.columns.length} column(s)`);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('No catalog found')) {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else if (err instanceof Error && err.message.includes('not found in catalog')) {\n output.error(err.message);\n output.detail('Try `yamchart catalog search` to find available tables');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\ncatalogCmd\n .command('search')\n .description('Search cached metadata for tables and columns')\n .argument('<keyword>', 'Keyword to search for')\n .option('--json', 'Output as JSON')\n .action(async (keyword: string, options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { searchDatabase } = await import('./commands/search.js');\n const result = await searchDatabase(projectDir, keyword, { source: 'catalog' });\n\n if (options.json) {\n console.log(JSON.stringify(result.results, null, 2));\n } else {\n output.header(`Search results for \"${keyword}\" (from catalog)`);\n\n const tables = result.results.filter((r) => r.type === 'table');\n const columns = result.results.filter((r) => r.type === 'column');\n\n if (tables.length > 0) {\n output.newline();\n console.log(' Tables:');\n for (const t of tables) {\n const qualified = t.schema ? `${t.schema}.${t.table}` : t.table;\n console.log(` ${qualified}`);\n }\n }\n\n if (columns.length > 0) {\n output.newline();\n console.log(' Columns:');\n const nameWidth = Math.max(...columns.map((c) => {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n return qualified.length;\n }));\n for (const c of columns) {\n const qualified = c.schema ? `${c.schema}.${c.table}.${c.column}` : `${c.table}.${c.column}`;\n const colType = c.columnType ? pc.dim(c.columnType) : '';\n console.log(` ${qualified.padEnd(nameWidth + 2)}${colType}`);\n }\n }\n\n if (result.results.length === 0) {\n output.detail('No matches found in catalog');\n output.detail('Try `yamchart search <keyword>` to search the live database');\n }\n\n output.newline();\n output.info(`${result.results.length} result(s) from catalog`);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('No catalog found')) {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\ncatalogCmd\n .command('status')\n .description('Show catalog sync status')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n try {\n const { readFile } = await import('fs/promises');\n const catalogPath = join(projectDir, '.yamchart', 'catalog.json');\n\n let catalogData: { syncedAt?: string; source?: { type: string }; models?: Array<{ source?: string; columns?: unknown[] }> };\n try {\n catalogData = JSON.parse(await readFile(catalogPath, 'utf-8'));\n } catch {\n if (options.json) {\n console.log(JSON.stringify({ exists: false }));\n } else {\n output.error('No catalog found');\n output.detail('Run `yamchart sync-warehouse` or `yamchart sync-dbt` to populate');\n }\n process.exit(1);\n return;\n }\n\n const models = catalogData.models || [];\n const dbtModels = models.filter((m) => m.source === 'dbt');\n const warehouseModels = models.filter((m) => m.source === 'warehouse');\n const sourceModels = models.filter((m) => m.source === 'dbt-source');\n const totalColumns = models.reduce((sum, m) => sum + (m.columns?.length || 0), 0);\n\n // Try to load warehouse sync state\n let syncState: { syncedAt?: string; connection?: string; schemas?: string[] } | null = null;\n try {\n const syncPath = join(projectDir, '.yamchart', 'warehouse-sync.json');\n syncState = JSON.parse(await readFile(syncPath, 'utf-8'));\n } catch {\n // No sync state\n }\n\n if (options.json) {\n console.log(JSON.stringify({\n exists: true,\n syncedAt: catalogData.syncedAt,\n source: catalogData.source,\n models: models.length,\n dbtModels: dbtModels.length,\n warehouseModels: warehouseModels.length,\n sourceModels: sourceModels.length,\n totalColumns,\n warehouseSync: syncState ? {\n syncedAt: syncState.syncedAt,\n connection: syncState.connection,\n schemas: syncState.schemas,\n } : null,\n }, null, 2));\n } else {\n output.header('Catalog Status');\n console.log(` Last synced: ${catalogData.syncedAt || 'unknown'}`);\n console.log(` Models: ${models.length} total (${dbtModels.length} dbt, ${warehouseModels.length} warehouse, ${sourceModels.length} sources)`);\n console.log(` Columns: ${totalColumns}`);\n\n if (syncState) {\n output.newline();\n console.log(` Warehouse sync:`);\n console.log(` Connection: ${syncState.connection || 'default'}`);\n console.log(` Schemas: ${syncState.schemas?.join(', ') || 'all'}`);\n console.log(` Last sync: ${syncState.syncedAt || 'unknown'}`);\n }\n }\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('sync-warehouse')\n .description('Sync warehouse table metadata into the catalog')\n .option('-c, --connection <name>', 'Connection to use (overrides default)')\n .option('-s, --schema <schemas>', 'Comma-separated schemas to sync')\n .option('-d, --database <name>', 'Database to sync (Snowflake/Databricks)')\n .option('--skip-samples', 'Skip sample row collection')\n .option('--refresh', 'Re-run with saved connection/schema config')\n .option('--full', 'Force full re-sync (ignore incremental state)')\n .option('--json', 'Output sync summary as JSON')\n .action(async (options) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { runSyncWarehouse } = await import('./commands/sync-warehouse.js');\n await runSyncWarehouse(projectDir, options);\n } catch (err) {\n output.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nprogram\n .command('lineage')\n .description('Show upstream dependencies for a model')\n .argument('<model>', 'Model name to trace lineage for')\n .option('--depth <n>', 'Maximum depth to trace (default: unlimited)')\n .option('--json', 'Output as JSON')\n .option('--source <type>', 'Data source: auto, catalog, model, or db (default: auto)')\n .action(async (model: string, options: { depth?: string; json?: boolean; source?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { getLineage } = await import('./commands/lineage.js');\n const depth = options.depth ? parseInt(options.depth, 10) : undefined;\n const result = await getLineage(projectDir, model, {\n depth,\n json: options.json,\n source: (options.source as any) || 'auto',\n });\n\n if (options.json) {\n console.log(JSON.stringify(result.tree, null, 2));\n } else {\n console.log(result.rendered);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('ENOENT')) {\n output.error('No catalog found. Run `yamchart sync-dbt` first.');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\nprogram\n .command('advisor')\n .description('AI-powered dbt model advisor — suggests improvements informed by your BI layer')\n .argument('[question]', 'Question to ask, or \"audit\" for comprehensive analysis')\n .option('--top <n>', 'Limit audit suggestions (default: 5)')\n .option('--json', 'Output as JSON')\n .option('--dbt-path <path>', 'Override the synced dbt project path')\n .option('-c, --connection <name>', 'Connection to use for warehouse introspection')\n .action(async (question: string | undefined, options: { top?: string; json?: boolean; dbtPath?: string; connection?: string }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n if (options.json) {\n console.log(JSON.stringify({ success: false, error: 'yamchart.yaml not found' }));\n } else {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n }\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n const { runAdvisor } = await import('./commands/advisor.js');\n await runAdvisor(projectDir, question, {\n top: options.top ? parseInt(options.top, 10) : 5,\n json: options.json,\n dbtPath: options.dbtPath,\n connection: options.connection,\n });\n });\n\nconst semanticCmd = program\n .command('semantic')\n .description('Explore the semantic layer — auto-generated measures and dimensions from your catalog')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n output.detail('Run this command from a yamchart project directory');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { readFile } = await import('fs/promises');\n const catalogPath = join(projectDir, '.yamchart', 'catalog.json');\n const catalogJson = JSON.parse(await readFile(catalogPath, 'utf-8'));\n\n const { listSemanticEntities } = await import('./commands/semantic.js');\n const result = listSemanticEntities(catalogJson);\n\n if (options.json) {\n console.log(JSON.stringify(result.entities, null, 2));\n return;\n }\n\n if (result.entities.length === 0) {\n output.info('No semantic entities found.');\n output.detail('Run `yamchart sync-dbt` or `yamchart sync-warehouse` to populate the catalog.');\n return;\n }\n\n output.header(`Semantic Layer — ${result.entities.length} entities`);\n\n for (const entity of result.entities) {\n console.log(` ${pc.bold(entity.name)}`);\n console.log(` ${pc.dim(entity.source_table)}`);\n if (entity.description) {\n console.log(` ${entity.description}`);\n }\n if (entity.measures.length > 0) {\n console.log(` Measures: ${entity.measures.map((m) => `${m.name} (${pc.dim(m.type)})`).join(', ')}`);\n }\n if (entity.dimensions.length > 0) {\n console.log(` Dimensions: ${entity.dimensions.map((d) => `${d.name} (${pc.dim(d.type)})`).join(', ')}`);\n }\n console.log();\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('ENOENT')) {\n output.error('No catalog found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\nsemanticCmd\n .command('query')\n .description('Run a structured query against the semantic layer')\n .requiredOption('-e, --entity <name>', 'Entity name (e.g. fct_revenue)')\n .requiredOption('-m, --measures <measures>', 'Comma-separated measure names')\n .option('-d, --dimensions <dimensions>', 'Comma-separated dimension names')\n .option('-f, --filter <filter...>', 'Filters in format dimension=value')\n .option('--order <field>', 'Order by field')\n .option('--desc', 'Order descending (default: ascending)')\n .option('-l, --limit <n>', 'Row limit (default: 100)')\n .option('-c, --connection <name>', 'Connection to use')\n .option('--json', 'Output as JSON')\n .option('--sql', 'Print compiled SQL only (do not execute)')\n .action(async (options: {\n entity: string;\n measures: string;\n dimensions?: string;\n filter?: string[];\n order?: string;\n desc?: boolean;\n limit?: string;\n connection?: string;\n json?: boolean;\n sql?: boolean;\n }) => {\n const startPath = resolve('.');\n const projectDir = await findProjectRoot(startPath);\n\n if (!projectDir) {\n output.error('yamchart.yaml not found');\n process.exit(2);\n }\n\n loadEnvFile(projectDir);\n\n try {\n const { readFile } = await import('fs/promises');\n const catalogPath = join(projectDir, '.yamchart', 'catalog.json');\n const catalogJson = JSON.parse(await readFile(catalogPath, 'utf-8'));\n\n const { querySemanticEntity } = await import('./commands/semantic.js');\n\n // Parse filters: \"region=US\" → { dimension: 'region', operator: 'equals', value: 'US' }\n const filters = (options.filter || []).map((f) => {\n const eqIdx = f.indexOf('=');\n if (eqIdx === -1) throw new Error(`Invalid filter format: \"${f}\". Use dimension=value`);\n return {\n dimension: f.slice(0, eqIdx),\n operator: 'equals' as const,\n value: f.slice(eqIdx + 1),\n };\n });\n\n const result = querySemanticEntity(catalogJson, {\n entity: options.entity,\n measures: options.measures.split(',').map((s) => s.trim()),\n dimensions: options.dimensions ? options.dimensions.split(',').map((s) => s.trim()) : [],\n filters,\n order_by: options.order ? { field: options.order, direction: options.desc ? 'desc' : 'asc' } : undefined,\n limit: options.limit ? parseInt(options.limit, 10) : 100,\n });\n\n // --sql: just print the SQL\n if (options.sql) {\n console.log(result.sql);\n return;\n }\n\n // Execute the query\n const { resolveConnection, createConnector, formatTable, formatJSON } = await import('./commands/connection-utils.js');\n const connection = await resolveConnection(projectDir, options.connection, program.opts().env);\n const connector = createConnector(connection, projectDir);\n\n const start = performance.now();\n await connector.connect();\n const queryResult = await connector.execute(result.sql);\n await connector.disconnect();\n const durationMs = Math.round((performance.now() - start) * 100) / 100;\n\n if (options.json) {\n console.log(formatJSON({\n columns: queryResult.columns,\n rows: queryResult.rows,\n rowCount: queryResult.rows.length,\n durationMs,\n }));\n } else {\n output.detail(`Entity: ${result.entityName}`);\n output.detail(`SQL: ${result.sql.replace(/\\n/g, ' ').slice(0, 120)}...`);\n output.newline();\n console.log(formatTable({\n columns: queryResult.columns,\n rows: queryResult.rows,\n rowCount: queryResult.rows.length,\n durationMs,\n }));\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('ENOENT')) {\n output.error('No catalog found. Run `yamchart sync-dbt` or `yamchart sync-warehouse` first.');\n } else {\n output.error(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n });\n\nprogram.parse();\n\n// Passive update check — runs in background, prints on exit if outdated\nlet updateNotification: string | null = null;\n\ncheckForUpdate(pkg.version).then((update) => {\n if (update) {\n updateNotification = `\\n Update available: ${update.current} → ${update.latest}\\n Run: yamchart update to see what's new\\n`;\n }\n});\n\nprocess.on('exit', () => {\n if (updateNotification) {\n // Use dim styling so it doesn't compete with command output\n console.error(`\\n${pc.dim(updateNotification)}`);\n }\n});\n"],"mappings":"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","names":["error","warning"]}