@duckcodeailabs/dql-cli 1.6.15 → 1.6.17

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.
package/dist/index.js CHANGED
@@ -29,6 +29,7 @@ import { runAgent } from "./commands/agent.js";
29
29
  import { runSlack } from "./commands/slack.js";
30
30
  import { runVerify } from "./commands/verify.js";
31
31
  import { runImport } from "./commands/import.js";
32
+ import { runConnect } from "./commands/connect.js";
32
33
  const HELP = `
33
34
  dql — DQL CLI
34
35
 
@@ -60,6 +61,8 @@ const HELP = `
60
61
  dql sync dbt [path] Detect dbt manifest changes; report DQL cache status
61
62
  dql lineage [block] [path] Answer-layer lineage analysis
62
63
  dql mcp [--http] Run the DQL MCP server (stdio by default; --http = loopback)
64
+ dql mcp test [path] Check whether DQL MCP can load this project
65
+ dql connect <target> [path] Configure Codex, Claude Code, Claude Desktop, or Cursor MCP
63
66
  dql app new|generate|ls|show|build|reindex <name>
64
67
  Manage App artifacts (metadata, policies, dashboards, schedules)
65
68
  dql schedule list|run|start|status Local scheduler for @schedule'd blocks (alerts + notifications)
@@ -94,6 +97,7 @@ const HELP = `
94
97
  --open-pr For "certify --from-draft": push branch + open GitHub PR with the diff
95
98
  --force For "certify --from-draft": overwrite an existing certified block
96
99
  --execute For "agent eval": run bounded SQL previews
100
+ --ai For "doctor": include AI, MCP, and metadata checks
97
101
  `;
98
102
  const COMMAND_HELP = {
99
103
  certify: `
@@ -147,8 +151,21 @@ const COMMAND_HELP = {
147
151
 
148
152
  Usage:
149
153
  dql doctor [path] [--format json]
154
+ dql doctor [path] --ai
150
155
 
151
156
  Prints setup checks and the next local-first commands to run.
157
+ `,
158
+ connect: `
159
+ dql connect — Configure DQL for external AI agents
160
+
161
+ Usage:
162
+ dql connect codex [path] Write project .codex/config.toml + AGENTS.md
163
+ dql connect claude-code [path] Write project .mcp.json + CLAUDE.md
164
+ dql connect claude-desktop [path]
165
+ dql connect cursor [path]
166
+ dql connect all [path]
167
+
168
+ After connecting, run: dql mcp test [path]
152
169
  `,
153
170
  semantic: `
154
171
  dql semantic — Work with the local semantic layer
@@ -197,6 +214,7 @@ async function main() {
197
214
  command === "compile" ||
198
215
  command === "sync" ||
199
216
  command === "mcp" ||
217
+ command === "connect" ||
200
218
  command === "app" ||
201
219
  command === "schedule" ||
202
220
  command === "verify" ||
@@ -268,7 +286,10 @@ async function main() {
268
286
  await runDiff(file, rest, flags);
269
287
  break;
270
288
  case "mcp":
271
- await runMcp(file, flags);
289
+ await runMcp(file, rest, flags);
290
+ break;
291
+ case "connect":
292
+ await runConnect(file, rest, flags);
272
293
  break;
273
294
  case "app":
274
295
  await runApp(file, rest, flags);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ export interface LocalServerOptions {
46
46
  rootDir: string;
47
47
  projectRoot?: string;
48
48
  executor: QueryExecutor;
49
- connection: ConnectionConfig;
49
+ connection?: ConnectionConfig | null;
50
50
  preferredPort: number;
51
51
  /**
52
52
  * Host the HTTP server binds to. Defaults to `127.0.0.1` (loopback only)
@@ -1 +1 @@
1
- {"version":3,"file":"local-runtime.d.ts","sourceRoot":"","sources":["../src/local-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-runtime.d.ts","sourceRoot":"","sources":["../src/local-runtime.ts"],"names":[],"mappings":"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"}
@@ -25,8 +25,14 @@ const NOTEBOOK_EXECUTE_PREVIEW_ROW_LIMIT = 500;
25
25
  export async function startLocalServer(opts) {
26
26
  const { rootDir, executor, connection: rawConnection, preferredPort, projectRoot = process.cwd() } = opts;
27
27
  const bindHost = opts.host ?? process.env.DQL_HOST ?? '127.0.0.1';
28
- let connection = normalizeProjectConnection(rawConnection, projectRoot);
28
+ let connection = rawConnection ? normalizeProjectConnection(rawConnection, projectRoot) : null;
29
29
  let projectConfig = loadProjectConfig(projectRoot);
30
+ const requireActiveConnection = (candidate = connection) => {
31
+ if (!candidate) {
32
+ throw new Error('No database connection is configured yet. Open Connections, add a warehouse or local DuckDB/file connection, then retry.');
33
+ }
34
+ return candidate;
35
+ };
30
36
  // Load semantic layer via provider system (dql native, dbt, cubejs, etc.)
31
37
  let semanticLayer;
32
38
  let semanticLayerErrors = [];
@@ -37,8 +43,9 @@ export async function startLocalServer(opts) {
37
43
  const semanticConfig = projectConfig.semanticLayer;
38
44
  let semanticLastSyncTime = null;
39
45
  {
40
- const executeQuery = semanticConfig?.provider === 'snowflake'
41
- ? async (sql) => { const r = await executor.executeQuery(sql, [], {}, connection); return { rows: r.rows }; }
46
+ const semanticConnection = connection;
47
+ const executeQuery = semanticConfig?.provider === 'snowflake' && semanticConnection
48
+ ? async (sql) => { const r = await executor.executeQuery(sql, [], {}, semanticConnection); return { rows: r.rows }; }
42
49
  : undefined;
43
50
  const result = await resolveSemanticLayerAsync(semanticConfig, projectRoot, executeQuery);
44
51
  semanticLayer = result.layer;
@@ -58,7 +65,7 @@ export async function startLocalServer(opts) {
58
65
  await refreshLocalMetadataCatalog(projectRoot);
59
66
  // Auto-register data/ CSV and Parquet files as DuckDB views so semantic layer
60
67
  // queries like `FROM orders` resolve without requiring read_csv_auto() in SQL.
61
- if (connection.driver === 'file' || connection.driver === 'duckdb') {
68
+ if (connection && (connection.driver === 'file' || connection.driver === 'duckdb')) {
62
69
  const dataDir = projectConfig.dataDir
63
70
  ? resolve(projectRoot, projectConfig.dataDir)
64
71
  : join(projectRoot, 'data');
@@ -81,11 +88,12 @@ export async function startLocalServer(opts) {
81
88
  }
82
89
  }
83
90
  const executeLocalSqlForStoredResult = async (sql) => {
91
+ const activeConnection = requireActiveConnection();
84
92
  const semantic = prepareSemanticSql(sql, semanticLayer);
85
93
  if (semantic.unresolvedRefs.length > 0) {
86
94
  throw new Error(`Unknown semantic reference${semantic.unresolvedRefs.length > 1 ? 's' : ''}: ${semantic.unresolvedRefs.join(', ')}`);
87
95
  }
88
- const prepared = prepareLocalExecution(semantic.sql, connection, projectRoot, projectConfig);
96
+ const prepared = prepareLocalExecution(semantic.sql, activeConnection, projectRoot, projectConfig);
89
97
  const result = await executor.executeQuery(prepared.sql, [], runtimeVariables({}), prepared.connection);
90
98
  return normalizeQueryResult(result, semantic.semanticRefs);
91
99
  };
@@ -127,13 +135,14 @@ export async function startLocalServer(opts) {
127
135
  config: (sourceCell.chartConfig ?? sourceCell.config),
128
136
  };
129
137
  const resolved = resolveNotebookBlockReferenceCell(cell, projectRoot);
130
- const tableMapping = await resolveSemanticTableMapping(executor, connection, semanticLayer);
131
- const plan = buildExecutionPlan(resolved.cell, { semanticLayer, driver: connection.driver, tableMapping });
138
+ const activeConnection = requireActiveConnection();
139
+ const tableMapping = await resolveSemanticTableMapping(executor, activeConnection, semanticLayer);
140
+ const plan = buildExecutionPlan(resolved.cell, { semanticLayer, driver: activeConnection.driver, tableMapping });
132
141
  if (!plan) {
133
142
  snapshotCells.push({ cellId, status: 'idle', executionCount: 0, executedAt });
134
143
  continue;
135
144
  }
136
- const prepared = prepareLocalExecution(plan.sql, connection, projectRoot, projectConfig);
145
+ const prepared = prepareLocalExecution(plan.sql, activeConnection, projectRoot, projectConfig);
137
146
  assertAppAccess({ app, domain: resolved.domain ?? app.domain, level: 'execute' });
138
147
  const rawResult = await executor.executeQuery(prepared.sql, plan.sqlParams, runtimeVariables(plan.variables), prepared.connection);
139
148
  const result = normalizeQueryResult(rawResult);
@@ -189,22 +198,23 @@ export async function startLocalServer(opts) {
189
198
  }
190
199
  const absBlockPath = join(projectRoot, block.filePath);
191
200
  const source = readFileSync(absBlockPath, 'utf-8');
192
- const tableMapping = await resolveSemanticTableMapping(executor, connection, semanticLayer);
201
+ const activeConnection = requireActiveConnection();
202
+ const tableMapping = await resolveSemanticTableMapping(executor, activeConnection, semanticLayer);
193
203
  const semanticCompose = semanticLayer
194
204
  ? composeSemanticBlockSql(source, semanticLayer, {
195
- driver: connection.driver,
205
+ driver: activeConnection.driver,
196
206
  tableMapping,
197
207
  projectRoot,
198
208
  projectConfig,
199
209
  detectedProvider: semanticDetectedProvider,
200
210
  })
201
211
  : null;
202
- const plan = buildExecutionPlan({ id: `agent-${block.name}`, type: 'dql', source, title: block.name }, { semanticLayer, driver: connection.driver, tableMapping });
212
+ const plan = buildExecutionPlan({ id: `agent-${block.name}`, type: 'dql', source, title: block.name }, { semanticLayer, driver: activeConnection.driver, tableMapping });
203
213
  if (!plan && !semanticCompose?.sql) {
204
214
  const semanticError = semanticCompose?.diagnostics.find((diagnostic) => diagnostic.severity === 'error')?.message;
205
215
  throw new Error(semanticError ?? `Block "${block.name}" produced no executable SQL.`);
206
216
  }
207
- const prepared = prepareLocalExecution(semanticCompose?.sql ?? plan.sql, connection, projectRoot, projectConfig);
217
+ const prepared = prepareLocalExecution(semanticCompose?.sql ?? plan.sql, activeConnection, projectRoot, projectConfig);
208
218
  const app = loadRuntimeApp(projectRoot, activePersonaAppId());
209
219
  assertAppAccess({ app, domain: block.domain ?? app?.domain, level: 'execute' });
210
220
  const rawResult = await executor.executeQuery(prepared.sql, plan?.sqlParams ?? [], runtimeVariables(plan?.variables ?? {}), prepared.connection);
@@ -221,12 +231,13 @@ export async function startLocalServer(opts) {
221
231
  };
222
232
  };
223
233
  const executeGeneratedSqlForAgent = async (sql) => {
234
+ const activeConnection = requireActiveConnection();
224
235
  const boundedSql = buildAgentPreviewSql(sql);
225
236
  const semantic = prepareSemanticSql(boundedSql, semanticLayer);
226
237
  if (semantic.unresolvedRefs.length > 0) {
227
238
  throw new Error(`Unknown semantic reference${semantic.unresolvedRefs.length > 1 ? 's' : ''}: ${semantic.unresolvedRefs.join(', ')}`);
228
239
  }
229
- const prepared = prepareLocalExecution(semantic.sql, connection, projectRoot, projectConfig);
240
+ const prepared = prepareLocalExecution(semantic.sql, activeConnection, projectRoot, projectConfig);
230
241
  const app = loadRuntimeApp(projectRoot, activePersonaAppId());
231
242
  assertAppAccess({ app, domain: app?.domain, level: 'execute' });
232
243
  const rawResult = await executor.executeQuery(prepared.sql, [], runtimeVariables({}), prepared.connection);
@@ -242,10 +253,14 @@ export async function startLocalServer(opts) {
242
253
  const getSchemaContextForAgent = async (question) => {
243
254
  const catalogContext = await buildAgentSchemaContextFromCatalog(projectRoot, question).catch(() => []);
244
255
  if (catalogContext.length > 0) {
256
+ if (!connection)
257
+ return catalogContext;
245
258
  const enriched = await enrichAgentSchemaContextWithValueMatches(question, catalogContext, executor, connection);
246
259
  recordAgentRuntimeSchemaSnapshot(projectRoot, enriched, 'catalog enriched runtime schema');
247
260
  return enriched;
248
261
  }
262
+ if (!connection)
263
+ return [];
249
264
  try {
250
265
  const result = await executor.executeQuery(`SELECT table_schema, table_name, column_name, data_type
251
266
  FROM information_schema.columns
@@ -339,8 +354,9 @@ export async function startLocalServer(opts) {
339
354
  }
340
355
  // Hot-reload semantic layer on change and notify frontend
341
356
  if (dir === 'semantic-layer') {
342
- const executeQuery = semanticConfig?.provider === 'snowflake'
343
- ? async (sql) => { const r = await executor.executeQuery(sql, [], {}, connection); return { rows: r.rows }; }
357
+ const semanticConnection = connection;
358
+ const executeQuery = semanticConfig?.provider === 'snowflake' && semanticConnection
359
+ ? async (sql) => { const r = await executor.executeQuery(sql, [], {}, semanticConnection); return { rows: r.rows }; }
344
360
  : undefined;
345
361
  resolveSemanticLayerAsync(semanticConfig, projectRoot, executeQuery).then((refreshed) => {
346
362
  if (refreshed.layer) {
@@ -384,13 +400,14 @@ export async function startLocalServer(opts) {
384
400
  }
385
401
  return { candidate: validated, errors };
386
402
  };
387
- const runBlockStudioPreviewSource = async (source, targetConnection = connection) => {
403
+ const runBlockStudioPreviewSource = async (source, targetConnection) => {
404
+ const activeConnection = requireActiveConnection(targetConnection);
388
405
  let tableMapping;
389
406
  if (semanticLayer) {
390
407
  try {
391
408
  const tablesResult = await executor.executeQuery(`SELECT table_schema, table_name
392
409
  FROM information_schema.tables
393
- WHERE table_schema NOT IN ('information_schema', 'pg_catalog')`, [], {}, targetConnection);
410
+ WHERE table_schema NOT IN ('information_schema', 'pg_catalog')`, [], {}, activeConnection);
394
411
  tableMapping = buildSemanticTableMapping(semanticLayer, tablesResult.rows);
395
412
  }
396
413
  catch {
@@ -399,7 +416,7 @@ export async function startLocalServer(opts) {
399
416
  }
400
417
  const semanticCompose = semanticLayer
401
418
  ? composeSemanticBlockSql(source, semanticLayer, {
402
- driver: targetConnection.driver,
419
+ driver: activeConnection.driver,
403
420
  tableMapping,
404
421
  projectRoot,
405
422
  projectConfig,
@@ -414,8 +431,8 @@ export async function startLocalServer(opts) {
414
431
  ?? 'No executable SQL found in block source.';
415
432
  throw new Error(message);
416
433
  }
417
- const plan = buildExecutionPlan({ id: 'block-studio', type: 'dql', source, title: 'Block Studio' }, { semanticLayer, driver: targetConnection.driver, tableMapping });
418
- const prepared = prepareLocalExecution(semanticCompose?.sql ?? plan?.sql ?? executableSql, targetConnection, projectRoot, projectConfig);
434
+ const plan = buildExecutionPlan({ id: 'block-studio', type: 'dql', source, title: 'Block Studio' }, { semanticLayer, driver: activeConnection.driver, tableMapping });
435
+ const prepared = prepareLocalExecution(semanticCompose?.sql ?? plan?.sql ?? executableSql, activeConnection, projectRoot, projectConfig);
419
436
  const result = await executor.executeQuery(prepared.sql, plan?.sqlParams ?? [], runtimeVariables(plan?.variables ?? {}), prepared.connection);
420
437
  return {
421
438
  sql: prepared.sql,
@@ -423,10 +440,11 @@ export async function startLocalServer(opts) {
423
440
  chartConfig: plan?.chartConfig ?? validation.chartConfig ?? null,
424
441
  };
425
442
  };
426
- const runBlockStudioTestSummary = async (source, targetConnection = connection) => {
443
+ const runBlockStudioTestSummary = async (source, targetConnection) => {
444
+ const activeConnection = requireActiveConnection(targetConnection);
427
445
  const start = Date.now();
428
- const tableMapping = await resolveSemanticTableMapping(executor, targetConnection, semanticLayer);
429
- const plan = buildExecutionPlan({ id: 'block-studio-tests', type: 'dql', source, title: 'Block Studio' }, { semanticLayer, driver: targetConnection.driver, tableMapping });
446
+ const tableMapping = await resolveSemanticTableMapping(executor, activeConnection, semanticLayer);
447
+ const plan = buildExecutionPlan({ id: 'block-studio-tests', type: 'dql', source, title: 'Block Studio' }, { semanticLayer, driver: activeConnection.driver, tableMapping });
430
448
  const tests = plan?.tests ?? [];
431
449
  if (!plan || !plan.sql) {
432
450
  return {
@@ -445,7 +463,7 @@ export async function startLocalServer(opts) {
445
463
  if (tests.length === 0) {
446
464
  return { passed: 0, failed: 0, skipped: 0, duration: Date.now() - start, assertions: [], runAt: new Date() };
447
465
  }
448
- const prepared = prepareLocalExecution(plan.sql, targetConnection, projectRoot, projectConfig);
466
+ const prepared = prepareLocalExecution(plan.sql, activeConnection, projectRoot, projectConfig);
449
467
  const rawResult = await executor.executeQuery(prepared.sql, plan.sqlParams ?? [], runtimeVariables(plan.variables ?? {}), prepared.connection);
450
468
  const rows = Array.isArray(rawResult?.rows) ? rawResult.rows : [];
451
469
  const columns = Array.isArray(rawResult?.columns)
@@ -1166,7 +1184,9 @@ export async function startLocalServer(opts) {
1166
1184
  if (req.method === 'GET' && path === '/api/schema') {
1167
1185
  try {
1168
1186
  const dataFiles = scanDataFiles(projectRoot);
1169
- const { tables, columnsByPath } = await introspectSchema(executor, connection);
1187
+ const { tables, columnsByPath } = connection
1188
+ ? await introspectSchema(executor, connection)
1189
+ : { tables: [], columnsByPath: new Map() };
1170
1190
  const dbTables = tables.map((t) => ({
1171
1191
  name: t.path,
1172
1192
  path: t.path,
@@ -1186,8 +1206,8 @@ export async function startLocalServer(opts) {
1186
1206
  const message = error instanceof Error ? error.message : String(error);
1187
1207
  console.warn(`[dql] /api/schema introspection failed: ${message}`);
1188
1208
  const fallback = scanDataFiles(projectRoot).map((f) => ({ ...f, source: 'file' }));
1189
- res.writeHead(500, { 'Content-Type': 'application/json; charset=utf-8' });
1190
- res.end(serializeJSON({ error: message, fallback }));
1209
+ res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
1210
+ res.end(serializeJSON(fallback));
1191
1211
  }
1192
1212
  return;
1193
1213
  }
@@ -2258,7 +2278,7 @@ export async function startLocalServer(opts) {
2258
2278
  };
2259
2279
  const executeQuery = provider === 'snowflake'
2260
2280
  ? async (sql) => {
2261
- const result = await executor.executeQuery(sql, [], {}, connection);
2281
+ const result = await executor.executeQuery(sql, [], {}, requireActiveConnection());
2262
2282
  return { rows: result.rows };
2263
2283
  }
2264
2284
  : undefined;
@@ -2297,7 +2317,7 @@ export async function startLocalServer(opts) {
2297
2317
  try {
2298
2318
  const executeQuery = semanticImportManifest?.provider === 'snowflake'
2299
2319
  ? async (sql) => {
2300
- const result = await executor.executeQuery(sql, [], {}, connection);
2320
+ const result = await executor.executeQuery(sql, [], {}, requireActiveConnection());
2301
2321
  return { rows: result.rows };
2302
2322
  }
2303
2323
  : undefined;
@@ -2354,7 +2374,7 @@ export async function startLocalServer(opts) {
2354
2374
  };
2355
2375
  const executeQuery = provider === 'snowflake'
2356
2376
  ? async (sql) => {
2357
- const result = await executor.executeQuery(sql, [], {}, connection);
2377
+ const result = await executor.executeQuery(sql, [], {}, requireActiveConnection());
2358
2378
  return { rows: result.rows };
2359
2379
  }
2360
2380
  : undefined;
@@ -2386,7 +2406,7 @@ export async function startLocalServer(opts) {
2386
2406
  try {
2387
2407
  const executeQuery = semanticImportManifest?.provider === 'snowflake'
2388
2408
  ? async (sql) => {
2389
- const result = await executor.executeQuery(sql, [], {}, connection);
2409
+ const result = await executor.executeQuery(sql, [], {}, requireActiveConnection());
2390
2410
  return { rows: result.rows };
2391
2411
  }
2392
2412
  : undefined;
@@ -2620,8 +2640,11 @@ export async function startLocalServer(opts) {
2620
2640
  }
2621
2641
  // Try connector.listColumns() first
2622
2642
  let columns = [];
2643
+ const activeConnection = connection;
2623
2644
  try {
2624
- const connector = await executor.getConnector(connection);
2645
+ if (!activeConnection)
2646
+ throw new Error('No active connection');
2647
+ const connector = await executor.getConnector(activeConnection);
2625
2648
  if (typeof connector.listColumns === 'function') {
2626
2649
  const rawCols = await connector.listColumns(schemaName, tablePath);
2627
2650
  columns = rawCols.map((c) => ({ name: c.name, type: c.dataType }));
@@ -2639,7 +2662,9 @@ export async function startLocalServer(opts) {
2639
2662
  const sql = isFile
2640
2663
  ? `DESCRIBE SELECT * FROM read_csv_auto('${safePath}') LIMIT 0`
2641
2664
  : `DESCRIBE ${qualifiedIdentifier}`;
2642
- const result = await executor.executeQuery(sql, [], {}, connection);
2665
+ if (!activeConnection)
2666
+ throw new Error('No active connection');
2667
+ const result = await executor.executeQuery(sql, [], {}, activeConnection);
2643
2668
  columns = result.rows.map((row) => ({
2644
2669
  name: String(row['column_name'] ?? row['Field'] ?? ''),
2645
2670
  type: String(row['column_type'] ?? row['Type'] ?? ''),
@@ -2726,7 +2751,7 @@ export async function startLocalServer(opts) {
2726
2751
  }));
2727
2752
  return;
2728
2753
  }
2729
- const prepared = prepareLocalExecution(semantic.sql, isConnectionConfig(body.connection) ? body.connection : connection, projectRoot, projectConfig);
2754
+ const prepared = prepareLocalExecution(semantic.sql, requireActiveConnection(isConnectionConfig(body.connection) ? body.connection : connection), projectRoot, projectConfig);
2730
2755
  const app = loadRuntimeApp(projectRoot, typeof body.appId === 'string' ? body.appId : activePersonaAppId());
2731
2756
  const domain = typeof body.domain === 'string' ? body.domain : app?.domain;
2732
2757
  assertAppAccess({ app, domain, level: 'execute' });
@@ -2770,7 +2795,7 @@ export async function startLocalServer(opts) {
2770
2795
  const body = await readJSON(req);
2771
2796
  const { metrics = [], dimensions = [], filters = [], limit, timeDimension, orderBy, savedQuery, engine } = body;
2772
2797
  // Resolve which connection to use — request can override default
2773
- const targetConnection = isConnectionConfig(body.connection) ? body.connection : connection;
2798
+ const targetConnection = requireActiveConnection(isConnectionConfig(body.connection) ? body.connection : connection);
2774
2799
  const driver = targetConnection.driver;
2775
2800
  // Build table mapping: resolve semantic model names to actual DB table names
2776
2801
  let tableMapping;
@@ -2862,7 +2887,7 @@ export async function startLocalServer(opts) {
2862
2887
  }
2863
2888
  const body = await readJSON(req);
2864
2889
  const { metrics = [], dimensions = [], filters = [], limit, timeDimension, orderBy, savedQuery, engine } = body;
2865
- const targetConnection = isConnectionConfig(body.connection) ? body.connection : connection;
2890
+ const targetConnection = requireActiveConnection(isConnectionConfig(body.connection) ? body.connection : connection);
2866
2891
  const driver = targetConnection.driver;
2867
2892
  let tableMapping;
2868
2893
  try {
@@ -2947,7 +2972,7 @@ export async function startLocalServer(opts) {
2947
2972
  res.end(serializeJSON({ error: 'name and at least one metric are required.' }));
2948
2973
  return;
2949
2974
  }
2950
- const targetConnection = isConnectionConfig(body.connection) ? body.connection : connection;
2975
+ const targetConnection = requireActiveConnection(isConnectionConfig(body.connection) ? body.connection : connection);
2951
2976
  const composed = composeRuntimeSemanticQuery({
2952
2977
  metrics,
2953
2978
  dimensions,
@@ -3005,7 +3030,7 @@ export async function startLocalServer(opts) {
3005
3030
  let target = connection;
3006
3031
  try {
3007
3032
  const body = await readJSON(req);
3008
- target = normalizeProjectConnection(isConnectionConfig(body.connection) ? body.connection : connection, projectRoot);
3033
+ target = normalizeProjectConnection(requireActiveConnection(isConnectionConfig(body.connection) ? body.connection : connection), projectRoot);
3009
3034
  const connector = await executor.getConnector(target);
3010
3035
  const result = await validateConnectionForTest(connector, target);
3011
3036
  res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
@@ -3015,7 +3040,7 @@ export async function startLocalServer(opts) {
3015
3040
  res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
3016
3041
  res.end(serializeJSON({
3017
3042
  ok: false,
3018
- message: formatConnectionTestError(target, error),
3043
+ message: target ? formatConnectionTestError(target, error) : error instanceof Error ? error.message : String(error),
3019
3044
  }));
3020
3045
  }
3021
3046
  return;
@@ -3266,7 +3291,7 @@ export async function startLocalServer(opts) {
3266
3291
  }
3267
3292
  const resolved = resolveNotebookBlockReferenceCell(cell, projectRoot);
3268
3293
  const executableCell = resolved.cell;
3269
- const cellConnection = isConnectionConfig(body.connection) ? body.connection : connection;
3294
+ const cellConnection = requireActiveConnection(isConnectionConfig(body.connection) ? body.connection : connection);
3270
3295
  const tableMapping = needsSemanticTableMapping(executableCell)
3271
3296
  ? await resolveSemanticTableMapping(executor, cellConnection, semanticLayer)
3272
3297
  : undefined;
@@ -3276,7 +3301,7 @@ export async function startLocalServer(opts) {
3276
3301
  res.end(serializeJSON({ cellType: cell.type, result: null }));
3277
3302
  return;
3278
3303
  }
3279
- const prepared = prepareLocalExecution(plan.sql, isConnectionConfig(body.connection) ? body.connection : connection, projectRoot, projectConfig);
3304
+ const prepared = prepareLocalExecution(plan.sql, cellConnection, projectRoot, projectConfig);
3280
3305
  const app = loadRuntimeApp(projectRoot, typeof body.appId === 'string' ? body.appId : activePersonaAppId());
3281
3306
  assertAppAccess({ app, domain: resolved.domain ?? app?.domain, level: 'execute' });
3282
3307
  const rawResult = await executor.executeQuery(prepared.sql, plan.sqlParams, runtimeVariables(plan.variables), prepared.connection);
@@ -4363,7 +4388,9 @@ async function introspectSchema(executor, connection) {
4363
4388
  function buildDatabaseSchemaTree(projectRoot, executor, connection) {
4364
4389
  return (async () => {
4365
4390
  const dataFiles = scanDataFiles(projectRoot);
4366
- const { tables: dbTables, columnsByPath: dbColumnsByPath } = await introspectSchema(executor, connection);
4391
+ const { tables: dbTables, columnsByPath: dbColumnsByPath } = connection
4392
+ ? await introspectSchema(executor, connection)
4393
+ : { tables: [], columnsByPath: new Map() };
4367
4394
  const schemaMap = new Map();
4368
4395
  for (const table of dbTables) {
4369
4396
  const schemaName = table.schema || 'default';
@@ -4399,20 +4426,22 @@ function buildDatabaseSchemaTree(projectRoot, executor, connection) {
4399
4426
  const fileChildren = [];
4400
4427
  for (const file of dataFiles) {
4401
4428
  let columns = [];
4402
- try {
4403
- const ext = file.name.split('.').pop()?.toLowerCase();
4404
- const readFn = ext === 'parquet' ? 'read_parquet' : ext === 'json' ? 'read_json_auto' : 'read_csv_auto';
4405
- const descResult = await executor.executeQuery(`DESCRIBE SELECT * FROM ${readFn}('${file.path.replace(/'/g, "''")}') LIMIT 0`, [], {}, connection);
4406
- columns = descResult.rows.map((row) => ({
4407
- id: `db-column:${file.path}:${String(row['column_name'] ?? '')}`,
4408
- label: String(row['column_name'] ?? ''),
4409
- kind: 'column',
4410
- path: file.path,
4411
- type: String(row['column_type'] ?? ''),
4412
- }));
4413
- }
4414
- catch {
4415
- // file column discovery failed — empty children is fine
4429
+ if (connection) {
4430
+ try {
4431
+ const ext = file.name.split('.').pop()?.toLowerCase();
4432
+ const readFn = ext === 'parquet' ? 'read_parquet' : ext === 'json' ? 'read_json_auto' : 'read_csv_auto';
4433
+ const descResult = await executor.executeQuery(`DESCRIBE SELECT * FROM ${readFn}('${file.path.replace(/'/g, "''")}') LIMIT 0`, [], {}, connection);
4434
+ columns = descResult.rows.map((row) => ({
4435
+ id: `db-column:${file.path}:${String(row['column_name'] ?? '')}`,
4436
+ label: String(row['column_name'] ?? ''),
4437
+ kind: 'column',
4438
+ path: file.path,
4439
+ type: String(row['column_type'] ?? ''),
4440
+ }));
4441
+ }
4442
+ catch {
4443
+ // file column discovery failed — empty children is fine
4444
+ }
4416
4445
  }
4417
4446
  fileChildren.push({
4418
4447
  id: `db-table:${file.path}`,