@duckcodeailabs/dql-cli 1.6.21 → 1.6.23

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 (65) hide show
  1. package/dist/apps-api.d.ts +20 -3
  2. package/dist/apps-api.d.ts.map +1 -1
  3. package/dist/apps-api.js +25 -0
  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-BhNs4jWA.js +5636 -0
  11. package/dist/assets/dql-notebook/assets/index-D9Owd4EN.css +1 -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.map +1 -1
  15. package/dist/commands/agent.js +44 -4
  16. package/dist/commands/agent.js.map +1 -1
  17. package/dist/commands/certify.d.ts.map +1 -1
  18. package/dist/commands/certify.js +70 -25
  19. package/dist/commands/certify.js.map +1 -1
  20. package/dist/commands/diff.d.ts.map +1 -1
  21. package/dist/commands/diff.js +108 -5
  22. package/dist/commands/diff.js.map +1 -1
  23. package/dist/commands/doctor.d.ts.map +1 -1
  24. package/dist/commands/doctor.js +38 -0
  25. package/dist/commands/doctor.js.map +1 -1
  26. package/dist/commands/eval.d.ts +121 -0
  27. package/dist/commands/eval.d.ts.map +1 -0
  28. package/dist/commands/eval.js +350 -0
  29. package/dist/commands/eval.js.map +1 -0
  30. package/dist/commands/init.d.ts.map +1 -1
  31. package/dist/commands/init.js +50 -10
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/notebook.d.ts +15 -0
  34. package/dist/commands/notebook.d.ts.map +1 -1
  35. package/dist/commands/notebook.js +32 -11
  36. package/dist/commands/notebook.js.map +1 -1
  37. package/dist/commands/propose.d.ts +23 -0
  38. package/dist/commands/propose.d.ts.map +1 -0
  39. package/dist/commands/propose.js +184 -0
  40. package/dist/commands/propose.js.map +1 -0
  41. package/dist/index.js +53 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/llm/analytics-tools.d.ts.map +1 -1
  44. package/dist/llm/analytics-tools.js +9 -4
  45. package/dist/llm/analytics-tools.js.map +1 -1
  46. package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
  47. package/dist/llm/providers/dql-agent-provider.js +21 -32
  48. package/dist/llm/providers/dql-agent-provider.js.map +1 -1
  49. package/dist/llm/providers/native-sdk-provider.d.ts.map +1 -1
  50. package/dist/llm/providers/native-sdk-provider.js +5 -2
  51. package/dist/llm/providers/native-sdk-provider.js.map +1 -1
  52. package/dist/local-runtime.d.ts +130 -2
  53. package/dist/local-runtime.d.ts.map +1 -1
  54. package/dist/local-runtime.js +2079 -43
  55. package/dist/local-runtime.js.map +1 -1
  56. package/dist/package.json +10 -10
  57. package/dist/propose-enrich.d.ts +13 -0
  58. package/dist/propose-enrich.d.ts.map +1 -0
  59. package/dist/propose-enrich.js +34 -0
  60. package/dist/propose-enrich.js.map +1 -0
  61. package/dist/settings/provider-settings.js +2 -2
  62. package/dist/settings/provider-settings.js.map +1 -1
  63. package/package.json +11 -11
  64. package/dist/assets/dql-notebook/assets/index-CCtTMLp2.css +0 -1
  65. package/dist/assets/dql-notebook/assets/index-D99oHXXj.js +0 -5429
@@ -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":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAExF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,SAAwB,EAAE,KAAe;IACrE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC;IAEzD,8CAA8C;IAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,kBAAkB,GACtB,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7F,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;QACzF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,wEAAwE;IACxE,kEAAkE;IAClE,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC3D,IAAI,aAAa,GAAkB,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;YACtD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACxC,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,yBAAyB,GAAG,aAAa;QAC7C,CAAC,CAAC,8BAA8B,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC,CAAC,KAAK,CAAC;IAEV,sCAAsC;IACtC,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE/C,2CAA2C;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QACrF,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,yBAAyB;IACzB,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,2BAA2B,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,gBAAgB,GACpB,6IAA6I,CAAC;IAChJ,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5C,aAAa,CAAC,aAAa,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,aAAa,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,CAAC;IACrE,CAAC;IAED,gDAAgD;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,MAAM,qBAAqB,GAAG,OAAO,UAAU,EAAE,qBAAqB,KAAK,QAAQ;YACjF,CAAC,CAAC,UAAU,CAAC,qBAAqB;YAClC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,MAAM,GAAG,UAAU,EAAE,WAAW,EAAE,CAAC,qBAAqB,CAAC,EAAE,MAAM;eAClE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;QAC9C,MAAM,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACjF,aAAa,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,IAAI,KAAK,IAAI,yBAAyB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QACrH,MAAM,qBAAqB,CAAC;YAC1B,iBAAiB,EAAE,SAAS;YAC5B,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE;gBACZ,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;aAC1E;SACF,CAAC,CAAC;QACH,uBAAuB,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,SAAS;IACT,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,KAAK;YACV,MAAM,EAAE,UAAU,IAAI,IAAI;SAC3B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,IAAI,KAAK,IAAI,aAAa,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,+BAA+B,aAAa,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;IACxD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,uBAAuB,uBAAuB,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,yDAAyD,EAAE,CAAC,CAAC;IACzP,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,SAAS,IAAI,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,SAAS,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,uBAAuB,IAAI,yBAAyB,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAY;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC;YACV,IAAI,CAAC;gBACH,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YAElE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChH,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wDAAwD;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,+CAA+C;IAC/C,MAAM,UAAU,GAAG;QACjB,oBAAoB;QACpB,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;QAClB,mBAAmB;QACnB,2BAA2B;QAC3B,4BAA4B;KAC7B,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,6CAA6C;IAC7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,WAAmB,EACnB,KAAc,EACd,UAAyB,EACzB,aAA4B,EAC5B,WAAmB;IAEnB,MAAM,MAAM,GAA4B;QACtC,OAAO,EAAE,WAAW;KACrB,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACzC,MAAM,CAAC,WAAW,GAAG;YACnB,OAAO,EAAE;gBACP,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,UAAU;aACrB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,iEAAiE;QACjE,4CAA4C;QAC5C,MAAM,WAAW,GACf,aAAa,IAAI,aAAa,KAAK,WAAW;YAC5C,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC;YAC1C,CAAC,CAAC,GAAG,CAAC;QACV,MAAM,CAAC,aAAa,GAAG;YACrB,QAAQ,EAAE,KAAK;YACf,WAAW;SACZ,CAAC;QACF,2EAA2E;QAC3E,wDAAwD;QACxD,MAAM,CAAC,GAAG,GAAG;YACX,UAAU,EAAE,WAAW;YACvB,YAAY,EAAE,sBAAsB;SACrC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,aAAa,GAAG;YACrB,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,EAAU;IAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AACnC,CAAC"}
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';
@@ -1 +1 @@
1
- {"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `dql propose` — scan dbt evidence and generate a ranked queue of DRAFT blocks.
3
+ *
4
+ * Product principle: **AI drafts, humans certify.** Instead of authoring DQL
5
+ * from a blank file, a new user runs `dql propose` against an existing dbt repo
6
+ * and gets a draft governance layer: one `block` per high-value model, born
7
+ * `status: draft`, run through the Certifier (verdict stored so a reviewer sees
8
+ * what's missing), demand-ranked, and NEVER auto-certified.
9
+ *
10
+ * Usage:
11
+ * dql propose [path] Propose drafts for the project at path
12
+ * dql propose --dbt-manifest <path> Explicit manifest.json path
13
+ * dql propose --owner <name> Default owner stamped on drafts
14
+ * dql propose --limit <n> Cap drafts written this run
15
+ * dql propose --plan Show the deterministic PLAN; write nothing
16
+ * dql propose --dry-run Rank only; write nothing
17
+ * dql propose --enrich AI-enrich content (llmContext/examples/
18
+ * descriptions) via the configured provider
19
+ * dql propose --format json Machine-readable output
20
+ */
21
+ import type { CLIFlags } from '../args.js';
22
+ export declare function runPropose(fileArg: string | null, rest: string[], flags: CLIFlags): Promise<void>;
23
+ //# sourceMappingURL=propose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAoIf"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * `dql propose` — scan dbt evidence and generate a ranked queue of DRAFT blocks.
3
+ *
4
+ * Product principle: **AI drafts, humans certify.** Instead of authoring DQL
5
+ * from a blank file, a new user runs `dql propose` against an existing dbt repo
6
+ * and gets a draft governance layer: one `block` per high-value model, born
7
+ * `status: draft`, run through the Certifier (verdict stored so a reviewer sees
8
+ * what's missing), demand-ranked, and NEVER auto-certified.
9
+ *
10
+ * Usage:
11
+ * dql propose [path] Propose drafts for the project at path
12
+ * dql propose --dbt-manifest <path> Explicit manifest.json path
13
+ * dql propose --owner <name> Default owner stamped on drafts
14
+ * dql propose --limit <n> Cap drafts written this run
15
+ * dql propose --plan Show the deterministic PLAN; write nothing
16
+ * dql propose --dry-run Rank only; write nothing
17
+ * dql propose --enrich AI-enrich content (llmContext/examples/
18
+ * descriptions) via the configured provider
19
+ * dql propose --format json Machine-readable output
20
+ */
21
+ import { existsSync } from 'node:fs';
22
+ import { join, resolve } from 'node:path';
23
+ import { loadProjectConfig, resolveDbtManifestPath } from '@duckcodeailabs/dql-core';
24
+ import { propose, proposePlan, resolveLocalOwner } from '@duckcodeailabs/dql-agent';
25
+ import { gatherProposeEnrichment } from '../propose-enrich.js';
26
+ export async function runPropose(fileArg, rest, flags) {
27
+ // --dbt-manifest <path> may arrive in rest (it is not a first-class flag).
28
+ let explicitManifest;
29
+ const dbtIdx = rest.indexOf('--dbt-manifest');
30
+ if (dbtIdx >= 0 && rest[dbtIdx + 1])
31
+ explicitManifest = resolve(rest[dbtIdx + 1]);
32
+ // --limit <n> may also arrive in rest.
33
+ let limit;
34
+ const limitIdx = rest.indexOf('--limit');
35
+ if (limitIdx >= 0 && rest[limitIdx + 1]) {
36
+ const value = Number(rest[limitIdx + 1]);
37
+ if (Number.isFinite(value) && value > 0)
38
+ limit = value;
39
+ }
40
+ const skip = new Set(['--dbt-manifest', explicitManifest, '--limit', rest[limitIdx + 1]].filter(Boolean));
41
+ const pathArg = fileArg && !fileArg.startsWith('-') ? fileArg : rest.find((a) => !a.startsWith('-') && !skip.has(a));
42
+ const projectRoot = resolve(pathArg ?? '.');
43
+ if (!existsSync(join(projectRoot, 'dql.config.json'))) {
44
+ console.error('No DQL project found (missing dql.config.json). Run `dql init` first, then `dql propose`.');
45
+ process.exitCode = 1;
46
+ return;
47
+ }
48
+ const resolved = resolveDbtManifestPath(projectRoot, explicitManifest);
49
+ if (!resolved) {
50
+ const cfg = loadProjectConfig(projectRoot);
51
+ console.error('\n ✗ No dbt manifest found.');
52
+ console.error('');
53
+ if (cfg.dbt?.projectDir) {
54
+ console.error(` dql.config.json points at dbt project: ${cfg.dbt.projectDir}`);
55
+ console.error(' Run `dbt parse` (or `dbt compile`) there first, then re-run `dql propose`.');
56
+ }
57
+ else {
58
+ console.error(' Add a "dbt" section to dql.config.json, or pass --dbt-manifest <path>.');
59
+ }
60
+ console.error('');
61
+ process.exitCode = 1;
62
+ return;
63
+ }
64
+ const cfg = loadProjectConfig(projectRoot);
65
+ const proposeConfig = cfg.propose;
66
+ // --plan: deterministic preview (classify → plan). Writes NOTHING.
67
+ const planOnly = Boolean(flags.plan) || rest.includes('--plan');
68
+ if (planOnly) {
69
+ let plan;
70
+ try {
71
+ plan = proposePlan(projectRoot, resolved, { config: proposeConfig });
72
+ }
73
+ catch (err) {
74
+ const msg = err instanceof Error ? err.message : String(err);
75
+ console.error(`\n ✗ Plan failed: ${msg}\n`);
76
+ process.exitCode = 1;
77
+ return;
78
+ }
79
+ if (flags.format === 'json') {
80
+ console.log(JSON.stringify(plan, null, 2));
81
+ return;
82
+ }
83
+ printPlan(plan);
84
+ return;
85
+ }
86
+ // --enrich: opt-in AI enrichment (CLI is deterministic by default for CI
87
+ // reproducibility). Best-effort; no provider → deterministic dbt-derived content.
88
+ const enrich = Boolean(flags.enrich) || rest.includes('--enrich');
89
+ let enrichedBySlug;
90
+ if (enrich && !flags.dryRun) {
91
+ if (flags.format !== 'json')
92
+ console.log('\n Enriching draft content with AI (best-effort)…');
93
+ enrichedBySlug = await gatherProposeEnrichment(projectRoot, resolved, proposeConfig).catch(() => undefined);
94
+ }
95
+ // Stamp the resolved local OSS owner when --owner is absent so drafts are not
96
+ // born with a "Missing owner" Certifier strike. A dry-run must not persist.
97
+ const owner = flags.owner || resolveLocalOwner(projectRoot, { persist: !flags.dryRun });
98
+ let summary;
99
+ try {
100
+ summary = propose({
101
+ projectRoot,
102
+ dbtManifestPath: resolved,
103
+ owner,
104
+ limit,
105
+ dryRun: Boolean(flags.dryRun),
106
+ config: proposeConfig,
107
+ enrichedBySlug,
108
+ });
109
+ }
110
+ catch (err) {
111
+ const msg = err instanceof Error ? err.message : String(err);
112
+ console.error(`\n ✗ Proposal failed: ${msg}\n`);
113
+ process.exitCode = 1;
114
+ return;
115
+ }
116
+ if (flags.format === 'json') {
117
+ console.log(JSON.stringify(summary, null, 2));
118
+ return;
119
+ }
120
+ const dryRun = Boolean(flags.dryRun);
121
+ console.log('\n DQL Propose — drafts from dbt evidence');
122
+ console.log(' ' + '='.repeat(50));
123
+ if (summary.projectName)
124
+ console.log(` dbt project: ${summary.projectName}`);
125
+ console.log(` Models scanned: ${summary.modelsScanned}`);
126
+ console.log(` Business: ${summary.businessModels} (plumbing excluded: ${summary.plumbingExcluded}, metrics: ${summary.metricsFound})`);
127
+ console.log(` Selected: ${summary.proposalsRanked} (≤ ${summary.config.maxPerDomain} per domain)`);
128
+ console.log(` Drafts ${dryRun ? 'to write' : 'written'}: ${summary.draftsWritten}`);
129
+ console.log(` Skipped: ${summary.draftsSkipped}`);
130
+ console.log('');
131
+ console.log(' AI drafts, humans certify. Every block is status="draft" and');
132
+ console.log(' was checked by the Certifier (verdict stored in each file).');
133
+ console.log('');
134
+ const shown = summary.proposals.slice(0, 25);
135
+ for (const p of shown) {
136
+ const where = p.path ? p.path : p.skipped ? '(skipped)' : '(ranked)';
137
+ const exposure = p.ranking.exposureLinked ? ' · exposure' : '';
138
+ const runs = p.ranking.runCount > 0 ? ` · ${p.ranking.runCount} run(s)` : '';
139
+ console.log(` • ${p.model} [${p.inference.pattern}] score ${p.ranking.score}`);
140
+ console.log(` domain ${p.domain} · fan-out ${p.ranking.fanOut}${exposure}${runs}${p.inference.grain ? ` · grain ${p.inference.grain}` : ''}`);
141
+ const blocking = p.certification.errors.length;
142
+ const warnings = p.certification.warnings.length;
143
+ console.log(` certify gap: ${blocking} blocking, ${warnings} warning(s) → ${where}`);
144
+ if (p.skipped)
145
+ console.log(` note: ${p.skipped}`);
146
+ }
147
+ if (summary.proposals.length > shown.length) {
148
+ console.log(`\n ... and ${summary.proposals.length - shown.length} more.`);
149
+ }
150
+ console.log('');
151
+ console.log(' Next: review the top drafts under blocks/_drafts (or domains/<d>/blocks/_drafts),');
152
+ console.log(' then `dql certify --from-draft <path> --owner you@example.com` to promote.');
153
+ console.log('');
154
+ }
155
+ /** Pretty-print the deterministic PLAN (classify → plan, writes nothing). */
156
+ function printPlan(plan) {
157
+ console.log('\n DQL Propose — PLAN (nothing written)');
158
+ console.log(' ' + '='.repeat(50));
159
+ console.log(` Models scanned: ${plan.totals.modelsScanned}`);
160
+ console.log(` Business models: ${plan.totals.businessModels}`);
161
+ console.log(` Plumbing excluded: ${plan.totals.plumbingExcluded}`);
162
+ console.log(` Metrics found: ${plan.totals.metricsFound}`);
163
+ console.log(` Will generate: ${plan.willGenerate} (≤ ${plan.config.maxPerDomain} per domain)`);
164
+ console.log(` Will skip: ${plan.willSkip}`);
165
+ console.log('');
166
+ console.log(' Selective, business-only seed. Plumbing/niche models are excluded.');
167
+ console.log(' Approve the scope, then generate drafts for review (AI drafts, humans certify).');
168
+ console.log('');
169
+ for (const domain of plan.domains) {
170
+ const owner = domain.owner ? ` · owner ${domain.owner}` : '';
171
+ console.log(` ▸ ${domain.name} (${domain.modelCount})${owner}`);
172
+ for (const c of domain.candidates) {
173
+ const grain = c.grain ? ` · grain ${c.grain}` : '';
174
+ const pattern = c.pattern ? ` [${c.pattern}]` : '';
175
+ console.log(` • ${c.model}${pattern} score ${c.score}${grain}`);
176
+ if (c.evidence.length > 0)
177
+ console.log(` why: ${c.evidence.join('; ')}`);
178
+ }
179
+ console.log('');
180
+ }
181
+ console.log(' Run `dql propose` (without --plan) to write the drafts for this scope.');
182
+ console.log('');
183
+ }
184
+ //# sourceMappingURL=propose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -31,6 +31,8 @@ import { runVerify } from "./commands/verify.js";
31
31
  import { runImport } from "./commands/import.js";
32
32
  import { runConnect } from "./commands/connect.js";
33
33
  import { runPromote } from "./commands/promote.js";
34
+ import { runEval } from "./commands/eval.js";
35
+ import { runPropose } from "./commands/propose.js";
34
36
  const HELP = `
35
37
  dql — DQL CLI
36
38
 
@@ -59,6 +61,10 @@ const HELP = `
59
61
  Preview or apply legacy-to-domain folder moves
60
62
  dql import sql <path> Generate AI import drafts from SQL files/folders
61
63
  dql import sql <path> --save Compatibility alias; drafts autosave before certification
64
+ dql propose [path] Draft a ranked governance layer from dbt evidence
65
+ (one DRAFT block per high-value model; never
66
+ auto-certified — humans certify)
67
+ dql propose --dry-run Rank dbt models without writing any drafts
62
68
  dql promote notebook <path> --to shared
63
69
  Strip local run/UI state and mark a notebook shared
64
70
  dql promote app <app-id> --to shared
@@ -86,6 +92,8 @@ const HELP = `
86
92
  dql agent eval agent-evals.yml Measure certified/follow-up/refusal accuracy
87
93
  dql slack serve Slack slash-command bot (forwards to the answer loop)
88
94
  dql verify Verify dql-manifest.json is reproducible from source
95
+ dql eval [path] Replay block examples + eval/*.yaml through the agent
96
+ router and score routing accuracy (CI-gateable)
89
97
  dql --version Show version
90
98
  dql --help Show this help
91
99
 
@@ -144,6 +152,23 @@ const COMMAND_HELP = {
144
152
  Import creates AI-first draft blocks under _drafts, parameterizes safe
145
153
  runtime literals, checks for similar certified blocks, and never certifies
146
154
  generated DQL automatically.
155
+ `,
156
+ propose: `
157
+ dql propose — Draft a governance layer from dbt evidence
158
+
159
+ Usage:
160
+ dql propose [path] [--dbt-manifest <path>] [--owner <name>] [--limit <n>]
161
+ dql propose [path] --dry-run [--format json]
162
+
163
+ Reads dbt artifacts (manifest.json, catalog.json, semantic_manifest.json,
164
+ run_results.json) and emits one DRAFT block per high-value model, inferring
165
+ grain / pattern / outputs / llmContext conservatively. Each draft is born
166
+ status="draft", checked by the Certifier (verdict stored in the file), and
167
+ ranked by downstream fan-out, exposure linkage, and run frequency.
168
+
169
+ Nothing is ever auto-certified. Re-running is idempotent — existing drafts
170
+ and already-promoted blocks are never overwritten or duplicated. Promote a
171
+ reviewed draft with: dql certify --from-draft <path> --owner you@example.com
147
172
  `,
148
173
  app: `
149
174
  dql app — Manage local App artifacts
@@ -210,6 +235,26 @@ const COMMAND_HELP = {
210
235
  dql semantic list [path]
211
236
  dql semantic validate [path]
212
237
  dql semantic query <metrics> [dimensions]
238
+ `,
239
+ eval: `
240
+ dql eval — Score the answer agent's routing accuracy
241
+
242
+ Usage:
243
+ dql eval [path] [--format json]
244
+ dql eval [path] --min-route-accuracy <0..1> --min-refusal <0..1>
245
+ dql eval [path] --no-examples
246
+
247
+ Replays every certified block's examples[].question plus any eval/*.yaml
248
+ cases through the existing agent router (no warehouse, no LLM judging) and
249
+ scores route accuracy, block selection, grain match, and refusal precision/
250
+ recall. Exits non-zero below the configured thresholds, so it is CI-gateable.
251
+
252
+ eval/*.yaml cases:
253
+ - question: "..."
254
+ expectRoute: certified | generated | missing_context | research
255
+ expectBlock: "<block name>" # optional
256
+ expectGrain: "<grain>" # optional
257
+ expectRefuse: true # optional; shorthand for missing_context
213
258
  `,
214
259
  verify: `
215
260
  dql verify — Verify dql-manifest.json is reproducible
@@ -255,6 +300,8 @@ async function main() {
255
300
  command === "promote" ||
256
301
  command === "schedule" ||
257
302
  command === "verify" ||
303
+ command === "eval" ||
304
+ command === "propose" ||
258
305
  (command === "certify" && Boolean(flags.fromDraft));
259
306
  if (!file && !commandAllowsNoFile) {
260
307
  console.error('Error: No file/argument specified. Run "dql --help" for usage.');
@@ -298,6 +345,9 @@ async function main() {
298
345
  case "import":
299
346
  await runImport(file, rest, flags);
300
347
  break;
348
+ case "propose":
349
+ await runPropose(file, rest, flags);
350
+ break;
301
351
  case "fmt":
302
352
  await runFmt(file, flags);
303
353
  break;
@@ -346,6 +396,9 @@ async function main() {
346
396
  case "verify":
347
397
  await runVerify(file, rest, flags);
348
398
  break;
399
+ case "eval":
400
+ await runEval(file, rest, flags);
401
+ break;
349
402
  default:
350
403
  console.error(`Unknown command: ${command}. Run "dql --help" for usage.`);
351
404
  process.exit(1);