@duckcodeailabs/dql-cli 1.8.4 → 1.8.6
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/assets/dql-notebook/assets/{index-CPG4A872.js → index-gPs-oUu4.js} +189 -188
- package/dist/assets/dql-notebook/index.html +1 -1
- package/dist/local-runtime.d.ts.map +1 -1
- package/dist/local-runtime.js +57 -1
- package/dist/local-runtime.js.map +1 -1
- package/dist/metricflow-installer.d.ts +56 -0
- package/dist/metricflow-installer.d.ts.map +1 -0
- package/dist/metricflow-installer.js +276 -0
- package/dist/metricflow-installer.js.map +1 -0
- package/dist/metricflow.d.ts +19 -1
- package/dist/metricflow.d.ts.map +1 -1
- package/dist/metricflow.js +67 -14
- package/dist/metricflow.js.map +1 -1
- package/dist/package.json +10 -10
- package/dist/semantic-runtime.d.ts +11 -1
- package/dist/semantic-runtime.d.ts.map +1 -1
- package/dist/semantic-runtime.js +191 -25
- package/dist/semantic-runtime.js.map +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export type MetricFlowWarehouseAdapter = 'duckdb' | 'snowflake' | 'bigquery' | 'databricks' | 'redshift' | 'postgres' | 'trino';
|
|
2
|
+
export type MetricFlowInstallState = 'idle' | 'queued' | 'running' | 'completed' | 'failed';
|
|
3
|
+
export type MetricFlowInstallStage = 'detecting_python' | 'creating_environment' | 'installing' | 'parsing' | 'testing' | 'ready';
|
|
4
|
+
export interface MetricFlowInstallJob {
|
|
5
|
+
id: string;
|
|
6
|
+
state: MetricFlowInstallState;
|
|
7
|
+
stage: MetricFlowInstallStage;
|
|
8
|
+
progress: number;
|
|
9
|
+
adapter: MetricFlowWarehouseAdapter;
|
|
10
|
+
packageSpec: string;
|
|
11
|
+
message: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
runtimePath: string;
|
|
15
|
+
runtimeVersion?: string;
|
|
16
|
+
logs: string[];
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface MetricFlowInstallInput {
|
|
20
|
+
adapter: MetricFlowWarehouseAdapter;
|
|
21
|
+
dbtProjectDir: string;
|
|
22
|
+
profilesDir?: string;
|
|
23
|
+
}
|
|
24
|
+
type CommandResult = {
|
|
25
|
+
stdout: string;
|
|
26
|
+
stderr: string;
|
|
27
|
+
};
|
|
28
|
+
type CommandRunner = (command: string, args: string[], options: {
|
|
29
|
+
cwd: string;
|
|
30
|
+
env?: NodeJS.ProcessEnv;
|
|
31
|
+
timeoutMs: number;
|
|
32
|
+
onOutput: (line: string) => void;
|
|
33
|
+
}) => Promise<CommandResult>;
|
|
34
|
+
/** API-004 / UI-009: keep the Python semantic engine isolated and versioned
|
|
35
|
+
* independently from the user's system dbt installation. */
|
|
36
|
+
export declare function metricFlowPackageSpec(adapter: MetricFlowWarehouseAdapter): string;
|
|
37
|
+
export declare function metricFlowAdapterForDriver(driver: string | undefined): MetricFlowWarehouseAdapter | null;
|
|
38
|
+
export declare function isMetricFlowWarehouseAdapter(value: unknown): value is MetricFlowWarehouseAdapter;
|
|
39
|
+
export declare function managedMetricFlowPython(projectRoot: string): string;
|
|
40
|
+
export declare function managedMetricFlowDbt(projectRoot: string): string;
|
|
41
|
+
export declare class ManagedMetricFlowInstaller {
|
|
42
|
+
private readonly projectRoot;
|
|
43
|
+
private readonly runner;
|
|
44
|
+
private readonly jobs;
|
|
45
|
+
private latestId;
|
|
46
|
+
constructor(projectRoot: string, runner?: CommandRunner);
|
|
47
|
+
latest(): MetricFlowInstallJob | null;
|
|
48
|
+
get(id: string): MetricFlowInstallJob | null;
|
|
49
|
+
start(input: MetricFlowInstallInput): MetricFlowInstallJob;
|
|
50
|
+
private update;
|
|
51
|
+
private log;
|
|
52
|
+
private run;
|
|
53
|
+
}
|
|
54
|
+
export declare function metricFlowPythonCandidates(explicit?: string): string[];
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=metricflow-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metricflow-installer.d.ts","sourceRoot":"","sources":["../src/metricflow-installer.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAChI,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC5F,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG,sBAAsB,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAElI,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,sBAAsB,CAAC;IAC9B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,0BAA0B,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,0BAA0B,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACxD,KAAK,aAAa,GAAG,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,KACnG,OAAO,CAAC,aAAa,CAAC,CAAC;AAY5B;4DAC4D;AAC5D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAGjF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,0BAA0B,GAAG,IAAI,CAaxG;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,0BAA0B,CAEhG;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAInE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,qBAAa,0BAA0B;IAKnC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2C;IAChE,OAAO,CAAC,QAAQ,CAAuB;gBAGpB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,aAA0B;IAGrD,MAAM,IAAI,oBAAoB,GAAG,IAAI;IAIrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAI5C,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,oBAAoB;IA4B1D,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,GAAG;YAYG,GAAG;CA4ElB;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAatE"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { managedMetricFlowBin, managedMetricFlowRuntimeRoot } from './metricflow.js';
|
|
5
|
+
const SUPPORTED_ADAPTERS = new Set([
|
|
6
|
+
'duckdb',
|
|
7
|
+
'snowflake',
|
|
8
|
+
'bigquery',
|
|
9
|
+
'databricks',
|
|
10
|
+
'redshift',
|
|
11
|
+
'postgres',
|
|
12
|
+
'trino',
|
|
13
|
+
]);
|
|
14
|
+
/** API-004 / UI-009: keep the Python semantic engine isolated and versioned
|
|
15
|
+
* independently from the user's system dbt installation. */
|
|
16
|
+
export function metricFlowPackageSpec(adapter) {
|
|
17
|
+
if (!SUPPORTED_ADAPTERS.has(adapter))
|
|
18
|
+
throw new Error(`Unsupported MetricFlow warehouse adapter: ${adapter}`);
|
|
19
|
+
return `dbt-metricflow[dbt-${adapter}]>=0.13,<0.14`;
|
|
20
|
+
}
|
|
21
|
+
export function metricFlowAdapterForDriver(driver) {
|
|
22
|
+
switch (driver?.trim().toLowerCase()) {
|
|
23
|
+
case 'file':
|
|
24
|
+
case 'duckdb': return 'duckdb';
|
|
25
|
+
case 'postgresql':
|
|
26
|
+
case 'postgres': return 'postgres';
|
|
27
|
+
case 'snowflake': return 'snowflake';
|
|
28
|
+
case 'bigquery': return 'bigquery';
|
|
29
|
+
case 'databricks': return 'databricks';
|
|
30
|
+
case 'redshift': return 'redshift';
|
|
31
|
+
case 'trino': return 'trino';
|
|
32
|
+
default: return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function isMetricFlowWarehouseAdapter(value) {
|
|
36
|
+
return typeof value === 'string' && SUPPORTED_ADAPTERS.has(value);
|
|
37
|
+
}
|
|
38
|
+
export function managedMetricFlowPython(projectRoot) {
|
|
39
|
+
return process.platform === 'win32'
|
|
40
|
+
? join(managedMetricFlowRuntimeRoot(projectRoot), 'Scripts', 'python.exe')
|
|
41
|
+
: join(managedMetricFlowRuntimeRoot(projectRoot), 'bin', 'python');
|
|
42
|
+
}
|
|
43
|
+
export function managedMetricFlowDbt(projectRoot) {
|
|
44
|
+
return process.platform === 'win32'
|
|
45
|
+
? join(managedMetricFlowRuntimeRoot(projectRoot), 'Scripts', 'dbt.exe')
|
|
46
|
+
: join(managedMetricFlowRuntimeRoot(projectRoot), 'bin', 'dbt');
|
|
47
|
+
}
|
|
48
|
+
export class ManagedMetricFlowInstaller {
|
|
49
|
+
projectRoot;
|
|
50
|
+
runner;
|
|
51
|
+
jobs = new Map();
|
|
52
|
+
latestId = null;
|
|
53
|
+
constructor(projectRoot, runner = runCommand) {
|
|
54
|
+
this.projectRoot = projectRoot;
|
|
55
|
+
this.runner = runner;
|
|
56
|
+
}
|
|
57
|
+
latest() {
|
|
58
|
+
return this.latestId ? cloneJob(this.jobs.get(this.latestId) ?? null) : null;
|
|
59
|
+
}
|
|
60
|
+
get(id) {
|
|
61
|
+
return cloneJob(this.jobs.get(id) ?? null);
|
|
62
|
+
}
|
|
63
|
+
start(input) {
|
|
64
|
+
const current = this.latest();
|
|
65
|
+
if (current && (current.state === 'queued' || current.state === 'running'))
|
|
66
|
+
return current;
|
|
67
|
+
if (!SUPPORTED_ADAPTERS.has(input.adapter))
|
|
68
|
+
throw new Error(`Unsupported MetricFlow warehouse adapter: ${input.adapter}`);
|
|
69
|
+
if (!existsSync(join(input.dbtProjectDir, 'dbt_project.yml'))) {
|
|
70
|
+
throw new Error('Connect a valid dbt project before installing its semantic runtime.');
|
|
71
|
+
}
|
|
72
|
+
const now = new Date().toISOString();
|
|
73
|
+
const id = `metricflow-install-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
74
|
+
const job = {
|
|
75
|
+
id,
|
|
76
|
+
state: 'queued',
|
|
77
|
+
stage: 'detecting_python',
|
|
78
|
+
progress: 3,
|
|
79
|
+
adapter: input.adapter,
|
|
80
|
+
packageSpec: metricFlowPackageSpec(input.adapter),
|
|
81
|
+
message: 'Preparing the isolated MetricFlow runtime.',
|
|
82
|
+
createdAt: now,
|
|
83
|
+
updatedAt: now,
|
|
84
|
+
runtimePath: managedMetricFlowRuntimeRoot(this.projectRoot),
|
|
85
|
+
logs: [],
|
|
86
|
+
};
|
|
87
|
+
this.jobs.set(id, job);
|
|
88
|
+
this.latestId = id;
|
|
89
|
+
queueMicrotask(() => void this.run(id, input));
|
|
90
|
+
return cloneJob(job);
|
|
91
|
+
}
|
|
92
|
+
update(id, patch) {
|
|
93
|
+
const current = this.jobs.get(id);
|
|
94
|
+
if (!current)
|
|
95
|
+
return null;
|
|
96
|
+
const next = { ...current, ...patch, updatedAt: new Date().toISOString() };
|
|
97
|
+
this.jobs.set(id, next);
|
|
98
|
+
return next;
|
|
99
|
+
}
|
|
100
|
+
log(id, raw) {
|
|
101
|
+
const current = this.jobs.get(id);
|
|
102
|
+
if (!current)
|
|
103
|
+
return;
|
|
104
|
+
const additions = redactInstallOutput(raw)
|
|
105
|
+
.split(/\r?\n/)
|
|
106
|
+
.map((line) => line.trim())
|
|
107
|
+
.filter(Boolean)
|
|
108
|
+
.map((line) => line.slice(0, 500));
|
|
109
|
+
if (additions.length === 0)
|
|
110
|
+
return;
|
|
111
|
+
this.update(id, { logs: [...current.logs, ...additions].slice(-120) });
|
|
112
|
+
}
|
|
113
|
+
async run(id, input) {
|
|
114
|
+
const onOutput = (line) => this.log(id, line);
|
|
115
|
+
try {
|
|
116
|
+
this.update(id, { state: 'running', message: 'Detecting a compatible Python runtime.' });
|
|
117
|
+
const python = detectPythonExecutable();
|
|
118
|
+
this.log(id, `Using ${python.bin} (${python.version}).`);
|
|
119
|
+
const runtimeRoot = managedMetricFlowRuntimeRoot(this.projectRoot);
|
|
120
|
+
mkdirSync(join(this.projectRoot, '.dql', 'runtimes'), { recursive: true });
|
|
121
|
+
this.update(id, { stage: 'creating_environment', progress: 12, message: 'Creating an isolated project-local Python environment.' });
|
|
122
|
+
await this.runner(python.bin, ['-m', 'venv', runtimeRoot], {
|
|
123
|
+
cwd: this.projectRoot,
|
|
124
|
+
timeoutMs: 90_000,
|
|
125
|
+
onOutput,
|
|
126
|
+
});
|
|
127
|
+
const runtimePython = managedMetricFlowPython(this.projectRoot);
|
|
128
|
+
this.update(id, { stage: 'installing', progress: 28, message: `Installing MetricFlow for ${input.adapter}. This can take a few minutes.` });
|
|
129
|
+
await this.runner(runtimePython, [
|
|
130
|
+
'-m', 'pip', 'install', '--disable-pip-version-check', '--upgrade', metricFlowPackageSpec(input.adapter),
|
|
131
|
+
], {
|
|
132
|
+
cwd: this.projectRoot,
|
|
133
|
+
timeoutMs: 10 * 60_000,
|
|
134
|
+
onOutput,
|
|
135
|
+
});
|
|
136
|
+
const environment = {
|
|
137
|
+
...process.env,
|
|
138
|
+
...(input.profilesDir ? { DBT_PROFILES_DIR: input.profilesDir } : {}),
|
|
139
|
+
};
|
|
140
|
+
const semanticManifestPath = join(input.dbtProjectDir, 'target', 'semantic_manifest.json');
|
|
141
|
+
if (!existsSync(semanticManifestPath)) {
|
|
142
|
+
this.update(id, { stage: 'parsing', progress: 78, message: 'Generating the dbt semantic manifest.' });
|
|
143
|
+
await this.runner(managedMetricFlowDbt(this.projectRoot), [
|
|
144
|
+
'parse', '--project-dir', input.dbtProjectDir,
|
|
145
|
+
...(input.profilesDir ? ['--profiles-dir', input.profilesDir] : []),
|
|
146
|
+
], {
|
|
147
|
+
cwd: input.dbtProjectDir,
|
|
148
|
+
env: environment,
|
|
149
|
+
timeoutMs: 3 * 60_000,
|
|
150
|
+
onOutput,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
this.update(id, { stage: 'testing', progress: 88, message: 'Testing MetricFlow against the connected dbt project.' });
|
|
154
|
+
const version = await this.runner(managedMetricFlowBin(this.projectRoot), ['--version'], {
|
|
155
|
+
cwd: input.dbtProjectDir,
|
|
156
|
+
env: environment,
|
|
157
|
+
timeoutMs: 30_000,
|
|
158
|
+
onOutput,
|
|
159
|
+
});
|
|
160
|
+
await this.runner(managedMetricFlowBin(this.projectRoot), ['list', 'metrics'], {
|
|
161
|
+
cwd: input.dbtProjectDir,
|
|
162
|
+
env: environment,
|
|
163
|
+
timeoutMs: 2 * 60_000,
|
|
164
|
+
onOutput,
|
|
165
|
+
});
|
|
166
|
+
const runtimeVersion = `${version.stdout}\n${version.stderr}`.trim().split(/\r?\n/)[0] || 'MetricFlow installed';
|
|
167
|
+
this.update(id, {
|
|
168
|
+
state: 'completed',
|
|
169
|
+
stage: 'ready',
|
|
170
|
+
progress: 100,
|
|
171
|
+
runtimeVersion,
|
|
172
|
+
message: 'MetricFlow is installed, tested, and active for this project.',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
177
|
+
this.log(id, message);
|
|
178
|
+
this.update(id, {
|
|
179
|
+
state: 'failed',
|
|
180
|
+
progress: Math.max(5, this.jobs.get(id)?.progress ?? 5),
|
|
181
|
+
message: 'MetricFlow setup needs attention. Your existing dbt and DQL configuration was not replaced.',
|
|
182
|
+
error: message,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
export function metricFlowPythonCandidates(explicit) {
|
|
188
|
+
// Prefer a compatible, version-pinned interpreter before the unversioned
|
|
189
|
+
// binaries. Homebrew may make `python3` point at a newer release before
|
|
190
|
+
// dbt-metricflow supports it while keeping python3.13/3.12 installed.
|
|
191
|
+
return [
|
|
192
|
+
...(explicit?.trim() ? [explicit.trim()] : []),
|
|
193
|
+
'python3.13',
|
|
194
|
+
'python3.12',
|
|
195
|
+
'python3.11',
|
|
196
|
+
'python3.10',
|
|
197
|
+
'python3',
|
|
198
|
+
'python',
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
function detectPythonExecutable() {
|
|
202
|
+
const candidates = metricFlowPythonCandidates(process.env.DQL_PYTHON_BIN);
|
|
203
|
+
for (const bin of candidates) {
|
|
204
|
+
const result = spawnSync(bin, ['--version'], { encoding: 'utf-8', timeout: 3000, env: process.env });
|
|
205
|
+
if (result.error || result.status !== 0)
|
|
206
|
+
continue;
|
|
207
|
+
const version = `${result.stdout ?? ''}${result.stderr ?? ''}`.trim();
|
|
208
|
+
const parsed = /Python\s+(\d+)\.(\d+)/i.exec(version);
|
|
209
|
+
if (!parsed)
|
|
210
|
+
continue;
|
|
211
|
+
const major = Number(parsed[1]);
|
|
212
|
+
const minor = Number(parsed[2]);
|
|
213
|
+
if (major === 3 && minor >= 10 && minor < 14)
|
|
214
|
+
return { bin, version };
|
|
215
|
+
}
|
|
216
|
+
throw new Error('Compatible Python 3.10–3.13 was not found. Install an approved version, or set DQL_PYTHON_BIN to that executable.');
|
|
217
|
+
}
|
|
218
|
+
function runCommand(command, args, options) {
|
|
219
|
+
return new Promise((resolve, reject) => {
|
|
220
|
+
const child = spawn(command, args, {
|
|
221
|
+
cwd: options.cwd,
|
|
222
|
+
env: options.env ?? process.env,
|
|
223
|
+
shell: false,
|
|
224
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
225
|
+
});
|
|
226
|
+
let stdout = '';
|
|
227
|
+
let stderr = '';
|
|
228
|
+
let settled = false;
|
|
229
|
+
const fail = (error) => {
|
|
230
|
+
if (settled)
|
|
231
|
+
return;
|
|
232
|
+
settled = true;
|
|
233
|
+
reject(error);
|
|
234
|
+
};
|
|
235
|
+
const append = (kind, chunk) => {
|
|
236
|
+
const text = String(chunk);
|
|
237
|
+
if (kind === 'stdout')
|
|
238
|
+
stdout = `${stdout}${text}`.slice(-256_000);
|
|
239
|
+
else
|
|
240
|
+
stderr = `${stderr}${text}`.slice(-256_000);
|
|
241
|
+
options.onOutput(text);
|
|
242
|
+
};
|
|
243
|
+
child.stdout?.on('data', (chunk) => append('stdout', chunk));
|
|
244
|
+
child.stderr?.on('data', (chunk) => append('stderr', chunk));
|
|
245
|
+
const timer = setTimeout(() => {
|
|
246
|
+
child.kill('SIGTERM');
|
|
247
|
+
fail(new Error(`${command} timed out after ${Math.round(options.timeoutMs / 1000)} seconds.`));
|
|
248
|
+
}, options.timeoutMs);
|
|
249
|
+
child.on('error', (error) => {
|
|
250
|
+
clearTimeout(timer);
|
|
251
|
+
fail(error);
|
|
252
|
+
});
|
|
253
|
+
child.on('close', (code) => {
|
|
254
|
+
clearTimeout(timer);
|
|
255
|
+
if (settled)
|
|
256
|
+
return;
|
|
257
|
+
settled = true;
|
|
258
|
+
if (code === 0)
|
|
259
|
+
resolve({ stdout, stderr });
|
|
260
|
+
else
|
|
261
|
+
reject(new Error(`${command} exited with code ${code ?? 'unknown'}: ${redactInstallOutput(stderr || stdout).trim().slice(-2000)}`));
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
function redactInstallOutput(value) {
|
|
266
|
+
return value
|
|
267
|
+
.replace(/(https?:\/\/)[^\s/@:]+:[^\s/@]+@/gi, '$1***@')
|
|
268
|
+
.replace(/(https?:\/\/)[^\s/@]+@/gi, '$1***@')
|
|
269
|
+
.replace(/([?&](?:access_token|auth|key|password|secret|token)=)[^&\s]+/gi, '$1***')
|
|
270
|
+
.replace(/(authorization:\s*)(?:bearer\s+)?[^\s]+/gi, '$1***')
|
|
271
|
+
.replace(/\b(token|password|secret|api[_-]?key)=([^\s]+)/gi, '$1=***');
|
|
272
|
+
}
|
|
273
|
+
function cloneJob(job) {
|
|
274
|
+
return job ? { ...job, logs: [...job.logs] } : null;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=metricflow-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metricflow-installer.js","sourceRoot":"","sources":["../src/metricflow-installer.ts"],"names":[],"mappings":"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"}
|
package/dist/metricflow.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
export type MetricFlowCliSource = 'env' | 'managed' | 'path';
|
|
2
|
+
export interface MetricFlowCliResolution {
|
|
3
|
+
bin: string;
|
|
4
|
+
source: MetricFlowCliSource;
|
|
5
|
+
version: string;
|
|
6
|
+
}
|
|
1
7
|
export declare class MetricFlowUnavailableError extends Error {
|
|
2
8
|
constructor(message: string);
|
|
3
9
|
}
|
|
4
10
|
export interface MetricFlowQueryRequest {
|
|
5
11
|
projectRoot: string;
|
|
6
12
|
dbtProjectPath?: string;
|
|
13
|
+
profilesDir?: string;
|
|
7
14
|
metrics: string[];
|
|
8
15
|
dimensions: string[];
|
|
9
16
|
timeDimension?: {
|
|
@@ -23,15 +30,26 @@ export interface MetricFlowQueryRequest {
|
|
|
23
30
|
limit?: number;
|
|
24
31
|
savedQuery?: string;
|
|
25
32
|
}
|
|
33
|
+
export declare function managedMetricFlowRuntimeRoot(projectRoot: string): string;
|
|
34
|
+
export declare function managedMetricFlowBin(projectRoot: string): string;
|
|
35
|
+
/** Resolve the semantic compiler without mutating PATH. A DQL-managed,
|
|
36
|
+
* project-local runtime is considered before the user's ambient executable so
|
|
37
|
+
* Settings installations work after completion without restarting the server. */
|
|
38
|
+
export declare function resolveMetricFlowCli(projectRoot?: string): MetricFlowCliResolution | null;
|
|
26
39
|
export interface MetricFlowCompileResult {
|
|
27
40
|
sql: string;
|
|
28
41
|
command: string[];
|
|
29
42
|
stdout: string;
|
|
30
43
|
stderr: string;
|
|
31
44
|
}
|
|
45
|
+
export type MetricFlowCompileMode = 'legacy-compile' | 'explain';
|
|
46
|
+
/** dbt-metricflow 0.13 removed `mf query --compile`. Its quiet explain mode
|
|
47
|
+
* emits only the compiled SQL and does not print the result table. Keep the
|
|
48
|
+
* legacy flag for existing user-managed MetricFlow installations. */
|
|
49
|
+
export declare function metricFlowCompileMode(version: string): MetricFlowCompileMode;
|
|
32
50
|
export declare function resolveDbtProjectRoot(projectRoot: string, configuredPath?: string): string;
|
|
33
51
|
export declare function hasDbtSemanticManifest(projectRoot: string, configuredPath?: string): boolean;
|
|
34
52
|
/** Check whether the configured MetricFlow executable is callable. */
|
|
35
|
-
export declare function hasMetricFlowCli(): boolean;
|
|
53
|
+
export declare function hasMetricFlowCli(projectRoot?: string): boolean;
|
|
36
54
|
export declare function compileMetricFlowQuery(request: MetricFlowQueryRequest): MetricFlowCompileResult;
|
|
37
55
|
//# sourceMappingURL=metricflow.d.ts.map
|
package/dist/metricflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metricflow.d.ts","sourceRoot":"","sources":["../src/metricflow.ts"],"names":[],"mappings":"AAIA,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnG,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5F;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"metricflow.d.ts","sourceRoot":"","sources":["../src/metricflow.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnG,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;iFAEiF;AACjF,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAuBzF;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAEjE;;qEAEqE;AACrE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAM5E;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5F;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,uBAAuB,CAgD/F"}
|
package/dist/metricflow.js
CHANGED
|
@@ -7,6 +7,53 @@ export class MetricFlowUnavailableError extends Error {
|
|
|
7
7
|
this.name = 'MetricFlowUnavailableError';
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
+
export function managedMetricFlowRuntimeRoot(projectRoot) {
|
|
11
|
+
return join(projectRoot, '.dql', 'runtimes', 'metricflow');
|
|
12
|
+
}
|
|
13
|
+
export function managedMetricFlowBin(projectRoot) {
|
|
14
|
+
return process.platform === 'win32'
|
|
15
|
+
? join(managedMetricFlowRuntimeRoot(projectRoot), 'Scripts', 'mf.exe')
|
|
16
|
+
: join(managedMetricFlowRuntimeRoot(projectRoot), 'bin', 'mf');
|
|
17
|
+
}
|
|
18
|
+
/** Resolve the semantic compiler without mutating PATH. A DQL-managed,
|
|
19
|
+
* project-local runtime is considered before the user's ambient executable so
|
|
20
|
+
* Settings installations work after completion without restarting the server. */
|
|
21
|
+
export function resolveMetricFlowCli(projectRoot) {
|
|
22
|
+
const explicit = process.env.DQL_METRICFLOW_BIN || process.env.METRICFLOW_BIN;
|
|
23
|
+
const candidates = explicit
|
|
24
|
+
? [{ bin: explicit, source: 'env' }]
|
|
25
|
+
: [
|
|
26
|
+
...(projectRoot ? [{ bin: managedMetricFlowBin(projectRoot), source: 'managed' }] : []),
|
|
27
|
+
{ bin: 'mf', source: 'path' },
|
|
28
|
+
];
|
|
29
|
+
for (const candidate of candidates) {
|
|
30
|
+
if (candidate.source === 'managed' && !existsSync(candidate.bin))
|
|
31
|
+
continue;
|
|
32
|
+
const result = spawnSync(candidate.bin, ['--version'], {
|
|
33
|
+
encoding: 'utf-8',
|
|
34
|
+
env: process.env,
|
|
35
|
+
timeout: 3000,
|
|
36
|
+
});
|
|
37
|
+
if (!result.error && result.status === 0) {
|
|
38
|
+
return {
|
|
39
|
+
...candidate,
|
|
40
|
+
version: `${result.stdout ?? ''}${result.stderr ?? ''}`.trim().split('\n')[0] ?? '',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/** dbt-metricflow 0.13 removed `mf query --compile`. Its quiet explain mode
|
|
47
|
+
* emits only the compiled SQL and does not print the result table. Keep the
|
|
48
|
+
* legacy flag for existing user-managed MetricFlow installations. */
|
|
49
|
+
export function metricFlowCompileMode(version) {
|
|
50
|
+
const match = /(?:version\s*)?(\d+)\.(\d+)\.(\d+)/i.exec(version);
|
|
51
|
+
if (!match)
|
|
52
|
+
return 'legacy-compile';
|
|
53
|
+
const major = Number(match[1]);
|
|
54
|
+
const minor = Number(match[2]);
|
|
55
|
+
return major > 0 || minor >= 13 ? 'explain' : 'legacy-compile';
|
|
56
|
+
}
|
|
10
57
|
export function resolveDbtProjectRoot(projectRoot, configuredPath) {
|
|
11
58
|
return configuredPath ? resolve(projectRoot, configuredPath) : projectRoot;
|
|
12
59
|
}
|
|
@@ -14,26 +61,26 @@ export function hasDbtSemanticManifest(projectRoot, configuredPath) {
|
|
|
14
61
|
return existsSync(join(resolveDbtProjectRoot(projectRoot, configuredPath), 'target', 'semantic_manifest.json'));
|
|
15
62
|
}
|
|
16
63
|
/** Check whether the configured MetricFlow executable is callable. */
|
|
17
|
-
export function hasMetricFlowCli() {
|
|
18
|
-
|
|
19
|
-
const result = spawnSync(bin, ['--version'], {
|
|
20
|
-
encoding: 'utf-8',
|
|
21
|
-
env: process.env,
|
|
22
|
-
timeout: 3000,
|
|
23
|
-
});
|
|
24
|
-
return !result.error && result.status === 0;
|
|
64
|
+
export function hasMetricFlowCli(projectRoot) {
|
|
65
|
+
return resolveMetricFlowCli(projectRoot) !== null;
|
|
25
66
|
}
|
|
26
67
|
export function compileMetricFlowQuery(request) {
|
|
27
68
|
const dbtRoot = resolveDbtProjectRoot(request.projectRoot, request.dbtProjectPath);
|
|
28
69
|
if (!existsSync(join(dbtRoot, 'target', 'semantic_manifest.json'))) {
|
|
29
70
|
throw new MetricFlowUnavailableError('dbt semantic execution requires target/semantic_manifest.json. Run `dbt parse` or `dbt build` in the dbt project, then retry.');
|
|
30
71
|
}
|
|
31
|
-
const
|
|
32
|
-
const
|
|
72
|
+
const resolvedCli = resolveMetricFlowCli(request.projectRoot);
|
|
73
|
+
const bin = resolvedCli?.bin ?? process.env.DQL_METRICFLOW_BIN ?? process.env.METRICFLOW_BIN ?? 'mf';
|
|
74
|
+
const args = buildMetricFlowArgs(request, metricFlowCompileMode(resolvedCli?.version ?? ''));
|
|
33
75
|
const result = spawnSync(bin, args, {
|
|
34
76
|
cwd: dbtRoot,
|
|
35
77
|
encoding: 'utf-8',
|
|
36
|
-
env:
|
|
78
|
+
env: {
|
|
79
|
+
...process.env,
|
|
80
|
+
...(request.profilesDir
|
|
81
|
+
? { DBT_PROFILES_DIR: resolve(request.projectRoot, request.profilesDir) }
|
|
82
|
+
: {}),
|
|
83
|
+
},
|
|
37
84
|
});
|
|
38
85
|
if (result.error) {
|
|
39
86
|
if (result.error.code === 'ENOENT') {
|
|
@@ -57,8 +104,10 @@ export function compileMetricFlowQuery(request) {
|
|
|
57
104
|
stderr,
|
|
58
105
|
};
|
|
59
106
|
}
|
|
60
|
-
function buildMetricFlowArgs(request) {
|
|
61
|
-
const args =
|
|
107
|
+
function buildMetricFlowArgs(request, mode) {
|
|
108
|
+
const args = mode === 'explain'
|
|
109
|
+
? ['query', '--explain', '--quiet']
|
|
110
|
+
: ['query', '--compile'];
|
|
62
111
|
if (request.savedQuery) {
|
|
63
112
|
args.push('--saved-query', request.savedQuery);
|
|
64
113
|
}
|
|
@@ -80,7 +129,11 @@ function buildMetricFlowArgs(request) {
|
|
|
80
129
|
for (const order of request.orderBy ?? []) {
|
|
81
130
|
if (!order.name)
|
|
82
131
|
continue;
|
|
83
|
-
args.push('--order',
|
|
132
|
+
args.push('--order', mode === 'explain' && order.direction === 'desc'
|
|
133
|
+
? `-${order.name}`
|
|
134
|
+
: mode === 'explain'
|
|
135
|
+
? order.name
|
|
136
|
+
: `${order.name} ${order.direction ?? 'asc'}`);
|
|
84
137
|
}
|
|
85
138
|
if (request.limit && Number.isFinite(request.limit)) {
|
|
86
139
|
args.push('--limit', String(request.limit));
|
package/dist/metricflow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metricflow.js","sourceRoot":"","sources":["../src/metricflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"metricflow.js","sourceRoot":"","sources":["../src/metricflow.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duckcodeailabs/dql-cli",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.6",
|
|
4
4
|
"description": "Public CLI for parsing, formatting, testing, and certifying DQL blocks",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@anthropic-ai/sdk": "^0.104.2",
|
|
28
|
-
"@duckcodeailabs/dql-agent": "^1.8.
|
|
29
|
-
"@duckcodeailabs/dql-compiler": "^1.8.
|
|
30
|
-
"@duckcodeailabs/dql-connectors": "^1.8.
|
|
31
|
-
"@duckcodeailabs/dql-core": "^1.8.
|
|
32
|
-
"@duckcodeailabs/dql-governance": "^1.8.
|
|
33
|
-
"@duckcodeailabs/dql-mcp": "^1.8.
|
|
34
|
-
"@duckcodeailabs/dql-notebook": "^1.8.
|
|
35
|
-
"@duckcodeailabs/dql-project": "^1.8.
|
|
36
|
-
"@duckcodeailabs/dql-slack": "^1.8.
|
|
28
|
+
"@duckcodeailabs/dql-agent": "^1.8.6",
|
|
29
|
+
"@duckcodeailabs/dql-compiler": "^1.8.6",
|
|
30
|
+
"@duckcodeailabs/dql-connectors": "^1.8.6",
|
|
31
|
+
"@duckcodeailabs/dql-core": "^1.8.6",
|
|
32
|
+
"@duckcodeailabs/dql-governance": "^1.8.6",
|
|
33
|
+
"@duckcodeailabs/dql-mcp": "^1.8.6",
|
|
34
|
+
"@duckcodeailabs/dql-notebook": "^1.8.6",
|
|
35
|
+
"@duckcodeailabs/dql-project": "^1.8.6",
|
|
36
|
+
"@duckcodeailabs/dql-slack": "^1.8.6",
|
|
37
37
|
"isomorphic-git": "^1.27.0",
|
|
38
38
|
"js-yaml": "^4.1.0",
|
|
39
39
|
"node-cron": "^3.0.3",
|
|
@@ -10,12 +10,13 @@ export interface SemanticRuntimeProjectConfig {
|
|
|
10
10
|
};
|
|
11
11
|
dbt?: {
|
|
12
12
|
projectDir?: string;
|
|
13
|
+
profilesDir?: string;
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
16
|
export interface SemanticRuntimeAdapterStatus {
|
|
16
17
|
id: SemanticRuntimeAdapterId;
|
|
17
18
|
label: string;
|
|
18
|
-
bundled:
|
|
19
|
+
bundled: boolean;
|
|
19
20
|
configured: boolean;
|
|
20
21
|
tested: boolean;
|
|
21
22
|
ready: boolean;
|
|
@@ -64,11 +65,20 @@ export interface SemanticRuntimeCompileContext {
|
|
|
64
65
|
}
|
|
65
66
|
export interface SemanticRuntimeCompileResult extends ComposeQueryResult {
|
|
66
67
|
engine: SemanticRuntimeAdapterId;
|
|
68
|
+
/** The governed request actually compiled after deterministic normalization. */
|
|
69
|
+
effectiveRequest: SemanticRuntimeQueryRequest;
|
|
67
70
|
}
|
|
68
71
|
export declare class SemanticRuntimeRequiredError extends Error {
|
|
69
72
|
readonly code = "SEMANTIC_RUNTIME_REQUIRED";
|
|
70
73
|
constructor(message: string);
|
|
71
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* API-004 / AGT-001: MetricFlow requires `metric_time` whenever an input metric uses a time offset.
|
|
77
|
+
* dbt stores that requirement in the metric definition, so normalize it once at
|
|
78
|
+
* the shared runtime boundary instead of asking every UI and agent route to infer
|
|
79
|
+
* the same compiler constraint independently.
|
|
80
|
+
*/
|
|
81
|
+
export declare function normalizeSemanticRuntimeQueryRequest(request: SemanticRuntimeQueryRequest, semanticLayer: SemanticLayer): SemanticRuntimeQueryRequest;
|
|
72
82
|
export declare function getSemanticRuntimeStatus(projectRoot: string, options?: {
|
|
73
83
|
probeConfiguredCloud?: boolean;
|
|
74
84
|
}): Promise<SemanticRuntimeStatus>;
|