@duckcodeailabs/dql-cli 1.6.21 → 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.
- package/dist/apps-api.d.ts +20 -3
- package/dist/apps-api.d.ts.map +1 -1
- package/dist/apps-api.js +25 -0
- package/dist/apps-api.js.map +1 -1
- package/dist/args.d.ts +10 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +19 -0
- package/dist/args.js.map +1 -1
- package/dist/assets/dql-notebook/assets/{codemirror-DJYUkPr1.js → codemirror-Co0dCEDr.js} +1 -1
- package/dist/assets/dql-notebook/assets/index-D9Owd4EN.css +1 -0
- package/dist/assets/dql-notebook/assets/index-nDZHVgfg.js +5636 -0
- package/dist/assets/dql-notebook/assets/{react-CRB3T2We.js → react-BRY8hXab.js} +2 -2
- package/dist/assets/dql-notebook/index.html +4 -4
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +44 -4
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/certify.d.ts.map +1 -1
- package/dist/commands/certify.js +70 -25
- package/dist/commands/certify.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +108 -5
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +38 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/eval.d.ts +121 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +350 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +50 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/notebook.d.ts +15 -0
- package/dist/commands/notebook.d.ts.map +1 -1
- package/dist/commands/notebook.js +32 -11
- package/dist/commands/notebook.js.map +1 -1
- package/dist/commands/propose.d.ts +23 -0
- package/dist/commands/propose.d.ts.map +1 -0
- package/dist/commands/propose.js +184 -0
- package/dist/commands/propose.js.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/analytics-tools.d.ts.map +1 -1
- package/dist/llm/analytics-tools.js +9 -4
- package/dist/llm/analytics-tools.js.map +1 -1
- package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
- package/dist/llm/providers/dql-agent-provider.js +21 -32
- package/dist/llm/providers/dql-agent-provider.js.map +1 -1
- package/dist/llm/providers/native-sdk-provider.d.ts.map +1 -1
- package/dist/llm/providers/native-sdk-provider.js +5 -2
- package/dist/llm/providers/native-sdk-provider.js.map +1 -1
- package/dist/local-runtime.d.ts +130 -2
- package/dist/local-runtime.d.ts.map +1 -1
- package/dist/local-runtime.js +2079 -43
- package/dist/local-runtime.js.map +1 -1
- package/dist/package.json +10 -10
- package/dist/propose-enrich.d.ts +13 -0
- package/dist/propose-enrich.d.ts.map +1 -0
- package/dist/propose-enrich.js +34 -0
- package/dist/propose-enrich.js.map +1 -0
- package/dist/settings/provider-settings.js +2 -2
- package/dist/settings/provider-settings.js.map +1 -1
- package/package.json +11 -11
- package/dist/assets/dql-notebook/assets/index-CCtTMLp2.css +0 -1
- package/dist/assets/dql-notebook/assets/index-D99oHXXj.js +0 -5429
package/dist/commands/init.js
CHANGED
|
@@ -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
|
|
40
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
function firstDuckDBIn(dir) {
|
|
213
250
|
try {
|
|
214
|
-
|
|
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":"
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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 =
|
|
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:
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,0EAA0E;AAC1E,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AACrE,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAC;AAC1E,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;AAExG,MAAM,UAAU,yBAAyB,CAAC,MAAqB,EAAE,WAAmB;IAClF,OAAO,MAAM,CAAC,iBAAiB;QAC7B,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACnE,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AASD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,OAAkD,EAAE;IAEpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC;IAC9D,IAAI,MAA0B,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,OAAO,EAAE,gBAAgB;QACzB,WAAW;QACX,QAAQ;QACR,UAAU;QACV,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC;QACtC,IAAI;QACJ,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;KAClD,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,UAAU,SAAS,IAAI,IAAI,EAAE;QAClC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,EAAE;YAC9C,IAAI,CAAC,MAAM;gBAAE,OAAO,YAAY,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAwB,EAAE,KAAe;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,gCAAgC,OAAO,4GAA4G,CACpJ,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC;IAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE;QAC3D,aAAa,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;QACzD,IAAI;KACL,CAAC,CAAC;IAEH,0EAA0E;IAC1E,iDAAiD;IACjD,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,WAAW,CAAC;IACxF,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,IAAI,uCAAuC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -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);
|