@duckcodeailabs/dql-cli 1.6.20 → 1.6.22

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 (71) hide show
  1. package/dist/apps-api.d.ts +216 -2
  2. package/dist/apps-api.d.ts.map +1 -1
  3. package/dist/apps-api.js +1767 -46
  4. package/dist/apps-api.js.map +1 -1
  5. package/dist/args.d.ts +10 -0
  6. package/dist/args.d.ts.map +1 -1
  7. package/dist/args.js +19 -0
  8. package/dist/args.js.map +1 -1
  9. package/dist/assets/dql-notebook/assets/{codemirror-DJYUkPr1.js → codemirror-Co0dCEDr.js} +1 -1
  10. package/dist/assets/dql-notebook/assets/index-D9Owd4EN.css +1 -0
  11. package/dist/assets/dql-notebook/assets/index-nDZHVgfg.js +5636 -0
  12. package/dist/assets/dql-notebook/assets/{react-CRB3T2We.js → react-BRY8hXab.js} +2 -2
  13. package/dist/assets/dql-notebook/index.html +4 -4
  14. package/dist/commands/agent.d.ts +1 -1
  15. package/dist/commands/agent.d.ts.map +1 -1
  16. package/dist/commands/agent.js +50 -10
  17. package/dist/commands/agent.js.map +1 -1
  18. package/dist/commands/app.d.ts +4 -4
  19. package/dist/commands/app.d.ts.map +1 -1
  20. package/dist/commands/app.js +22 -19
  21. package/dist/commands/app.js.map +1 -1
  22. package/dist/commands/certify.d.ts.map +1 -1
  23. package/dist/commands/certify.js +70 -25
  24. package/dist/commands/certify.js.map +1 -1
  25. package/dist/commands/diff.d.ts.map +1 -1
  26. package/dist/commands/diff.js +108 -5
  27. package/dist/commands/diff.js.map +1 -1
  28. package/dist/commands/doctor.d.ts +1 -1
  29. package/dist/commands/doctor.d.ts.map +1 -1
  30. package/dist/commands/doctor.js +68 -7
  31. package/dist/commands/doctor.js.map +1 -1
  32. package/dist/commands/eval.d.ts +121 -0
  33. package/dist/commands/eval.d.ts.map +1 -0
  34. package/dist/commands/eval.js +350 -0
  35. package/dist/commands/eval.js.map +1 -0
  36. package/dist/commands/init.d.ts.map +1 -1
  37. package/dist/commands/init.js +50 -10
  38. package/dist/commands/init.js.map +1 -1
  39. package/dist/commands/notebook.d.ts +15 -0
  40. package/dist/commands/notebook.d.ts.map +1 -1
  41. package/dist/commands/notebook.js +32 -11
  42. package/dist/commands/notebook.js.map +1 -1
  43. package/dist/commands/propose.d.ts +23 -0
  44. package/dist/commands/propose.d.ts.map +1 -0
  45. package/dist/commands/propose.js +184 -0
  46. package/dist/commands/propose.js.map +1 -0
  47. package/dist/index.js +64 -11
  48. package/dist/index.js.map +1 -1
  49. package/dist/llm/analytics-tools.d.ts.map +1 -1
  50. package/dist/llm/analytics-tools.js +9 -4
  51. package/dist/llm/analytics-tools.js.map +1 -1
  52. package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
  53. package/dist/llm/providers/dql-agent-provider.js +21 -32
  54. package/dist/llm/providers/dql-agent-provider.js.map +1 -1
  55. package/dist/llm/providers/native-sdk-provider.d.ts.map +1 -1
  56. package/dist/llm/providers/native-sdk-provider.js +5 -2
  57. package/dist/llm/providers/native-sdk-provider.js.map +1 -1
  58. package/dist/local-runtime.d.ts +132 -4
  59. package/dist/local-runtime.d.ts.map +1 -1
  60. package/dist/local-runtime.js +2120 -46
  61. package/dist/local-runtime.js.map +1 -1
  62. package/dist/package.json +10 -10
  63. package/dist/propose-enrich.d.ts +13 -0
  64. package/dist/propose-enrich.d.ts.map +1 -0
  65. package/dist/propose-enrich.js +34 -0
  66. package/dist/propose-enrich.js.map +1 -0
  67. package/dist/settings/provider-settings.js +2 -2
  68. package/dist/settings/provider-settings.js.map +1 -1
  69. package/package.json +11 -11
  70. package/dist/assets/dql-notebook/assets/index-Dgqvyn5s.js +0 -3886
  71. package/dist/assets/dql-notebook/assets/index-RaDW1A5g.css +0 -1
@@ -0,0 +1,350 @@
1
+ /**
2
+ * `dql eval` — Routing-accuracy harness for the DQL answer agent.
3
+ *
4
+ * Replays a golden set of questions through the EXISTING agent router
5
+ * (`planAgentAnswer`) and scores how well DQL routes each question:
6
+ * certified vs generated vs missing-context (refusal), which certified block
7
+ * it selected, and whether the answer grain matches.
8
+ *
9
+ * The golden set comes from two sources:
10
+ * 1. Every certified block's `examples[].question` in the compiled manifest.
11
+ * These expect route = certified and expect that same block to be selected.
12
+ * 2. Optional `eval/*.yaml` files in the project, each a list (or { cases: [] })
13
+ * of `{ question, expectRoute, expectBlock?, expectGrain?, expectRefuse?, name? }`.
14
+ * These let a repo express the harder categories the block examples cannot:
15
+ * generated (Tier-2), insufficient-context (refusal), conflict, wrong-grain.
16
+ *
17
+ * This command READS the router output only. It never executes SQL against a
18
+ * warehouse and never changes routing, the manifest schema, or the DQL language.
19
+ *
20
+ * Usage:
21
+ * dql eval [path] Replay the golden set, print a report
22
+ * dql eval [path] --format json Emit a machine-readable JSON report
23
+ * dql eval [path] --min-route-accuracy 0.9 Fail (exit 1) below this route accuracy
24
+ * dql eval [path] --min-refusal 0.8 Fail (exit 1) below this refusal recall
25
+ * dql eval [path] --no-examples Skip manifest block examples (yaml only)
26
+ */
27
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
28
+ import { join, resolve } from 'node:path';
29
+ import { load as loadYaml } from 'js-yaml';
30
+ import { buildManifest, resolveDbtManifestPath, } from '@duckcodeailabs/dql-core';
31
+ import { planAgentAnswer } from '@duckcodeailabs/dql-agent';
32
+ const ZERO_RESULTS = [];
33
+ /** Map the router's route vocabulary onto the spec's route labels. */
34
+ export function mapRoute(route) {
35
+ switch (route) {
36
+ case 'certified':
37
+ return 'certified';
38
+ case 'generated_sql':
39
+ return 'generated';
40
+ case 'clarify':
41
+ return 'missing_context';
42
+ case 'research':
43
+ return 'research';
44
+ default:
45
+ return 'missing_context';
46
+ }
47
+ }
48
+ function blockNameFromObjectKey(objectKey) {
49
+ if (!objectKey)
50
+ return undefined;
51
+ // Certified block keys are minted as `dql:block:<name>`.
52
+ return objectKey.replace(/^dql:block:/, '');
53
+ }
54
+ function isCertified(block) {
55
+ return String(block.status ?? '').toLowerCase() === 'certified';
56
+ }
57
+ function normalizeGrain(grain) {
58
+ return String(grain ?? '').trim().toLowerCase();
59
+ }
60
+ /**
61
+ * Build the golden set from a compiled manifest plus optional eval/*.yaml.
62
+ * Each certified block contributes one case per example question.
63
+ */
64
+ export function collectEvalCases(manifest, yamlCases, includeBlockExamples) {
65
+ const cases = [];
66
+ if (includeBlockExamples) {
67
+ for (const block of Object.values(manifest.blocks ?? {})) {
68
+ if (!isCertified(block))
69
+ continue;
70
+ for (const example of block.examples ?? []) {
71
+ const question = example.question?.trim();
72
+ if (!question)
73
+ continue;
74
+ cases.push({
75
+ name: `${block.name} · ${question}`,
76
+ question,
77
+ source: 'block_example',
78
+ category: 'certified',
79
+ expectRoute: 'certified',
80
+ expectBlock: block.name,
81
+ expectGrain: block.grain,
82
+ });
83
+ }
84
+ }
85
+ }
86
+ cases.push(...yamlCases);
87
+ return cases;
88
+ }
89
+ /** Score a single case against the router's decision. Pure + unit-testable. */
90
+ export function scoreCase(testCase, plan, manifest) {
91
+ const actualRoute = mapRoute(plan.routeDecision.route);
92
+ const actualBlock = blockNameFromObjectKey(plan.routeDecision.exactObjectKey);
93
+ const actualGrain = actualBlock ? manifest.blocks?.[actualBlock]?.grain : undefined;
94
+ const hasBlockingMissingContext = (plan.missingContext ?? []).some((item) => item.severity === 'blocking');
95
+ const failures = [];
96
+ // Refusal expectation takes precedence: a refusal means route = missing_context.
97
+ const expectRoute = testCase.expectRefuse ? 'missing_context' : testCase.expectRoute;
98
+ let routeMatch;
99
+ if (expectRoute !== undefined) {
100
+ routeMatch = actualRoute === expectRoute;
101
+ if (!routeMatch)
102
+ failures.push(`route expected ${expectRoute}, got ${actualRoute}`);
103
+ }
104
+ let refusalMatch;
105
+ if (testCase.expectRefuse !== undefined) {
106
+ const actuallyRefused = actualRoute === 'missing_context';
107
+ refusalMatch = actuallyRefused === testCase.expectRefuse;
108
+ if (!refusalMatch) {
109
+ failures.push(testCase.expectRefuse
110
+ ? `expected a safe refusal, got route ${actualRoute}`
111
+ : `expected no refusal, but router refused`);
112
+ }
113
+ }
114
+ let blockMatch;
115
+ if (testCase.expectBlock !== undefined) {
116
+ blockMatch = actualBlock === testCase.expectBlock;
117
+ if (!blockMatch) {
118
+ failures.push(`block expected ${testCase.expectBlock}, got ${actualBlock ?? 'none'}`);
119
+ }
120
+ }
121
+ let grainMatch;
122
+ if (testCase.expectGrain !== undefined) {
123
+ grainMatch = normalizeGrain(actualGrain) === normalizeGrain(testCase.expectGrain);
124
+ if (!grainMatch) {
125
+ failures.push(`grain expected ${testCase.expectGrain}, got ${actualGrain ?? 'none'}`);
126
+ }
127
+ }
128
+ return {
129
+ name: testCase.name,
130
+ question: testCase.question,
131
+ source: testCase.source,
132
+ category: testCase.category,
133
+ passed: failures.length === 0,
134
+ actualRoute,
135
+ actualBlock,
136
+ actualGrain,
137
+ hasBlockingMissingContext,
138
+ expectRoute,
139
+ expectBlock: testCase.expectBlock,
140
+ expectGrain: testCase.expectGrain,
141
+ expectRefuse: testCase.expectRefuse,
142
+ routeMatch,
143
+ blockMatch,
144
+ grainMatch,
145
+ refusalMatch,
146
+ failures,
147
+ };
148
+ }
149
+ function ratio(numerator, denominator) {
150
+ if (denominator === 0)
151
+ return null;
152
+ return Number((numerator / denominator).toFixed(4));
153
+ }
154
+ /** Aggregate per-case results into the spec's score set. Pure + unit-testable. */
155
+ export function computeScores(results) {
156
+ const routeCases = results.filter((r) => r.expectRoute !== undefined);
157
+ const blockCases = results.filter((r) => r.expectBlock !== undefined);
158
+ const grainCases = results.filter((r) => r.expectGrain !== undefined);
159
+ const refusalExpected = results.filter((r) => r.expectRefuse === true);
160
+ // Refusal precision: of every case where the router refused, how many should have?
161
+ const routerRefused = results.filter((r) => r.actualRoute === 'missing_context');
162
+ const routerRefusedCorrectly = routerRefused.filter((r) => r.expectRefuse === true);
163
+ return {
164
+ total: results.length,
165
+ passed: results.filter((r) => r.passed).length,
166
+ routeAccuracy: ratio(routeCases.filter((r) => r.routeMatch).length, routeCases.length),
167
+ blockSelectionAccuracy: ratio(blockCases.filter((r) => r.blockMatch).length, blockCases.length),
168
+ grainMatchPrecision: ratio(grainCases.filter((r) => r.grainMatch).length, grainCases.length),
169
+ refusalPrecision: ratio(routerRefusedCorrectly.length, routerRefused.length),
170
+ refusalRecall: ratio(refusalExpected.filter((r) => r.refusalMatch).length, refusalExpected.length),
171
+ };
172
+ }
173
+ function normalizeYamlRoute(value) {
174
+ if (!value)
175
+ return undefined;
176
+ const v = value.trim().toLowerCase();
177
+ if (v === 'certified')
178
+ return 'certified';
179
+ if (v === 'generated' || v === 'generated_sql')
180
+ return 'generated';
181
+ if (v === 'missing_context' || v === 'missing-context' || v === 'clarify' || v === 'refuse') {
182
+ return 'missing_context';
183
+ }
184
+ if (v === 'research')
185
+ return 'research';
186
+ return undefined;
187
+ }
188
+ function inferCategory(raw, route) {
189
+ const explicit = raw.category?.trim().toLowerCase();
190
+ if (explicit === 'certified')
191
+ return 'certified';
192
+ if (explicit === 'generated')
193
+ return 'generated';
194
+ if (explicit === 'insufficient_context' || explicit === 'refusal')
195
+ return 'insufficient_context';
196
+ if (explicit === 'conflict')
197
+ return 'conflict';
198
+ if (explicit === 'wrong_grain')
199
+ return 'wrong_grain';
200
+ // Infer from expectations when the author did not label it.
201
+ if (raw.expectRefuse)
202
+ return 'insufficient_context';
203
+ if (route === 'missing_context')
204
+ return 'insufficient_context';
205
+ if (route === 'generated')
206
+ return 'generated';
207
+ return 'certified';
208
+ }
209
+ /** Load and normalize all `eval/*.yaml` cases for a project. */
210
+ export function loadYamlEvalCases(projectRoot) {
211
+ const evalDir = join(projectRoot, 'eval');
212
+ if (!existsSync(evalDir))
213
+ return [];
214
+ const files = readdirSync(evalDir).filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'));
215
+ const cases = [];
216
+ for (const file of files.sort()) {
217
+ const raw = loadYaml(readFileSync(join(evalDir, file), 'utf-8'));
218
+ const rawCases = Array.isArray(raw) ? raw : raw?.cases ?? [];
219
+ for (const rc of rawCases) {
220
+ const question = rc.question?.trim();
221
+ if (!question)
222
+ continue;
223
+ const route = normalizeYamlRoute(rc.expectRoute);
224
+ cases.push({
225
+ name: rc.name?.trim() || `${file} · ${question}`,
226
+ question,
227
+ source: 'yaml',
228
+ category: inferCategory(rc, route),
229
+ expectRoute: route,
230
+ expectBlock: rc.expectBlock?.trim() || undefined,
231
+ expectGrain: rc.expectGrain?.trim() || undefined,
232
+ expectRefuse: typeof rc.expectRefuse === 'boolean' ? rc.expectRefuse : undefined,
233
+ });
234
+ }
235
+ }
236
+ return cases;
237
+ }
238
+ /**
239
+ * Run the full eval: build (or read) the manifest, collect cases, replay each
240
+ * through the router, score, and assemble the report. Side-effect free except
241
+ * for invoking the (read-only) router. Returns a structured report.
242
+ */
243
+ export async function runEvalHarness(projectRoot, options) {
244
+ const manifest = buildManifest({
245
+ projectRoot,
246
+ dbtManifestPath: resolveDbtManifestPath(projectRoot) ?? undefined,
247
+ });
248
+ const yamlCases = loadYamlEvalCases(projectRoot);
249
+ const cases = collectEvalCases(manifest, yamlCases, options.includeBlockExamples);
250
+ const results = [];
251
+ for (const testCase of cases) {
252
+ const plan = await planAgentAnswer(projectRoot, {
253
+ question: testCase.question,
254
+ surface: 'cli',
255
+ });
256
+ results.push(scoreCase(testCase, plan, manifest));
257
+ }
258
+ const scores = computeScores(results.length > 0 ? results : ZERO_RESULTS);
259
+ const ok = meetsThresholds(scores, options.minRouteAccuracy, options.minRefusal);
260
+ return {
261
+ ok,
262
+ scores,
263
+ thresholds: { minRouteAccuracy: options.minRouteAccuracy, minRefusal: options.minRefusal },
264
+ results,
265
+ };
266
+ }
267
+ /** A threshold gate only fails when a configured threshold has measurable data below it. */
268
+ export function meetsThresholds(scores, minRouteAccuracy, minRefusal) {
269
+ if (minRouteAccuracy !== null &&
270
+ scores.routeAccuracy !== null &&
271
+ scores.routeAccuracy < minRouteAccuracy) {
272
+ return false;
273
+ }
274
+ if (minRefusal !== null && scores.refusalRecall !== null && scores.refusalRecall < minRefusal) {
275
+ return false;
276
+ }
277
+ return true;
278
+ }
279
+ function formatRate(value) {
280
+ return value === null ? 'n/a' : `${Math.round(value * 1000) / 10}%`;
281
+ }
282
+ export async function runEval(pathArg, rest, flags) {
283
+ const allArgs = [...(pathArg ? [pathArg] : []), ...rest];
284
+ const positional = allArgs.filter((a) => !a.startsWith('-'));
285
+ const projectRoot = resolve(positional[0] ?? '.');
286
+ if (!existsSync(join(projectRoot, 'dql.config.json'))) {
287
+ console.error('No DQL project found (missing dql.config.json). Run from a project root or pass a project path.');
288
+ process.exitCode = 1;
289
+ return;
290
+ }
291
+ const includeBlockExamples = !flags.noExamples;
292
+ const minRouteAccuracy = flags.minRouteAccuracy ?? null;
293
+ const minRefusal = flags.minRefusal ?? null;
294
+ const report = await runEvalHarness(projectRoot, {
295
+ includeBlockExamples,
296
+ minRouteAccuracy,
297
+ minRefusal,
298
+ });
299
+ if (flags.format === 'json') {
300
+ console.log(JSON.stringify(report, null, 2));
301
+ if (!report.ok)
302
+ process.exitCode = 1;
303
+ return;
304
+ }
305
+ printReport(report);
306
+ if (!report.ok)
307
+ process.exitCode = 1;
308
+ }
309
+ function printReport(report) {
310
+ const { results, scores } = report;
311
+ console.log('\n DQL Eval — routing accuracy');
312
+ console.log(' ' + '='.repeat(50));
313
+ if (results.length === 0) {
314
+ console.log('\n No eval cases found.');
315
+ console.log(' Add `examples = [{ question = "..." }]` to certified blocks,');
316
+ console.log(' or create eval/*.yaml cases, then run `dql compile` and retry.\n');
317
+ return;
318
+ }
319
+ console.log('');
320
+ for (const result of results) {
321
+ const icon = result.passed ? '✓' : '✕';
322
+ const route = `[${result.actualRoute}]`;
323
+ console.log(` ${icon} ${route} ${result.name}`);
324
+ for (const failure of result.failures) {
325
+ console.log(` - ${failure}`);
326
+ }
327
+ }
328
+ console.log('\n Scores');
329
+ console.log(' ' + '-'.repeat(50));
330
+ console.log(` Cases passed: ${scores.passed}/${scores.total}`);
331
+ console.log(` Route accuracy: ${formatRate(scores.routeAccuracy)}`);
332
+ console.log(` Block-selection accuracy:${formatRate(scores.blockSelectionAccuracy).padStart(7)}`);
333
+ console.log(` Grain-match precision: ${formatRate(scores.grainMatchPrecision)}`);
334
+ console.log(` Refusal precision: ${formatRate(scores.refusalPrecision)}`);
335
+ console.log(` Refusal recall: ${formatRate(scores.refusalRecall)}`);
336
+ const t = report.thresholds;
337
+ if (t.minRouteAccuracy !== null || t.minRefusal !== null) {
338
+ console.log('\n Thresholds');
339
+ console.log(' ' + '-'.repeat(50));
340
+ if (t.minRouteAccuracy !== null) {
341
+ console.log(` --min-route-accuracy ${t.minRouteAccuracy} (route accuracy ${formatRate(scores.routeAccuracy)})`);
342
+ }
343
+ if (t.minRefusal !== null) {
344
+ console.log(` --min-refusal ${t.minRefusal} (refusal recall ${formatRate(scores.refusalRecall)})`);
345
+ }
346
+ console.log(`\n ${report.ok ? '✓ PASS — thresholds met.' : '✕ FAIL — below configured thresholds.'}`);
347
+ }
348
+ console.log('');
349
+ }
350
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA4JtF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8KtF"}
@@ -1,6 +1,7 @@
1
1
  import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
2
2
  import { basename, join, relative, resolve } from 'node:path';
3
3
  import { createWelcomeNotebook, serializeNotebook } from '@duckcodeailabs/dql-notebook';
4
+ import { resolveLocalOwner, seedDefaultSkills } from '@duckcodeailabs/dql-agent';
4
5
  import { performSemanticImport } from '../semantic-import.js';
5
6
  import { runNotebook } from './notebook.js';
6
7
  export async function runInit(targetArg, flags) {
@@ -36,12 +37,16 @@ export async function runInit(targetArg, flags) {
36
37
  const hasDbtSemanticDefinitions = dbtProjectDir
37
38
  ? containsDbtSemanticDefinitions(join(dbtProjectDir, 'models'))
38
39
  : false;
39
- // Detect DuckDB file in the directory
40
- const duckdbPath = detectDuckDBFile(targetDir);
40
+ // Detect DuckDB file in the workspace OR the dbt project dir (common layout:
41
+ // the .duckdb lives next to dbt_project.yml, a level up from the DQL workspace).
42
+ const duckdbPath = detectDuckDBFile(targetDir, dbtProjectDir);
41
43
  // Don't overwrite existing dql.config.json
42
44
  const configPath = join(targetDir, 'dql.config.json');
43
45
  if (!existsSync(configPath)) {
44
- const config = buildConfig(projectName, isDbt, duckdbPath, dbtProjectDir, targetDir);
46
+ // Resolve the local OSS owner up front (git user.email $USER → guest@local)
47
+ // and persist it as identity.owner so drafts are never born "Missing owner".
48
+ const owner = resolveLocalOwner(targetDir, { persist: false });
49
+ const config = buildConfig(projectName, isDbt, duckdbPath, dbtProjectDir, targetDir, owner);
45
50
  writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
46
51
  }
47
52
  // Create DQL directories
@@ -91,6 +96,16 @@ export async function runInit(targetArg, flags) {
91
96
  });
92
97
  importedSemanticCatalog = true;
93
98
  }
99
+ // Seed the three editable starter Skills into .dql/skills/ (idempotent — never
100
+ // clobbers user edits). The metrics glossary reflects the semantic layer, so
101
+ // this runs AFTER any semantic import above.
102
+ let seededSkills = 0;
103
+ try {
104
+ seededSkills = seedDefaultSkills(targetDir).created.length;
105
+ }
106
+ catch {
107
+ // Skill seeding is best-effort; never fail `dql init` over it.
108
+ }
94
109
  // Output
95
110
  if (flags.format === 'json') {
96
111
  console.log(JSON.stringify({
@@ -99,6 +114,7 @@ export async function runInit(targetArg, flags) {
99
114
  created: true,
100
115
  dbt: isDbt,
101
116
  duckdb: duckdbPath ?? null,
117
+ seededSkills,
102
118
  }, null, 2));
103
119
  return;
104
120
  }
@@ -127,6 +143,9 @@ export async function runInit(targetArg, flags) {
127
143
  if (importedSemanticCatalog) {
128
144
  console.log(' semantic-layer/ (imported local semantic catalog)');
129
145
  }
146
+ if (seededSkills > 0) {
147
+ console.log(` .dql/skills/ (${seededSkills} editable starter skill${seededSkills === 1 ? '' : 's'})`);
148
+ }
130
149
  console.log('');
131
150
  console.log(' Next steps:');
132
151
  const step = targetArg && targetArg !== '.' ? 1 : 0;
@@ -193,7 +212,7 @@ function containsDbtSemanticDefinitions(root) {
193
212
  }
194
213
  return false;
195
214
  }
196
- function detectDuckDBFile(dir) {
215
+ function detectDuckDBFile(workspaceDir, dbtProjectDir) {
197
216
  // Common DuckDB file locations in dbt projects
198
217
  const candidates = [
199
218
  'jaffle_shop.duckdb',
@@ -204,25 +223,46 @@ function detectDuckDBFile(dir) {
204
223
  'target/jaffle_shop.duckdb',
205
224
  'reports/jaffle_shop.duckdb',
206
225
  ];
226
+ // 1. The DQL workspace itself — store a bare relative path.
207
227
  for (const candidate of candidates) {
208
- if (existsSync(join(dir, candidate))) {
228
+ if (existsSync(join(workspaceDir, candidate)))
209
229
  return candidate;
230
+ }
231
+ const inWorkspace = firstDuckDBIn(workspaceDir);
232
+ if (inWorkspace)
233
+ return inWorkspace;
234
+ // 2. The dbt project dir (often a level up). Store the path RELATIVE TO THE
235
+ // workspace (e.g. `../jaffle_shop.duckdb`) so the stored connection — which
236
+ // resolves relative filepaths against the workspace — opens the real file.
237
+ if (dbtProjectDir && resolve(dbtProjectDir) !== resolve(workspaceDir)) {
238
+ for (const candidate of candidates) {
239
+ const abs = join(dbtProjectDir, candidate);
240
+ if (existsSync(abs))
241
+ return relative(workspaceDir, abs) || candidate;
210
242
  }
243
+ const inDbt = firstDuckDBIn(dbtProjectDir);
244
+ if (inDbt)
245
+ return relative(workspaceDir, join(dbtProjectDir, inDbt)) || inDbt;
211
246
  }
212
- // Search root directory for any .duckdb file
247
+ return null;
248
+ }
249
+ function firstDuckDBIn(dir) {
213
250
  try {
214
- const entries = readdirSync(dir);
215
- const duckdb = entries.find((e) => e.endsWith('.duckdb'));
216
- return duckdb ?? null;
251
+ return readdirSync(dir).find((entry) => entry.endsWith('.duckdb')) ?? null;
217
252
  }
218
253
  catch {
219
254
  return null;
220
255
  }
221
256
  }
222
- function buildConfig(projectName, isDbt, duckdbPath, dbtProjectDir, projectRoot) {
257
+ function buildConfig(projectName, isDbt, duckdbPath, dbtProjectDir, projectRoot, owner) {
223
258
  const config = {
224
259
  project: projectName,
225
260
  };
261
+ // Persist the resolved local owner so AI-drafted blocks pass the Certifier's
262
+ // owner rule out of the box (humans still certify).
263
+ if (owner && owner.trim()) {
264
+ config.identity = { owner: owner.trim() };
265
+ }
226
266
  if (duckdbPath) {
227
267
  config.defaultConnectionName = 'default';
228
268
  config.connections = {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,20 @@
1
1
  import type { CLIFlags } from '../args.js';
2
2
  import type { ProjectConfig } from '../local-runtime.js';
3
3
  export declare function resolveNotebookConnection(config: ProjectConfig, projectRoot: string): import("@duckcodeailabs/dql-connectors").ConnectionConfig | null;
4
+ export interface ProjectRuntimeHandle {
5
+ port: number;
6
+ url: string;
7
+ /** Stop the HTTP listener so the process can exit (no-op if already closed). */
8
+ close: () => Promise<void>;
9
+ }
10
+ /**
11
+ * Start the local notebook/runtime HTTP server for a project and return a handle.
12
+ * Shared by `dql notebook` (long-running) and `dql agent ask` (which starts an
13
+ * ephemeral runtime on a free port — `preferredPort: 0` — and closes it after).
14
+ */
15
+ export declare function startProjectRuntime(projectRoot: string, opts?: {
16
+ preferredPort?: number;
17
+ host?: string;
18
+ }): Promise<ProjectRuntimeHandle>;
4
19
  export declare function runNotebook(targetArg: string | null, flags: CLIFlags): Promise<void>;
5
20
  //# sourceMappingURL=notebook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAezD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oEAInF;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC1F"}
1
+ {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAezD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oEAInF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,OAAO,CAAC,oBAAoB,CAAC,CAwB/B;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B1F"}
@@ -14,28 +14,49 @@ export function resolveNotebookConnection(config, projectRoot) {
14
14
  ? normalizeProjectConnection(config.defaultConnection, projectRoot)
15
15
  : null;
16
16
  }
17
- export async function runNotebook(targetArg, flags) {
18
- const baseDir = resolve(targetArg ?? '.');
19
- const projectRoot = findProjectRoot(baseDir);
20
- if (!existsSync(join(projectRoot, 'dql.config.json'))) {
21
- throw new Error(`No DQL project was found at "${baseDir}". Run "dql notebook" from a project root, or pass a project path such as "dql notebook ./my-dql-project".`);
22
- }
17
+ /**
18
+ * Start the local notebook/runtime HTTP server for a project and return a handle.
19
+ * Shared by `dql notebook` (long-running) and `dql agent ask` (which starts an
20
+ * ephemeral runtime on a free port — `preferredPort: 0` — and closes it after).
21
+ */
22
+ export async function startProjectRuntime(projectRoot, opts = {}) {
23
23
  const config = loadProjectConfig(projectRoot);
24
24
  const executor = new QueryExecutor();
25
25
  const connection = resolveNotebookConnection(config, projectRoot);
26
- const host = flags.host ?? process.env.DQL_HOST ?? '127.0.0.1';
26
+ const host = opts.host ?? process.env.DQL_HOST ?? '127.0.0.1';
27
+ let server;
27
28
  const port = await startLocalServer({
28
29
  rootDir: NOTEBOOK_APP_DIR,
29
30
  projectRoot,
30
31
  executor,
31
32
  connection,
32
- preferredPort: flags.port ?? config.preview?.port ?? 3474,
33
+ preferredPort: opts.preferredPort ?? 0,
33
34
  host,
35
+ captureServer: (created) => { server = created; },
34
36
  });
35
- // When binding 0.0.0.0 (typical for Docker) the URL we print should be
36
- // something the user can actually click. Show 127.0.0.1 in that case.
37
37
  const printHost = host === '0.0.0.0' ? '127.0.0.1' : host;
38
- const url = `http://${printHost}:${port}`;
38
+ return {
39
+ port,
40
+ url: `http://${printHost}:${port}`,
41
+ close: () => new Promise((resolveClose) => {
42
+ if (!server)
43
+ return resolveClose();
44
+ server.close(() => resolveClose());
45
+ }),
46
+ };
47
+ }
48
+ export async function runNotebook(targetArg, flags) {
49
+ const baseDir = resolve(targetArg ?? '.');
50
+ const projectRoot = findProjectRoot(baseDir);
51
+ if (!existsSync(join(projectRoot, 'dql.config.json'))) {
52
+ throw new Error(`No DQL project was found at "${baseDir}". Run "dql notebook" from a project root, or pass a project path such as "dql notebook ./my-dql-project".`);
53
+ }
54
+ const config = loadProjectConfig(projectRoot);
55
+ const host = flags.host ?? process.env.DQL_HOST ?? '127.0.0.1';
56
+ const { port, url } = await startProjectRuntime(projectRoot, {
57
+ preferredPort: flags.port ?? config.preview?.port ?? 3474,
58
+ host,
59
+ });
39
60
  // Auto-open only on loopback. In a container or on a remote host, opening
40
61
  // the host's browser is either useless or wrong.
41
62
  const shouldOpen = (flags.open ?? config.preview?.open ?? true) && host === '127.0.0.1';