@duckcodeailabs/dql-cli 1.8.3 → 1.8.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duckcodeailabs/dql-cli",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
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.3",
29
- "@duckcodeailabs/dql-compiler": "^1.8.3",
30
- "@duckcodeailabs/dql-connectors": "^1.8.3",
31
- "@duckcodeailabs/dql-core": "^1.8.3",
32
- "@duckcodeailabs/dql-governance": "^1.8.3",
33
- "@duckcodeailabs/dql-mcp": "^1.8.3",
34
- "@duckcodeailabs/dql-notebook": "^1.8.3",
35
- "@duckcodeailabs/dql-project": "^1.8.3",
36
- "@duckcodeailabs/dql-slack": "^1.8.3",
28
+ "@duckcodeailabs/dql-agent": "^1.8.4",
29
+ "@duckcodeailabs/dql-compiler": "^1.8.4",
30
+ "@duckcodeailabs/dql-connectors": "^1.8.4",
31
+ "@duckcodeailabs/dql-core": "^1.8.4",
32
+ "@duckcodeailabs/dql-governance": "^1.8.4",
33
+ "@duckcodeailabs/dql-mcp": "^1.8.4",
34
+ "@duckcodeailabs/dql-notebook": "^1.8.4",
35
+ "@duckcodeailabs/dql-project": "^1.8.4",
36
+ "@duckcodeailabs/dql-slack": "^1.8.4",
37
37
  "isomorphic-git": "^1.27.0",
38
38
  "js-yaml": "^4.1.0",
39
39
  "node-cron": "^3.0.3",
@@ -0,0 +1,55 @@
1
+ export type SemanticRuntimePreference = 'auto' | 'native' | 'metricflow-cli' | 'dbt-cloud';
2
+ export type SemanticRuntimeTestState = 'missing' | 'configured' | 'passed' | 'failed';
3
+ export interface DbtCloudSemanticSettingsInput {
4
+ host?: string;
5
+ environmentId?: string;
6
+ serviceToken?: string;
7
+ }
8
+ export interface SemanticRuntimeSettingsInput {
9
+ preference?: SemanticRuntimePreference;
10
+ dbtCloud?: DbtCloudSemanticSettingsInput;
11
+ }
12
+ export interface EffectiveDbtCloudSemanticSettings {
13
+ host?: string;
14
+ endpoint?: string;
15
+ environmentId?: string;
16
+ serviceToken?: string;
17
+ source: 'local' | 'env' | 'none';
18
+ configured: boolean;
19
+ fingerprint?: string;
20
+ testState: SemanticRuntimeTestState;
21
+ testedAt?: string;
22
+ testMessage?: string;
23
+ dialect?: string;
24
+ metricCount?: number;
25
+ }
26
+ export interface RedactedSemanticRuntimeSettings {
27
+ preference: SemanticRuntimePreference;
28
+ dbtCloud: {
29
+ host?: string;
30
+ environmentId?: string;
31
+ hasServiceToken: boolean;
32
+ serviceTokenPreview?: string;
33
+ source: 'local' | 'env' | 'none';
34
+ configured: boolean;
35
+ testState: SemanticRuntimeTestState;
36
+ testedAt?: string;
37
+ testMessage?: string;
38
+ dialect?: string;
39
+ metricCount?: number;
40
+ envVars: string[];
41
+ };
42
+ }
43
+ export declare function semanticRuntimeSettingsPath(projectRoot: string): string;
44
+ export declare function getSemanticRuntimeSettings(projectRoot: string): RedactedSemanticRuntimeSettings;
45
+ export declare function getEffectiveDbtCloudSemanticSettings(projectRoot: string): EffectiveDbtCloudSemanticSettings;
46
+ export declare function saveTestedSemanticRuntimeSettings(projectRoot: string, input: SemanticRuntimeSettingsInput, test: {
47
+ ok: boolean;
48
+ message: string;
49
+ dialect?: string;
50
+ metricCount?: number;
51
+ }): RedactedSemanticRuntimeSettings;
52
+ export declare function semanticRuntimeDraft(projectRoot: string, input: SemanticRuntimeSettingsInput): EffectiveDbtCloudSemanticSettings;
53
+ export declare function semanticLayerGraphqlEndpoint(host: string): string;
54
+ export declare function normalizeDbtCloudHost(value: string | undefined): string | undefined;
55
+ //# sourceMappingURL=semantic-runtime-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-runtime-settings.d.ts","sourceRoot":"","sources":["../src/semantic-runtime-settings.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,QAAQ,GAAG,gBAAgB,GAAG,WAAW,CAAC;AAC3F,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtF,MAAM,WAAW,6BAA6B;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,QAAQ,CAAC,EAAE,6BAA6B,CAAC;CAC1C;AAoBD,MAAM,WAAW,iCAAiC;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,wBAAwB,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,yBAAyB,CAAC;IACtC,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,OAAO,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;QACjC,UAAU,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE,wBAAwB,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAMD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,+BAA+B,CAyB/F;AAED,wBAAgB,oCAAoC,CAAC,WAAW,EAAE,MAAM,GAAG,iCAAiC,CAiC3G;AAED,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,4BAA4B,EACnC,IAAI,EAAE;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E,+BAA+B,CAoCjC;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,4BAA4B,GAClC,iCAAiC,CAoBnC;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKnF"}
@@ -0,0 +1,191 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ const HOST_ENV_VARS = ['DBT_CLOUD_SEMANTIC_LAYER_HOST', 'DBT_SEMANTIC_LAYER_HOST'];
5
+ const ENVIRONMENT_ENV_VARS = ['DBT_CLOUD_ENVIRONMENT_ID', 'DBT_SEMANTIC_LAYER_ENVIRONMENT_ID'];
6
+ const TOKEN_ENV_VARS = ['DBT_CLOUD_SERVICE_TOKEN', 'DBT_SEMANTIC_LAYER_TOKEN'];
7
+ export function semanticRuntimeSettingsPath(projectRoot) {
8
+ return join(projectRoot, '.dql', 'semantic-runtime-settings.json');
9
+ }
10
+ export function getSemanticRuntimeSettings(projectRoot) {
11
+ const stored = readStored(projectRoot);
12
+ const effective = getEffectiveDbtCloudSemanticSettings(projectRoot);
13
+ const localToken = stored.dbtCloud?.serviceToken?.trim();
14
+ return {
15
+ preference: stored.preference ?? 'auto',
16
+ dbtCloud: {
17
+ host: effective.host,
18
+ environmentId: effective.environmentId,
19
+ hasServiceToken: Boolean(effective.serviceToken),
20
+ serviceTokenPreview: localToken
21
+ ? previewSecret(localToken)
22
+ : effective.source === 'env'
23
+ ? `${firstPresentEnvName(TOKEN_ENV_VARS) ?? 'DBT_CLOUD_SERVICE_TOKEN'}=set`
24
+ : undefined,
25
+ source: effective.source,
26
+ configured: effective.configured,
27
+ testState: effective.testState,
28
+ testedAt: effective.testedAt,
29
+ testMessage: effective.testMessage,
30
+ dialect: effective.dialect,
31
+ metricCount: effective.metricCount,
32
+ envVars: [...HOST_ENV_VARS, ...ENVIRONMENT_ENV_VARS, ...TOKEN_ENV_VARS],
33
+ },
34
+ };
35
+ }
36
+ export function getEffectiveDbtCloudSemanticSettings(projectRoot) {
37
+ const stored = readStored(projectRoot);
38
+ const local = stored.dbtCloud;
39
+ const envHost = firstPresentEnv(HOST_ENV_VARS);
40
+ const envEnvironmentId = firstPresentEnv(ENVIRONMENT_ENV_VARS);
41
+ const envToken = firstPresentEnv(TOKEN_ENV_VARS);
42
+ const host = normalizeDbtCloudHost(local?.host || envHost);
43
+ const environmentId = local?.environmentId?.trim() || envEnvironmentId?.trim() || undefined;
44
+ const serviceToken = local?.serviceToken?.trim() || envToken?.trim() || undefined;
45
+ const configured = Boolean(host && environmentId && serviceToken);
46
+ const fingerprint = host && environmentId && serviceToken
47
+ ? semanticRuntimeFingerprint({ host, environmentId, serviceToken })
48
+ : undefined;
49
+ const locallyTested = Boolean(fingerprint && local?.testedFingerprint === fingerprint);
50
+ const testState = !configured
51
+ ? 'missing'
52
+ : locallyTested && local?.testState
53
+ ? local.testState
54
+ : 'configured';
55
+ return {
56
+ host,
57
+ endpoint: host ? semanticLayerGraphqlEndpoint(host) : undefined,
58
+ environmentId,
59
+ serviceToken,
60
+ source: local?.host || local?.environmentId || local?.serviceToken ? 'local' : envHost || envEnvironmentId || envToken ? 'env' : 'none',
61
+ configured,
62
+ fingerprint,
63
+ testState,
64
+ testedAt: locallyTested ? local?.testedAt : undefined,
65
+ testMessage: locallyTested ? local?.testMessage : undefined,
66
+ dialect: locallyTested ? local?.dialect : undefined,
67
+ metricCount: locallyTested ? local?.metricCount : undefined,
68
+ };
69
+ }
70
+ export function saveTestedSemanticRuntimeSettings(projectRoot, input, test) {
71
+ if (!test.ok)
72
+ throw new Error(test.message || 'dbt Cloud Semantic Layer test failed.');
73
+ const stored = readStored(projectRoot);
74
+ const existing = stored.dbtCloud;
75
+ const host = normalizeDbtCloudHost(input.dbtCloud?.host === undefined ? existing?.host : input.dbtCloud.host);
76
+ const environmentId = input.dbtCloud?.environmentId === undefined
77
+ ? existing?.environmentId
78
+ : input.dbtCloud.environmentId.trim() || undefined;
79
+ const serviceToken = input.dbtCloud?.serviceToken === undefined || input.dbtCloud.serviceToken.trim() === ''
80
+ ? existing?.serviceToken
81
+ : input.dbtCloud.serviceToken.trim();
82
+ const effectiveHost = host || firstPresentEnv(HOST_ENV_VARS);
83
+ const effectiveEnvironmentId = environmentId || firstPresentEnv(ENVIRONMENT_ENV_VARS);
84
+ const effectiveToken = serviceToken || firstPresentEnv(TOKEN_ENV_VARS);
85
+ if (!effectiveHost || !effectiveEnvironmentId || !effectiveToken) {
86
+ throw new Error('dbt Cloud Semantic Layer requires Host, Environment ID, and Service Token.');
87
+ }
88
+ const testedFingerprint = semanticRuntimeFingerprint({
89
+ host: effectiveHost,
90
+ environmentId: effectiveEnvironmentId,
91
+ serviceToken: effectiveToken,
92
+ });
93
+ stored.preference = input.preference ?? stored.preference ?? 'auto';
94
+ stored.dbtCloud = {
95
+ host,
96
+ environmentId,
97
+ serviceToken,
98
+ testedFingerprint,
99
+ testState: 'passed',
100
+ testedAt: new Date().toISOString(),
101
+ testMessage: test.message,
102
+ dialect: test.dialect,
103
+ metricCount: test.metricCount,
104
+ };
105
+ writeStored(projectRoot, stored);
106
+ return getSemanticRuntimeSettings(projectRoot);
107
+ }
108
+ export function semanticRuntimeDraft(projectRoot, input) {
109
+ const current = getEffectiveDbtCloudSemanticSettings(projectRoot);
110
+ const host = normalizeDbtCloudHost(input.dbtCloud?.host === undefined ? current.host : input.dbtCloud.host);
111
+ const environmentId = input.dbtCloud?.environmentId === undefined
112
+ ? current.environmentId
113
+ : input.dbtCloud.environmentId.trim() || undefined;
114
+ const serviceToken = input.dbtCloud?.serviceToken === undefined || input.dbtCloud.serviceToken.trim() === ''
115
+ ? current.serviceToken
116
+ : input.dbtCloud.serviceToken.trim();
117
+ const configured = Boolean(host && environmentId && serviceToken);
118
+ return {
119
+ host,
120
+ endpoint: host ? semanticLayerGraphqlEndpoint(host) : undefined,
121
+ environmentId,
122
+ serviceToken,
123
+ source: current.source,
124
+ configured,
125
+ fingerprint: configured ? semanticRuntimeFingerprint({ host: host, environmentId: environmentId, serviceToken: serviceToken }) : undefined,
126
+ testState: configured ? 'configured' : 'missing',
127
+ };
128
+ }
129
+ export function semanticLayerGraphqlEndpoint(host) {
130
+ const normalized = normalizeDbtCloudHost(host);
131
+ return normalized.endsWith('/api/graphql') ? normalized : `${normalized}/api/graphql`;
132
+ }
133
+ export function normalizeDbtCloudHost(value) {
134
+ const trimmed = value?.trim();
135
+ if (!trimmed)
136
+ return undefined;
137
+ const withScheme = /^https?:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`;
138
+ return withScheme.replace(/\/+$/, '');
139
+ }
140
+ function semanticRuntimeFingerprint(input) {
141
+ return createHash('sha256')
142
+ .update(`${normalizeDbtCloudHost(input.host)}\n${input.environmentId.trim()}\n${input.serviceToken.trim()}`)
143
+ .digest('hex');
144
+ }
145
+ function readStored(projectRoot) {
146
+ const path = semanticRuntimeSettingsPath(projectRoot);
147
+ if (!existsSync(path))
148
+ return { version: 1 };
149
+ try {
150
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
151
+ return {
152
+ version: 1,
153
+ preference: isSemanticRuntimePreference(parsed.preference) ? parsed.preference : undefined,
154
+ dbtCloud: parsed.dbtCloud && typeof parsed.dbtCloud === 'object' ? parsed.dbtCloud : undefined,
155
+ };
156
+ }
157
+ catch {
158
+ return { version: 1 };
159
+ }
160
+ }
161
+ function writeStored(projectRoot, settings) {
162
+ const path = semanticRuntimeSettingsPath(projectRoot);
163
+ mkdirSync(dirname(path), { recursive: true });
164
+ writeFileSync(path, `${JSON.stringify(settings, null, 2)}\n`, 'utf-8');
165
+ try {
166
+ chmodSync(path, 0o600);
167
+ }
168
+ catch {
169
+ // Best effort for filesystems that support POSIX permissions.
170
+ }
171
+ }
172
+ function isSemanticRuntimePreference(value) {
173
+ return value === 'auto' || value === 'native' || value === 'metricflow-cli' || value === 'dbt-cloud';
174
+ }
175
+ function firstPresentEnv(names) {
176
+ for (const name of names) {
177
+ const value = process.env[name];
178
+ if (value?.trim())
179
+ return value.trim();
180
+ }
181
+ return undefined;
182
+ }
183
+ function firstPresentEnvName(names) {
184
+ return names.find((name) => Boolean(process.env[name]?.trim()));
185
+ }
186
+ function previewSecret(secret) {
187
+ if (secret.length <= 8)
188
+ return '********';
189
+ return `${secret.slice(0, 4)}...${secret.slice(-4)}`;
190
+ }
191
+ //# sourceMappingURL=semantic-runtime-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-runtime-settings.js","sourceRoot":"","sources":["../src/semantic-runtime-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { ComposeQueryResult, SemanticLayer } from '@duckcodeailabs/dql-core';
2
+ import { type DbtCloudSemanticTestResult } from './dbt-cloud-semantic.js';
3
+ import { type SemanticRuntimePreference, type SemanticRuntimeSettingsInput } from './semantic-runtime-settings.js';
4
+ export type SemanticRuntimeAdapterId = 'native' | 'metricflow-cli' | 'dbt-cloud';
5
+ export type SemanticMetricExecutionStatus = 'ready' | 'requires_setup' | 'unsupported';
6
+ export interface SemanticRuntimeProjectConfig {
7
+ semanticLayer?: {
8
+ provider?: string;
9
+ projectPath?: string;
10
+ };
11
+ dbt?: {
12
+ projectDir?: string;
13
+ };
14
+ }
15
+ export interface SemanticRuntimeAdapterStatus {
16
+ id: SemanticRuntimeAdapterId;
17
+ label: string;
18
+ bundled: true;
19
+ configured: boolean;
20
+ tested: boolean;
21
+ ready: boolean;
22
+ source: 'bundled' | 'local' | 'env' | 'none';
23
+ detail: string;
24
+ }
25
+ export interface SemanticRuntimeStatus {
26
+ preference: SemanticRuntimePreference;
27
+ active: SemanticRuntimeAdapterId;
28
+ adapters: SemanticRuntimeAdapterStatus[];
29
+ setup: string | null;
30
+ }
31
+ export interface SemanticMetricExecutionCapability {
32
+ status: SemanticMetricExecutionStatus;
33
+ engine: SemanticRuntimeAdapterId | null;
34
+ reason: string | null;
35
+ }
36
+ export interface SemanticRuntimeQueryRequest {
37
+ metrics: string[];
38
+ dimensions: string[];
39
+ filters?: Array<{
40
+ dimension?: string;
41
+ operator?: string;
42
+ values?: string[];
43
+ expression?: string;
44
+ }>;
45
+ timeDimension?: {
46
+ name: string;
47
+ granularity: string;
48
+ };
49
+ orderBy?: Array<{
50
+ name: string;
51
+ direction: 'asc' | 'desc';
52
+ }>;
53
+ limit?: number;
54
+ savedQuery?: string;
55
+ engine?: 'native' | 'metricflow' | SemanticRuntimeAdapterId;
56
+ }
57
+ export interface SemanticRuntimeCompileContext {
58
+ projectRoot: string;
59
+ projectConfig: SemanticRuntimeProjectConfig;
60
+ detectedProvider?: string | null;
61
+ semanticLayer: SemanticLayer;
62
+ driver?: string;
63
+ tableMapping?: Record<string, string>;
64
+ }
65
+ export interface SemanticRuntimeCompileResult extends ComposeQueryResult {
66
+ engine: SemanticRuntimeAdapterId;
67
+ }
68
+ export declare class SemanticRuntimeRequiredError extends Error {
69
+ readonly code = "SEMANTIC_RUNTIME_REQUIRED";
70
+ constructor(message: string);
71
+ }
72
+ export declare function getSemanticRuntimeStatus(projectRoot: string, options?: {
73
+ probeConfiguredCloud?: boolean;
74
+ }): Promise<SemanticRuntimeStatus>;
75
+ export declare function testSemanticRuntimeDraft(projectRoot: string, input: SemanticRuntimeSettingsInput): Promise<DbtCloudSemanticTestResult>;
76
+ export declare function compileSemanticRuntimeQuery(request: SemanticRuntimeQueryRequest, context: SemanticRuntimeCompileContext): Promise<SemanticRuntimeCompileResult | null>;
77
+ export declare function listRuntimeCompatibleDimensions(projectRoot: string, semanticLayer: SemanticLayer, metrics: string[]): Promise<Array<ReturnType<SemanticLayer['listDimensions']>[number]>>;
78
+ export declare function semanticMetricExecutionCapability(metricName: string, semanticLayer: SemanticLayer, provider: string, runtime: SemanticRuntimeStatus): SemanticMetricExecutionCapability;
79
+ export declare function isSemanticRuntimeError(error: unknown): boolean;
80
+ //# sourceMappingURL=semantic-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-runtime.d.ts","sourceRoot":"","sources":["../src/semantic-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ import { compileDbtCloudSemanticQuery, listDbtCloudCompatibleDimensions, testDbtCloudSemanticConnection, } from './dbt-cloud-semantic.js';
2
+ import { compileMetricFlowQuery, hasMetricFlowCli, MetricFlowUnavailableError } from './metricflow.js';
3
+ import { getEffectiveDbtCloudSemanticSettings, getSemanticRuntimeSettings, semanticRuntimeDraft, } from './semantic-runtime-settings.js';
4
+ export class SemanticRuntimeRequiredError extends Error {
5
+ code = 'SEMANTIC_RUNTIME_REQUIRED';
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = 'SemanticRuntimeRequiredError';
9
+ }
10
+ }
11
+ const cloudProbeCache = new Map();
12
+ export async function getSemanticRuntimeStatus(projectRoot, options = {}) {
13
+ const redacted = getSemanticRuntimeSettings(projectRoot);
14
+ const cloud = getEffectiveDbtCloudSemanticSettings(projectRoot);
15
+ const cliReady = hasMetricFlowCli();
16
+ let cloudTest;
17
+ if (cloud.configured && cloud.testState === 'passed') {
18
+ cloudTest = {
19
+ ok: true,
20
+ message: cloud.testMessage ?? 'Previously tested.',
21
+ dialect: cloud.dialect,
22
+ metricCount: cloud.metricCount,
23
+ };
24
+ }
25
+ else if (cloud.configured && options.probeConfiguredCloud) {
26
+ cloudTest = await probeDbtCloudSemanticRuntime(projectRoot).catch((error) => ({
27
+ ok: false,
28
+ message: error instanceof Error ? error.message : String(error),
29
+ }));
30
+ }
31
+ const cloudReady = Boolean(cloudTest?.ok);
32
+ const preference = redacted.preference;
33
+ const active = selectActiveAdapter(preference, cloudReady, cliReady);
34
+ const adapters = [
35
+ {
36
+ id: 'native',
37
+ label: 'DQL native semantic compiler',
38
+ bundled: true,
39
+ configured: true,
40
+ tested: true,
41
+ ready: true,
42
+ source: 'bundled',
43
+ detail: 'Bundled with DQL. Executes safe simple/additive metrics without an external runtime.',
44
+ },
45
+ {
46
+ id: 'metricflow-cli',
47
+ label: 'Local MetricFlow',
48
+ bundled: true,
49
+ configured: cliReady,
50
+ tested: cliReady,
51
+ ready: cliReady,
52
+ source: cliReady ? 'local' : 'none',
53
+ detail: cliReady
54
+ ? 'Detected a compatible `mf` executable.'
55
+ : 'Adapter is bundled; install a compatible dbt/MetricFlow Python runtime so `mf` is callable.',
56
+ },
57
+ {
58
+ id: 'dbt-cloud',
59
+ label: 'dbt Cloud Semantic Layer',
60
+ bundled: true,
61
+ configured: cloud.configured,
62
+ tested: cloudReady || cloud.testState === 'failed',
63
+ ready: cloudReady,
64
+ source: cloud.source,
65
+ detail: !cloud.configured
66
+ ? 'Adapter is bundled; configure Host, Environment ID, and a Semantic Layer service token.'
67
+ : cloudReady
68
+ ? cloudTest?.message ?? 'Test passed.'
69
+ : cloudTest?.message ?? cloud.testMessage ?? 'Configured but not tested.',
70
+ },
71
+ ];
72
+ const setup = active !== 'native'
73
+ ? null
74
+ : cloud.configured && !cloudReady
75
+ ? 'Test the configured dbt Cloud Semantic Layer connection, or install a compatible local MetricFlow runtime.'
76
+ : 'Configure dbt Cloud Semantic Layer, or install a compatible local MetricFlow runtime for derived, ratio, cumulative, and conversion metrics.';
77
+ return { preference, active, adapters, setup };
78
+ }
79
+ export async function testSemanticRuntimeDraft(projectRoot, input) {
80
+ const draft = semanticRuntimeDraft(projectRoot, input);
81
+ return testDbtCloudSemanticConnection(draft);
82
+ }
83
+ export async function compileSemanticRuntimeQuery(request, context) {
84
+ const status = await getSemanticRuntimeStatus(context.projectRoot, { probeConfiguredCloud: true });
85
+ const explicit = request.engine;
86
+ const fullRuntimeRequested = explicit === 'metricflow' || explicit === 'metricflow-cli' || explicit === 'dbt-cloud';
87
+ const candidates = explicit === 'native'
88
+ ? ['native']
89
+ : explicit === 'dbt-cloud'
90
+ ? ['dbt-cloud']
91
+ : explicit === 'metricflow-cli'
92
+ ? ['metricflow-cli']
93
+ : status.active === 'dbt-cloud'
94
+ ? ['dbt-cloud', 'metricflow-cli', 'native']
95
+ : status.active === 'metricflow-cli'
96
+ ? ['metricflow-cli', 'dbt-cloud', 'native']
97
+ : ['native'];
98
+ let lastRuntimeError;
99
+ for (const adapter of candidates) {
100
+ if (adapter === 'dbt-cloud') {
101
+ const adapterStatus = status.adapters.find((item) => item.id === adapter);
102
+ if (!adapterStatus?.ready)
103
+ continue;
104
+ try {
105
+ const result = await compileDbtCloudSemanticQuery(getEffectiveDbtCloudSemanticSettings(context.projectRoot), request);
106
+ return { sql: result.sql, joins: [], tables: [], engine: 'dbt-cloud' };
107
+ }
108
+ catch (error) {
109
+ lastRuntimeError = error instanceof Error ? error : new Error(String(error));
110
+ if (explicit === 'dbt-cloud')
111
+ throw lastRuntimeError;
112
+ continue;
113
+ }
114
+ }
115
+ if (adapter === 'metricflow-cli') {
116
+ if (!hasMetricFlowCli())
117
+ continue;
118
+ try {
119
+ const dbtProjectPath = context.projectConfig.semanticLayer?.provider === 'dbt'
120
+ ? context.projectConfig.semanticLayer.projectPath
121
+ : context.projectConfig.dbt?.projectDir;
122
+ const compiled = compileMetricFlowQuery({
123
+ projectRoot: context.projectRoot,
124
+ dbtProjectPath,
125
+ metrics: request.metrics,
126
+ dimensions: request.dimensions,
127
+ filters: request.filters,
128
+ timeDimension: request.timeDimension,
129
+ orderBy: request.orderBy,
130
+ limit: request.limit,
131
+ savedQuery: request.savedQuery,
132
+ });
133
+ return { sql: compiled.sql, joins: [], tables: [], engine: 'metricflow-cli' };
134
+ }
135
+ catch (error) {
136
+ lastRuntimeError = error instanceof Error ? error : new Error(String(error));
137
+ if (explicit === 'metricflow-cli' || explicit === 'metricflow')
138
+ throw lastRuntimeError;
139
+ continue;
140
+ }
141
+ }
142
+ const composed = context.semanticLayer.composeQuery({
143
+ metrics: request.metrics,
144
+ dimensions: request.dimensions,
145
+ filters: request.filters,
146
+ limit: request.limit,
147
+ timeDimension: request.timeDimension,
148
+ orderBy: request.orderBy,
149
+ driver: context.driver,
150
+ tableMapping: context.tableMapping,
151
+ });
152
+ if (composed)
153
+ return { ...composed, engine: 'native' };
154
+ }
155
+ if (fullRuntimeRequested) {
156
+ throw lastRuntimeError ?? new SemanticRuntimeRequiredError(status.setup ?? 'The requested semantic runtime is unavailable.');
157
+ }
158
+ if (lastRuntimeError && !context.semanticLayer.canComposeMetric(request.metrics[0] ?? '')) {
159
+ throw new SemanticRuntimeRequiredError(lastRuntimeError.message);
160
+ }
161
+ return null;
162
+ }
163
+ export async function listRuntimeCompatibleDimensions(projectRoot, semanticLayer, metrics) {
164
+ if (metrics.length === 0)
165
+ return [];
166
+ const status = await getSemanticRuntimeStatus(projectRoot, { probeConfiguredCloud: true });
167
+ if (status.active === 'dbt-cloud') {
168
+ const cloud = await listDbtCloudCompatibleDimensions(getEffectiveDbtCloudSemanticSettings(projectRoot), metrics);
169
+ const localByName = new Map(semanticLayer.listDimensions().map((dimension) => [dimension.name.toLowerCase(), dimension]));
170
+ return cloud.map((dimension) => localByName.get(dimension.name.toLowerCase()) ?? {
171
+ name: dimension.name,
172
+ label: dimension.name.replace(/[_-]+/g, ' '),
173
+ description: dimension.description ?? '',
174
+ domain: '',
175
+ sql: dimension.name,
176
+ type: dimension.type?.toLowerCase() === 'time' ? 'date' : 'string',
177
+ table: '',
178
+ isTimeDimension: dimension.type?.toLowerCase() === 'time',
179
+ granularities: dimension.granularities.map((value) => value.toLowerCase()),
180
+ source: { provider: 'dbt', objectType: 'dimension', objectId: dimension.name, objectName: dimension.name },
181
+ });
182
+ }
183
+ return semanticLayer.listCompatibleDimensions(metrics);
184
+ }
185
+ export function semanticMetricExecutionCapability(metricName, semanticLayer, provider, runtime) {
186
+ const fullRuntime = runtime.active === 'dbt-cloud' || runtime.active === 'metricflow-cli'
187
+ ? runtime.active
188
+ : null;
189
+ if (provider === 'dbt' && fullRuntime) {
190
+ return { status: 'ready', engine: fullRuntime, reason: null };
191
+ }
192
+ if (semanticLayer.canComposeMetric(metricName)) {
193
+ return { status: 'ready', engine: 'native', reason: null };
194
+ }
195
+ const metric = semanticLayer.getMetric(metricName);
196
+ if (provider === 'dbt') {
197
+ const kind = metric?.metricType || metric?.aggregation || metric?.type || 'metric';
198
+ return {
199
+ status: 'requires_setup',
200
+ engine: null,
201
+ reason: `${kind} metric requires a full semantic runtime. ${runtime.setup ?? 'Configure dbt Cloud Semantic Layer or local MetricFlow.'}`,
202
+ };
203
+ }
204
+ return {
205
+ status: 'unsupported',
206
+ engine: null,
207
+ reason: 'The metric does not have enough composable measure and relation metadata.',
208
+ };
209
+ }
210
+ async function probeDbtCloudSemanticRuntime(projectRoot) {
211
+ const cloud = getEffectiveDbtCloudSemanticSettings(projectRoot);
212
+ if (!cloud.configured || !cloud.fingerprint) {
213
+ return { ok: false, message: 'dbt Cloud Semantic Layer is not configured.' };
214
+ }
215
+ const cached = cloudProbeCache.get(cloud.fingerprint);
216
+ if (cached && cached.expiresAt > Date.now())
217
+ return cached.result;
218
+ const result = await testDbtCloudSemanticConnection(cloud);
219
+ cloudProbeCache.set(cloud.fingerprint, { expiresAt: Date.now() + 5 * 60_000, result });
220
+ return result;
221
+ }
222
+ function selectActiveAdapter(preference, cloudReady, cliReady) {
223
+ if (preference === 'dbt-cloud')
224
+ return cloudReady ? 'dbt-cloud' : cliReady ? 'metricflow-cli' : 'native';
225
+ if (preference === 'metricflow-cli')
226
+ return cliReady ? 'metricflow-cli' : cloudReady ? 'dbt-cloud' : 'native';
227
+ if (preference === 'native')
228
+ return 'native';
229
+ if (cloudReady)
230
+ return 'dbt-cloud';
231
+ if (cliReady)
232
+ return 'metricflow-cli';
233
+ return 'native';
234
+ }
235
+ export function isSemanticRuntimeError(error) {
236
+ return error instanceof SemanticRuntimeRequiredError || error instanceof MetricFlowUnavailableError;
237
+ }
238
+ //# sourceMappingURL=semantic-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-runtime.js","sourceRoot":"","sources":["../src/semantic-runtime.ts"],"names":[],"mappings":"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"}