@duckcodeailabs/dql-cli 1.8.2 → 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.
Files changed (48) hide show
  1. package/dist/assets/dql-notebook/assets/{index-DGbXmDU6.js → index-CPG4A872.js} +340 -340
  2. package/dist/assets/dql-notebook/index.html +1 -1
  3. package/dist/block-invocation.d.ts +2 -2
  4. package/dist/block-invocation.d.ts.map +1 -1
  5. package/dist/commands/doctor.d.ts.map +1 -1
  6. package/dist/commands/doctor.js +62 -2
  7. package/dist/commands/doctor.js.map +1 -1
  8. package/dist/dbt-cloud-semantic.d.ts +42 -0
  9. package/dist/dbt-cloud-semantic.d.ts.map +1 -0
  10. package/dist/dbt-cloud-semantic.js +185 -0
  11. package/dist/dbt-cloud-semantic.js.map +1 -0
  12. package/dist/llm/analytics-tools.d.ts.map +1 -1
  13. package/dist/llm/analytics-tools.js +13 -1
  14. package/dist/llm/analytics-tools.js.map +1 -1
  15. package/dist/llm/cancellation.d.ts +13 -0
  16. package/dist/llm/cancellation.d.ts.map +1 -0
  17. package/dist/llm/cancellation.js +19 -0
  18. package/dist/llm/cancellation.js.map +1 -0
  19. package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
  20. package/dist/llm/providers/dql-agent-provider.js +6 -0
  21. package/dist/llm/providers/dql-agent-provider.js.map +1 -1
  22. package/dist/llm/types.d.ts +3 -1
  23. package/dist/llm/types.d.ts.map +1 -1
  24. package/dist/local-runtime.d.ts +40 -3
  25. package/dist/local-runtime.d.ts.map +1 -1
  26. package/dist/local-runtime.js +547 -217
  27. package/dist/local-runtime.js.map +1 -1
  28. package/dist/package.json +10 -10
  29. package/dist/providers/subscription-cli.d.ts.map +1 -1
  30. package/dist/providers/subscription-cli.js +16 -0
  31. package/dist/providers/subscription-cli.js.map +1 -1
  32. package/dist/retrieval-health.d.ts +29 -0
  33. package/dist/retrieval-health.d.ts.map +1 -0
  34. package/dist/retrieval-health.js +88 -0
  35. package/dist/retrieval-health.js.map +1 -0
  36. package/dist/semantic-runtime-settings.d.ts +55 -0
  37. package/dist/semantic-runtime-settings.d.ts.map +1 -0
  38. package/dist/semantic-runtime-settings.js +191 -0
  39. package/dist/semantic-runtime-settings.js.map +1 -0
  40. package/dist/semantic-runtime.d.ts +80 -0
  41. package/dist/semantic-runtime.d.ts.map +1 -0
  42. package/dist/semantic-runtime.js +238 -0
  43. package/dist/semantic-runtime.js.map +1 -0
  44. package/dist/version-status.d.ts +28 -0
  45. package/dist/version-status.d.ts.map +1 -0
  46. package/dist/version-status.js +118 -0
  47. package/dist/version-status.js.map +1 -0
  48. package/package.json +10 -10
@@ -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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"}
@@ -0,0 +1,28 @@
1
+ export interface DqlRuntimeVersionStatus {
2
+ /** Version of the code actually serving this process. */
3
+ runningVersion: string;
4
+ /** ISO timestamp of process start — identifies a server started before a rebuild/upgrade. */
5
+ processStartedAt: string;
6
+ /** Where the running code lives: the project's node_modules, a global install, or a dev checkout. */
7
+ invocationSource: 'project_local' | 'global' | 'dev_or_unknown';
8
+ /** Range declared for @duckcodeailabs/dql-cli in the project package.json, if any. */
9
+ projectPinnedRange?: string;
10
+ /** Version installed in the project's node_modules, if any. */
11
+ projectInstalledVersion?: string;
12
+ /** Latest published version from npm, when the background check has succeeded. */
13
+ latestKnownVersion?: string;
14
+ latestCheckStatus: 'ok' | 'unknown';
15
+ /** Human-readable drift warnings; empty means no drift detected. */
16
+ drift: string[];
17
+ upgradeCommand?: string;
18
+ }
19
+ /** Best-effort latest published version; never throws, never blocks longer than 2s. */
20
+ export declare function fetchLatestPublishedDqlVersion(): Promise<string | undefined>;
21
+ /** Synchronous view of the cached latest version (health endpoints must stay fast). */
22
+ export declare function cachedLatestPublishedDqlVersion(): string | undefined;
23
+ export declare function resolveDqlRuntimeVersionStatus(input: {
24
+ projectRoot: string;
25
+ runningVersion: string;
26
+ runtimeUrl?: string;
27
+ }): DqlRuntimeVersionStatus;
28
+ //# sourceMappingURL=version-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-status.d.ts","sourceRoot":"","sources":["../src/version-status.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,uBAAuB;IACtC,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,gBAAgB,EAAE,MAAM,CAAC;IACzB,qGAAqG;IACrG,gBAAgB,EAAE,eAAe,GAAG,QAAQ,GAAG,gBAAgB,CAAC;IAChE,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,oEAAoE;IACpE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AASD,uFAAuF;AACvF,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwBlF;AAED,uFAAuF;AACvF,wBAAgB,+BAA+B,IAAI,MAAM,GAAG,SAAS,CAGpE;AAiCD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,uBAAuB,CA4B1B"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Runtime version-drift status (REL-002 / Slice 1).
3
+ *
4
+ * A stale runtime is the #1 way "the fix didn't work" reports happen: the
5
+ * project pins one dql-cli version, the global binary is another, and the
6
+ * long-running server is a third. This module makes drift VISIBLE (doctor,
7
+ * /api/health, Settings) without ever blocking offline use — the latest-version
8
+ * lookup is best-effort with a hard 2s timeout and a 24h in-memory cache, and
9
+ * every failure degrades to 'unknown'.
10
+ */
11
+ import { existsSync, readFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { fileURLToPath } from 'node:url';
14
+ const PROCESS_STARTED_AT = new Date().toISOString();
15
+ const LATEST_CACHE_TTL_MS = 24 * 60 * 60 * 1000;
16
+ const LATEST_FETCH_TIMEOUT_MS = 2_000;
17
+ let latestCache;
18
+ let latestInFlight;
19
+ /** Best-effort latest published version; never throws, never blocks longer than 2s. */
20
+ export async function fetchLatestPublishedDqlVersion() {
21
+ if (process.env.DQL_DISABLE_VERSION_CHECK === '1')
22
+ return undefined;
23
+ if (latestCache && Date.now() - latestCache.fetchedAt < LATEST_CACHE_TTL_MS)
24
+ return latestCache.version;
25
+ if (latestInFlight)
26
+ return latestInFlight;
27
+ latestInFlight = (async () => {
28
+ try {
29
+ const res = await fetch('https://registry.npmjs.org/@duckcodeailabs/dql-cli/latest', {
30
+ signal: AbortSignal.timeout(LATEST_FETCH_TIMEOUT_MS),
31
+ headers: { accept: 'application/json' },
32
+ });
33
+ if (!res.ok)
34
+ return undefined;
35
+ const body = await res.json();
36
+ if (typeof body.version === 'string' && body.version.trim()) {
37
+ latestCache = { version: body.version.trim(), fetchedAt: Date.now() };
38
+ return latestCache.version;
39
+ }
40
+ return undefined;
41
+ }
42
+ catch {
43
+ return undefined;
44
+ }
45
+ finally {
46
+ latestInFlight = undefined;
47
+ }
48
+ })();
49
+ return latestInFlight;
50
+ }
51
+ /** Synchronous view of the cached latest version (health endpoints must stay fast). */
52
+ export function cachedLatestPublishedDqlVersion() {
53
+ if (latestCache && Date.now() - latestCache.fetchedAt < LATEST_CACHE_TTL_MS)
54
+ return latestCache.version;
55
+ return undefined;
56
+ }
57
+ function readProjectCliDeclaration(projectRoot) {
58
+ const result = {};
59
+ try {
60
+ const pkgPath = join(projectRoot, 'package.json');
61
+ if (existsSync(pkgPath)) {
62
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
63
+ result.range = pkg.devDependencies?.['@duckcodeailabs/dql-cli'] ?? pkg.dependencies?.['@duckcodeailabs/dql-cli'];
64
+ }
65
+ }
66
+ catch { /* unreadable package.json is not a drift signal */ }
67
+ try {
68
+ const installedPath = join(projectRoot, 'node_modules', '@duckcodeailabs', 'dql-cli', 'package.json');
69
+ if (existsSync(installedPath)) {
70
+ const installed = JSON.parse(readFileSync(installedPath, 'utf-8'));
71
+ if (typeof installed.version === 'string')
72
+ result.installed = installed.version;
73
+ }
74
+ }
75
+ catch { /* missing/unreadable install handled by drift text */ }
76
+ return result;
77
+ }
78
+ function classifyInvocationSource(projectRoot, runtimeUrl) {
79
+ try {
80
+ const runtimePath = fileURLToPath(runtimeUrl);
81
+ if (runtimePath.startsWith(join(projectRoot, 'node_modules')))
82
+ return 'project_local';
83
+ if (/[\\/](lib[\\/])?node_modules[\\/]/.test(runtimePath))
84
+ return 'global';
85
+ }
86
+ catch { /* non-file URL (bundled) */ }
87
+ return 'dev_or_unknown';
88
+ }
89
+ export function resolveDqlRuntimeVersionStatus(input) {
90
+ const { range, installed } = readProjectCliDeclaration(input.projectRoot);
91
+ const latest = cachedLatestPublishedDqlVersion();
92
+ const invocationSource = classifyInvocationSource(input.projectRoot, input.runtimeUrl ?? import.meta.url);
93
+ const drift = [];
94
+ if (installed && input.runningVersion !== 'unknown' && installed !== input.runningVersion) {
95
+ drift.push(`The running DQL server is ${input.runningVersion}, but this project's local install is ${installed}. Restart via the project (npx dql / npm run notebook) or align the versions — fixes in one are invisible in the other.`);
96
+ }
97
+ if (latest && input.runningVersion !== 'unknown' && input.runningVersion !== latest) {
98
+ drift.push(`A newer dql-cli is published (${latest}; running ${input.runningVersion}).`);
99
+ }
100
+ if (latest && installed && installed !== latest) {
101
+ drift.push(`The project pins/installs ${installed}, but ${latest} is the latest published version.`);
102
+ }
103
+ const upgradeCommand = installed
104
+ ? `npm install @duckcodeailabs/dql-cli@${latest ?? 'latest'}`
105
+ : `npm install -g @duckcodeailabs/dql-cli@${latest ?? 'latest'}`;
106
+ return {
107
+ runningVersion: input.runningVersion,
108
+ processStartedAt: PROCESS_STARTED_AT,
109
+ invocationSource,
110
+ ...(range ? { projectPinnedRange: range } : {}),
111
+ ...(installed ? { projectInstalledVersion: installed } : {}),
112
+ ...(latest ? { latestKnownVersion: latest } : {}),
113
+ latestCheckStatus: latest ? 'ok' : 'unknown',
114
+ drift,
115
+ ...(drift.length > 0 ? { upgradeCommand } : {}),
116
+ };
117
+ }
118
+ //# sourceMappingURL=version-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-status.js","sourceRoot":"","sources":["../src/version-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAqBzC,MAAM,kBAAkB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpD,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAChD,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,IAAI,WAA+D,CAAC;AACpE,IAAI,cAAuD,CAAC;AAE5D,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IACpE,IAAI,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,GAAG,mBAAmB;QAAE,OAAO,WAAW,CAAC,OAAO,CAAC;IACxG,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAC1C,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,2DAA2D,EAAE;gBACnF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC;gBACpD,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;aACxC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,SAAS,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA2B,CAAC;YACvD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5D,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtE,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,+BAA+B;IAC7C,IAAI,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,GAAG,mBAAmB;QAAE,OAAO,WAAW,CAAC,OAAO,CAAC;IACxG,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,yBAAyB,CAAC,WAAmB;IACpD,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAGpD,CAAC;YACF,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC,yBAAyB,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,mDAAmD,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QACtG,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAyB,CAAC;YAC3F,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;gBAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;QAClF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,sDAAsD,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,WAAmB,EAAE,UAAkB;IACvE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,eAAe,CAAC;QACtF,IAAI,mCAAmC,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO,QAAQ,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;IACxC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAI9C;IACC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,+BAA+B,EAAE,CAAC;IACjD,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1G,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,cAAc,yCAAyC,SAAS,yHAAyH,CAAC,CAAC;IAC3O,CAAC;IACD,IAAI,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,iCAAiC,MAAM,aAAa,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,MAAM,IAAI,SAAS,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,6BAA6B,SAAS,SAAS,MAAM,mCAAmC,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,cAAc,GAAG,SAAS;QAC9B,CAAC,CAAC,uCAAuC,MAAM,IAAI,QAAQ,EAAE;QAC7D,CAAC,CAAC,0CAA0C,MAAM,IAAI,QAAQ,EAAE,CAAC;IACnE,OAAO;QACL,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,gBAAgB,EAAE,kBAAkB;QACpC,gBAAgB;QAChB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC5C,KAAK;QACL,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duckcodeailabs/dql-cli",
3
- "version": "1.8.2",
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",
@@ -20,15 +20,15 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@anthropic-ai/sdk": "^0.104.2",
23
- "@duckcodeailabs/dql-agent": "^1.8.2",
24
- "@duckcodeailabs/dql-compiler": "^1.8.2",
25
- "@duckcodeailabs/dql-connectors": "^1.8.2",
26
- "@duckcodeailabs/dql-core": "^1.8.2",
27
- "@duckcodeailabs/dql-governance": "^1.8.2",
28
- "@duckcodeailabs/dql-mcp": "^1.8.2",
29
- "@duckcodeailabs/dql-notebook": "^1.8.2",
30
- "@duckcodeailabs/dql-project": "^1.8.2",
31
- "@duckcodeailabs/dql-slack": "^1.8.2",
23
+ "@duckcodeailabs/dql-agent": "^1.8.4",
24
+ "@duckcodeailabs/dql-compiler": "^1.8.4",
25
+ "@duckcodeailabs/dql-connectors": "^1.8.4",
26
+ "@duckcodeailabs/dql-core": "^1.8.4",
27
+ "@duckcodeailabs/dql-governance": "^1.8.4",
28
+ "@duckcodeailabs/dql-mcp": "^1.8.4",
29
+ "@duckcodeailabs/dql-notebook": "^1.8.4",
30
+ "@duckcodeailabs/dql-project": "^1.8.4",
31
+ "@duckcodeailabs/dql-slack": "^1.8.4",
32
32
  "isomorphic-git": "^1.27.0",
33
33
  "js-yaml": "^4.1.0",
34
34
  "node-cron": "^3.0.3",