@duckcodeailabs/dql-cli 1.0.3 → 1.2.0

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 (111) hide show
  1. package/dist/args.d.ts +1 -0
  2. package/dist/args.d.ts.map +1 -1
  3. package/dist/args.js +4 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/assets/dql-notebook/assets/index-Cscl1A2H.js +628 -0
  6. package/dist/assets/dql-notebook/index.html +1 -1
  7. package/dist/commands/app.d.ts +3 -0
  8. package/dist/commands/app.d.ts.map +1 -0
  9. package/dist/commands/app.js +191 -0
  10. package/dist/commands/app.js.map +1 -0
  11. package/dist/commands/build.d.ts.map +1 -1
  12. package/dist/commands/build.js +30 -2
  13. package/dist/commands/build.js.map +1 -1
  14. package/dist/commands/diff.d.ts +1 -1
  15. package/dist/commands/diff.d.ts.map +1 -1
  16. package/dist/commands/diff.js +38 -9
  17. package/dist/commands/diff.js.map +1 -1
  18. package/dist/commands/fmt.d.ts.map +1 -1
  19. package/dist/commands/fmt.js +27 -8
  20. package/dist/commands/fmt.js.map +1 -1
  21. package/dist/commands/init.d.ts.map +1 -1
  22. package/dist/commands/init.js +1 -1
  23. package/dist/commands/init.js.map +1 -1
  24. package/dist/commands/mcp.d.ts +7 -0
  25. package/dist/commands/mcp.d.ts.map +1 -0
  26. package/dist/commands/mcp.js +16 -0
  27. package/dist/commands/mcp.js.map +1 -0
  28. package/dist/commands/migrate.d.ts +1 -0
  29. package/dist/commands/migrate.d.ts.map +1 -1
  30. package/dist/commands/migrate.js +86 -0
  31. package/dist/commands/migrate.js.map +1 -1
  32. package/dist/commands/schedule.d.ts +3 -0
  33. package/dist/commands/schedule.d.ts.map +1 -0
  34. package/dist/commands/schedule.js +132 -0
  35. package/dist/commands/schedule.js.map +1 -0
  36. package/dist/digest.d.ts +10 -0
  37. package/dist/digest.d.ts.map +1 -0
  38. package/dist/digest.js +83 -0
  39. package/dist/digest.js.map +1 -0
  40. package/dist/git-service.d.ts +17 -0
  41. package/dist/git-service.d.ts.map +1 -0
  42. package/dist/git-service.js +54 -0
  43. package/dist/git-service.js.map +1 -0
  44. package/dist/index.js +20 -3
  45. package/dist/index.js.map +1 -1
  46. package/dist/llm/claude-agent-sdk.d.ts +3 -0
  47. package/dist/llm/claude-agent-sdk.d.ts.map +1 -0
  48. package/dist/llm/claude-agent-sdk.js +174 -0
  49. package/dist/llm/claude-agent-sdk.js.map +1 -0
  50. package/dist/llm/claude-code.d.ts +8 -0
  51. package/dist/llm/claude-code.d.ts.map +1 -0
  52. package/dist/llm/claude-code.js +171 -0
  53. package/dist/llm/claude-code.js.map +1 -0
  54. package/dist/llm/index.d.ts +4 -0
  55. package/dist/llm/index.d.ts.map +1 -0
  56. package/dist/llm/index.js +10 -0
  57. package/dist/llm/index.js.map +1 -0
  58. package/dist/llm/tools.d.ts +9 -0
  59. package/dist/llm/tools.d.ts.map +1 -0
  60. package/dist/llm/tools.js +112 -0
  61. package/dist/llm/tools.js.map +1 -0
  62. package/dist/llm/types.d.ts +64 -0
  63. package/dist/llm/types.d.ts.map +1 -0
  64. package/dist/llm/types.js +2 -0
  65. package/dist/llm/types.js.map +1 -0
  66. package/dist/local-runtime.d.ts +6 -0
  67. package/dist/local-runtime.d.ts.map +1 -1
  68. package/dist/local-runtime.js +124 -8
  69. package/dist/local-runtime.js.map +1 -1
  70. package/dist/schedule/alerts.d.ts +5 -0
  71. package/dist/schedule/alerts.d.ts.map +1 -0
  72. package/dist/schedule/alerts.js +54 -0
  73. package/dist/schedule/alerts.js.map +1 -0
  74. package/dist/schedule/discovery.d.ts +4 -0
  75. package/dist/schedule/discovery.d.ts.map +1 -0
  76. package/dist/schedule/discovery.js +36 -0
  77. package/dist/schedule/discovery.js.map +1 -0
  78. package/dist/schedule/notifiers/email.d.ts +3 -0
  79. package/dist/schedule/notifiers/email.d.ts.map +1 -0
  80. package/dist/schedule/notifiers/email.js +76 -0
  81. package/dist/schedule/notifiers/email.js.map +1 -0
  82. package/dist/schedule/notifiers/file.d.ts +3 -0
  83. package/dist/schedule/notifiers/file.d.ts.map +1 -0
  84. package/dist/schedule/notifiers/file.js +50 -0
  85. package/dist/schedule/notifiers/file.js.map +1 -0
  86. package/dist/schedule/notifiers/index.d.ts +10 -0
  87. package/dist/schedule/notifiers/index.d.ts.map +1 -0
  88. package/dist/schedule/notifiers/index.js +33 -0
  89. package/dist/schedule/notifiers/index.js.map +1 -0
  90. package/dist/schedule/notifiers/slack.d.ts +3 -0
  91. package/dist/schedule/notifiers/slack.d.ts.map +1 -0
  92. package/dist/schedule/notifiers/slack.js +58 -0
  93. package/dist/schedule/notifiers/slack.js.map +1 -0
  94. package/dist/schedule/runner.d.ts +11 -0
  95. package/dist/schedule/runner.d.ts.map +1 -0
  96. package/dist/schedule/runner.js +109 -0
  97. package/dist/schedule/runner.js.map +1 -0
  98. package/dist/schedule/runs.d.ts +5 -0
  99. package/dist/schedule/runs.d.ts.map +1 -0
  100. package/dist/schedule/runs.js +40 -0
  101. package/dist/schedule/runs.js.map +1 -0
  102. package/dist/schedule/service.d.ts +12 -0
  103. package/dist/schedule/service.d.ts.map +1 -0
  104. package/dist/schedule/service.js +49 -0
  105. package/dist/schedule/service.js.map +1 -0
  106. package/dist/schedule/types.d.ts +64 -0
  107. package/dist/schedule/types.d.ts.map +1 -0
  108. package/dist/schedule/types.js +2 -0
  109. package/dist/schedule/types.js.map +1 -0
  110. package/package.json +17 -10
  111. package/dist/assets/dql-notebook/assets/index-BJbWzCsK.js +0 -622
@@ -1,3 +1,6 @@
1
+ import { readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
2
+ import { join, relative } from 'node:path';
3
+ import { canonicalize, canonicalizeNotebook } from '@duckcodeailabs/dql-core';
1
4
  /**
2
5
  * Generate a DQL block skeleton from a source tool definition.
3
6
  */
@@ -27,12 +30,17 @@ function generateBlockDQL(opts) {
27
30
  `;
28
31
  }
29
32
  export async function runMigrate(file, flags) {
33
+ if (file === 'format') {
34
+ await runFormatMigrate(flags.input || '.', flags);
35
+ return;
36
+ }
30
37
  // file is used as the source type for migration
31
38
  const source = file;
32
39
  const validSources = ['looker', 'tableau', 'dbt', 'metabase', 'raw-sql'];
33
40
  if (!validSources.includes(source)) {
34
41
  console.error(`\n ✗ Unknown migration source: "${source}"`);
35
42
  console.error(` Valid sources: ${validSources.join(', ')}`);
43
+ console.error(` Or: "format" to upgrade .dql/.dqlnb files to the canonical on-disk format`);
36
44
  console.error('');
37
45
  process.exit(1);
38
46
  }
@@ -103,4 +111,82 @@ export async function runMigrate(file, flags) {
103
111
  console.log(' 4. Commit and push for certification');
104
112
  console.log('');
105
113
  }
114
+ export async function runFormatMigrate(root, flags) {
115
+ const dryRun = flags.check === true;
116
+ const report = {
117
+ scanned: 0,
118
+ alreadyCanonical: 0,
119
+ upgraded: 0,
120
+ failed: [],
121
+ dryRun,
122
+ };
123
+ for (const absPath of walkDqlFiles(root)) {
124
+ report.scanned += 1;
125
+ const rel = relative(root, absPath) || absPath;
126
+ const source = readFileSync(absPath, 'utf-8');
127
+ let canonical;
128
+ try {
129
+ canonical = absPath.endsWith('.dqlnb') ? canonicalizeNotebook(source) : canonicalize(source);
130
+ }
131
+ catch (error) {
132
+ report.failed.push({ path: rel, error: error instanceof Error ? error.message : String(error) });
133
+ continue;
134
+ }
135
+ if (canonical === source) {
136
+ report.alreadyCanonical += 1;
137
+ continue;
138
+ }
139
+ if (!dryRun)
140
+ writeFileSync(absPath, canonical, 'utf-8');
141
+ report.upgraded += 1;
142
+ }
143
+ if (flags.format === 'json') {
144
+ console.log(JSON.stringify(report, null, 2));
145
+ if (report.failed.length > 0)
146
+ process.exit(1);
147
+ return;
148
+ }
149
+ console.log(`\n DQL format migration${dryRun ? ' (dry run)' : ''}`);
150
+ console.log(' ─────────────────────────────');
151
+ console.log(` Scanned: ${report.scanned}`);
152
+ console.log(` Already canonical: ${report.alreadyCanonical}`);
153
+ console.log(` ${dryRun ? 'Would upgrade' : 'Upgraded'}: ${report.upgraded}`);
154
+ if (report.failed.length > 0) {
155
+ console.log(` Failed: ${report.failed.length}`);
156
+ for (const f of report.failed)
157
+ console.log(` ✗ ${f.path}: ${f.error}`);
158
+ process.exit(1);
159
+ }
160
+ console.log('');
161
+ }
162
+ function* walkDqlFiles(root) {
163
+ const stack = [root];
164
+ while (stack.length > 0) {
165
+ const dir = stack.pop();
166
+ let entries;
167
+ try {
168
+ entries = readdirSync(dir, { withFileTypes: true });
169
+ }
170
+ catch {
171
+ continue;
172
+ }
173
+ for (const entry of entries) {
174
+ if (entry.name === 'node_modules' || entry.name === '.git' || entry.name === 'dist' || entry.name === 'target')
175
+ continue;
176
+ const full = join(dir, entry.name);
177
+ if (entry.isDirectory()) {
178
+ stack.push(full);
179
+ }
180
+ else if (entry.isFile() && (entry.name.endsWith('.dql') || entry.name.endsWith('.dqlnb'))) {
181
+ try {
182
+ if (statSync(full).size > 0)
183
+ yield full;
184
+ }
185
+ catch {
186
+ // skip unreadable
187
+ }
188
+ }
189
+ }
190
+ }
191
+ }
106
192
  //# sourceMappingURL=migrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CLIFlags } from '../args.js';
2
+ export declare function runSchedule(sub: string | null, rest: string[], flags: CLIFlags): Promise<void>;
3
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,132 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { isAbsolute, resolve } from 'node:path';
3
+ import { QueryExecutor } from '@duckcodeailabs/dql-connectors';
4
+ import { findProjectRoot, loadProjectConfig, normalizeProjectConnection } from '../local-runtime.js';
5
+ import { discoverScheduledBlocks } from '../schedule/discovery.js';
6
+ import { runBlock } from '../schedule/runner.js';
7
+ import { listRunRecords } from '../schedule/runs.js';
8
+ import { startScheduleService } from '../schedule/service.js';
9
+ export async function runSchedule(sub, rest, flags) {
10
+ switch (sub) {
11
+ case 'list':
12
+ return runScheduleList(flags);
13
+ case 'run':
14
+ return runScheduleRun(rest, flags);
15
+ case 'status':
16
+ return runScheduleStatus(flags);
17
+ case 'start':
18
+ return runScheduleStart(flags);
19
+ case 'stop':
20
+ throw new Error('dql schedule runs in the foreground — stop with Ctrl+C in the terminal where it is running.');
21
+ default:
22
+ throw new Error('Usage: dql schedule <list|run|start|status> [args]');
23
+ }
24
+ }
25
+ async function runScheduleList(flags) {
26
+ const projectRoot = findProjectRoot(process.cwd());
27
+ const blocks = discoverScheduledBlocks(projectRoot);
28
+ if (flags.format === 'json') {
29
+ console.log(JSON.stringify({ blocks }, null, 2));
30
+ return;
31
+ }
32
+ if (blocks.length === 0) {
33
+ console.log('No scheduled blocks found. Add @schedule("daily", "9:00 AM") to a .dql file.');
34
+ return;
35
+ }
36
+ console.log(`Scheduled blocks (${blocks.length}):`);
37
+ for (const b of blocks) {
38
+ const alerts = b.alerts.length > 0 ? ` alerts=${b.alerts.length}` : '';
39
+ const notifs = b.notifications.length > 0 ? ` notify=${b.notifications.map((n) => n.type).join(',')}` : '';
40
+ console.log(` ${b.name.padEnd(40)} cron="${b.schedule.cron}"${alerts}${notifs}`);
41
+ }
42
+ }
43
+ async function runScheduleRun(rest, flags) {
44
+ const target = rest[0];
45
+ if (!target)
46
+ throw new Error('Usage: dql schedule run <path-to-block.dql>');
47
+ const projectRoot = findProjectRoot(process.cwd());
48
+ const absPath = isAbsolute(target) ? target : resolve(process.cwd(), target);
49
+ if (!existsSync(absPath))
50
+ throw new Error(`File not found: ${target}`);
51
+ const projectConfig = loadProjectConfig(projectRoot);
52
+ const connection = normalizeProjectConnection(projectConfig.defaultConnection ?? { driver: 'duckdb' }, projectRoot);
53
+ const executor = new QueryExecutor();
54
+ const record = await runBlock(absPath, {
55
+ executor,
56
+ connection,
57
+ projectRoot,
58
+ trigger: 'manual',
59
+ });
60
+ if (flags.format === 'json') {
61
+ console.log(JSON.stringify(record, null, 2));
62
+ return;
63
+ }
64
+ const breached = record.alerts.filter((a) => a.breached).length;
65
+ const tag = record.error ? `error: ${record.error}` : breached > 0 ? `${breached} alert(s) breached` : 'ok';
66
+ console.log(` ${record.block} → ${tag}`);
67
+ console.log(` queries: ${record.queries.length} (${record.queries.filter((q) => !q.error).length} ok)`);
68
+ for (const q of record.queries) {
69
+ const s = q.error ? `err: ${q.error}` : `${q.rowCount} rows in ${q.durationMs}ms`;
70
+ console.log(` ${q.chartId}: ${s}`);
71
+ }
72
+ if (record.alerts.length > 0) {
73
+ console.log(` alerts:`);
74
+ for (const a of record.alerts) {
75
+ const status = a.error ? `err: ${a.error}` : a.breached ? 'BREACHED' : 'ok';
76
+ const obs = a.observedValue !== undefined ? ` (observed ${a.observedValue})` : '';
77
+ console.log(` ${status}${obs}: ${a.alert.conditionSQL}`);
78
+ }
79
+ }
80
+ if (record.notifications.length > 0) {
81
+ console.log(` notifications:`);
82
+ for (const n of record.notifications) {
83
+ const status = n.delivered ? 'sent' : `failed: ${n.error}`;
84
+ console.log(` ${n.type} → ${n.recipients.join(', ') || '(default)'} [${status}]`);
85
+ }
86
+ }
87
+ }
88
+ async function runScheduleStatus(flags) {
89
+ const projectRoot = findProjectRoot(process.cwd());
90
+ const records = listRunRecords(projectRoot, 10);
91
+ if (flags.format === 'json') {
92
+ console.log(JSON.stringify({ records }, null, 2));
93
+ return;
94
+ }
95
+ if (records.length === 0) {
96
+ console.log('No run history in .dql/runs/. Trigger a run with: dql schedule run <path>');
97
+ return;
98
+ }
99
+ console.log(`Last ${records.length} runs:`);
100
+ for (const r of records) {
101
+ const breached = r.alerts.filter((a) => a.breached).length;
102
+ const tag = r.error ? 'error' : breached > 0 ? `breached:${breached}` : 'ok';
103
+ console.log(` ${r.startedAt} ${r.block.padEnd(40)} ${r.trigger.padEnd(6)} ${tag}`);
104
+ }
105
+ }
106
+ async function runScheduleStart(flags) {
107
+ const service = await startScheduleService();
108
+ if (flags.format === 'json') {
109
+ console.log(JSON.stringify({ started: true, blocks: service.blocks }, null, 2));
110
+ }
111
+ else if (service.blocks.length === 0) {
112
+ console.log('No scheduled blocks found. Add @schedule(...) to a .dql file and restart.');
113
+ return;
114
+ }
115
+ else {
116
+ console.log(`[schedule] running ${service.blocks.length} block(s). Ctrl+C to stop.`);
117
+ for (const b of service.blocks) {
118
+ console.log(` - ${b.name} cron="${b.schedule.cron}"`);
119
+ }
120
+ }
121
+ // Graceful shutdown.
122
+ const shutdown = async () => {
123
+ await service.stop();
124
+ console.log('\n[schedule] stopped');
125
+ process.exit(0);
126
+ };
127
+ process.on('SIGINT', shutdown);
128
+ process.on('SIGTERM', shutdown);
129
+ // Hold the event loop open.
130
+ await new Promise(() => { });
131
+ }
132
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Digest build helper — resolves block sources + SHAs and drives digest-emitter.
3
+ *
4
+ * Runs outside compile() so the narrative (potentially LLM-backed) stays an
5
+ * async post-process step and doesn't push async up through the core compiler.
6
+ */
7
+ import { type CompilationOutput, type DigestBuildResult, type DigestLLMProvider } from '@duckcodeailabs/dql-compiler';
8
+ export declare function isDigestOutput(output: CompilationOutput): boolean;
9
+ export declare function runDigestBuild(output: CompilationOutput, projectRoot: string, llm?: DigestLLMProvider): Promise<DigestBuildResult>;
10
+ //# sourceMappingURL=digest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEjE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,iBAAiB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAsB5B"}
package/dist/digest.js ADDED
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Digest build helper — resolves block sources + SHAs and drives digest-emitter.
3
+ *
4
+ * Runs outside compile() so the narrative (potentially LLM-backed) stays an
5
+ * async post-process step and doesn't push async up through the core compiler.
6
+ */
7
+ import { execSync } from 'node:child_process';
8
+ import { existsSync, readFileSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { buildManifest } from '@duckcodeailabs/dql-core';
11
+ import { buildDigest, } from '@duckcodeailabs/dql-compiler';
12
+ export function isDigestOutput(output) {
13
+ return Boolean(output.metadata?.narrative);
14
+ }
15
+ export async function runDigestBuild(output, projectRoot, llm) {
16
+ const narrative = output.metadata?.narrative;
17
+ if (!narrative) {
18
+ throw new Error('runDigestBuild called on non-digest output');
19
+ }
20
+ const sources = loadBlockSources(projectRoot, narrative.sources);
21
+ const digestIR = {
22
+ title: output.metadata.title,
23
+ narrative,
24
+ // The digest-emitter only needs `title` + `narrative` + `sources` for
25
+ // narrative composition; the dashboard HTML is threaded in separately.
26
+ charts: [],
27
+ filters: [],
28
+ params: [],
29
+ notifications: output.metadata.notifications ?? [],
30
+ alerts: output.metadata.alerts ?? [],
31
+ layout: { type: 'grid', columns: 12, items: [] },
32
+ variables: {},
33
+ };
34
+ return buildDigest(digestIR, output.html, sources, llm);
35
+ }
36
+ function loadBlockSources(projectRoot, sourceNames) {
37
+ const manifest = loadOrBuildManifest(projectRoot);
38
+ const sources = new Map();
39
+ for (const name of sourceNames) {
40
+ const block = manifest?.blocks?.[name];
41
+ if (!block) {
42
+ sources.set(name, { path: name, description: undefined });
43
+ continue;
44
+ }
45
+ sources.set(name, {
46
+ path: block.filePath,
47
+ description: block.description,
48
+ gitCommitSha: resolveGitSha(projectRoot, block.filePath),
49
+ });
50
+ }
51
+ return sources;
52
+ }
53
+ function loadOrBuildManifest(projectRoot) {
54
+ const cached = join(projectRoot, 'dql-manifest.json');
55
+ if (existsSync(cached)) {
56
+ try {
57
+ return JSON.parse(readFileSync(cached, 'utf-8'));
58
+ }
59
+ catch {
60
+ // fall through to fresh build
61
+ }
62
+ }
63
+ try {
64
+ return buildManifest({ projectRoot, dqlVersion: '0.0.0' });
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ function resolveGitSha(projectRoot, filePath) {
71
+ try {
72
+ const sha = execSync(`git log -1 --format=%H -- "${filePath}"`, {
73
+ cwd: projectRoot,
74
+ encoding: 'utf-8',
75
+ stdio: ['ignore', 'pipe', 'ignore'],
76
+ }).trim();
77
+ return sha.length > 0 ? sha : undefined;
78
+ }
79
+ catch {
80
+ return undefined;
81
+ }
82
+ }
83
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface RepoContext {
2
+ /** Absolute path to the repository root (where `.git` lives). */
3
+ dir: string;
4
+ /** Relative path of the requested file from the repo root, POSIX-separated. */
5
+ relpath: string;
6
+ }
7
+ /**
8
+ * Locate the git repository containing `absPath`. Walks upward looking
9
+ * for a `.git` directory. Returns `null` when no repository is found.
10
+ */
11
+ export declare function findRepoContext(absPath: string): RepoContext | null;
12
+ /**
13
+ * Read the HEAD-committed contents of `relpath` as a UTF-8 string. Returns
14
+ * `null` if HEAD has no such file (newly added in the working copy).
15
+ */
16
+ export declare function readHeadBlob(ctx: RepoContext): Promise<string | null>;
17
+ //# sourceMappingURL=git-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-service.d.ts","sourceRoot":"","sources":["../src/git-service.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAcnE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAc3E"}
@@ -0,0 +1,54 @@
1
+ // Thin isomorphic-git wrapper used by `dql diff <path>` to resolve the
2
+ // HEAD blob for a file inside a git repo.
3
+ import { statSync } from 'node:fs';
4
+ import { join, relative, resolve } from 'node:path';
5
+ import git from 'isomorphic-git';
6
+ import * as fs from 'node:fs';
7
+ /**
8
+ * Locate the git repository containing `absPath`. Walks upward looking
9
+ * for a `.git` directory. Returns `null` when no repository is found.
10
+ */
11
+ export function findRepoContext(absPath) {
12
+ let dir = resolve(absPath);
13
+ if (!statSync(dir, { throwIfNoEntry: false })?.isDirectory()) {
14
+ dir = resolve(dir, '..');
15
+ }
16
+ while (true) {
17
+ if (statSync(join(dir, '.git'), { throwIfNoEntry: false })) {
18
+ const rel = relative(dir, absPath).split(/[\\/]/).join('/');
19
+ return { dir, relpath: rel };
20
+ }
21
+ const parent = resolve(dir, '..');
22
+ if (parent === dir)
23
+ return null;
24
+ dir = parent;
25
+ }
26
+ }
27
+ /**
28
+ * Read the HEAD-committed contents of `relpath` as a UTF-8 string. Returns
29
+ * `null` if HEAD has no such file (newly added in the working copy).
30
+ */
31
+ export async function readHeadBlob(ctx) {
32
+ try {
33
+ const commitSha = await git.resolveRef({ fs, dir: ctx.dir, ref: 'HEAD' });
34
+ const { blob } = await git.readBlob({
35
+ fs,
36
+ dir: ctx.dir,
37
+ oid: commitSha,
38
+ filepath: ctx.relpath,
39
+ });
40
+ return new TextDecoder('utf-8').decode(blob);
41
+ }
42
+ catch (error) {
43
+ if (isNotFoundError(error))
44
+ return null;
45
+ throw error;
46
+ }
47
+ }
48
+ function isNotFoundError(error) {
49
+ if (!error || typeof error !== 'object')
50
+ return false;
51
+ const code = error.code;
52
+ return code === 'NotFoundError' || code === 'ENOENT';
53
+ }
54
+ //# sourceMappingURL=git-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-service.js","sourceRoot":"","sources":["../src/git-service.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,0CAA0C;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAS9B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC;QAC7D,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC/B,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAgB;IACjD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC;YAClC,EAAE;YACF,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,GAAG,CAAC,OAAO;SACtB,CAAC,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,eAAe,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,IAAI,GAAI,KAA2B,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,QAAQ,CAAC;AACvD,CAAC"}
package/dist/index.js CHANGED
@@ -22,6 +22,9 @@ import { runLineage } from './commands/lineage.js';
22
22
  import { runCompile } from './commands/compile.js';
23
23
  import { runSync } from './commands/sync.js';
24
24
  import { runDiff } from './commands/diff.js';
25
+ import { runMcp } from './commands/mcp.js';
26
+ import { runApp } from './commands/app.js';
27
+ import { runSchedule } from './commands/schedule.js';
25
28
  const HELP = `
26
29
  dql — DQL CLI
27
30
 
@@ -38,13 +41,18 @@ const HELP = `
38
41
  dql certify <file.dql> Evaluate certification rules
39
42
  dql info <file.dql> Show block metadata
40
43
  dql migrate <source> Scaffold migration from looker/tableau/dbt/metabase/raw-sql
41
- dql fmt <file.dql> Format DQL file in place
42
- dql diff <before> <after> Semantic diff between two .dql files
44
+ dql migrate format [--check] Upgrade all .dql/.dqlnb files to canonical format
45
+ dql fmt <file.dql|.dqlnb> Format DQL/notebook file in place
46
+ dql diff <path> Diff a .dql/.dqlnb file vs HEAD
47
+ dql diff <before> <after> Semantic diff between two files
43
48
  dql notebook [path] Launch the browser-first notebook for a project
44
49
  dql semantic <sub> [path] Semantic layer: list, validate, query, pull
45
50
  dql compile [path] Generate project manifest (dql-manifest.json)
46
51
  dql sync dbt [path] Detect dbt manifest changes; report DQL cache status
47
52
  dql lineage [block] [path] Answer-layer lineage analysis
53
+ dql mcp [--http] Run the DQL MCP server (stdio by default; --http = loopback)
54
+ dql app new|ls|show <name> Manage App artifacts (domain-scoped notebook + dashboard bundles)
55
+ dql schedule list|run|start|status Local scheduler for @schedule'd blocks (alerts + notifications)
48
56
  dql --version Show version
49
57
  dql --help Show this help
50
58
 
@@ -83,7 +91,7 @@ async function main() {
83
91
  console.log(HELP.trim());
84
92
  process.exit(0);
85
93
  }
86
- if (!file && command !== 'init' && command !== 'serve' && command !== 'doctor' && command !== 'notebook' && command !== 'validate' && command !== 'semantic' && command !== 'lineage' && command !== 'compile' && command !== 'sync') {
94
+ if (!file && command !== 'init' && command !== 'serve' && command !== 'doctor' && command !== 'notebook' && command !== 'validate' && command !== 'semantic' && command !== 'lineage' && command !== 'compile' && command !== 'sync' && command !== 'mcp' && command !== 'app' && command !== 'schedule') {
87
95
  console.error('Error: No file/argument specified. Run "dql --help" for usage.');
88
96
  process.exit(1);
89
97
  }
@@ -146,6 +154,15 @@ async function main() {
146
154
  case 'diff':
147
155
  await runDiff(file, rest, flags);
148
156
  break;
157
+ case 'mcp':
158
+ await runMcp(file, flags);
159
+ break;
160
+ case 'app':
161
+ await runApp(file, rest, flags);
162
+ break;
163
+ case 'schedule':
164
+ await runSchedule(file, rest, flags);
165
+ break;
149
166
  default:
150
167
  console.error(`Unknown command: ${command}. Run "dql --help" for usage.`);
151
168
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentRunner } from './types.js';
2
+ export declare const claudeAgentSdkRunner: AgentRunner;
3
+ //# sourceMappingURL=claude-agent-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-agent-sdk.d.ts","sourceRoot":"","sources":["../../src/llm/claude-agent-sdk.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,WAAW,EAA4B,MAAM,YAAY,CAAC;AAsLzF,eAAO,MAAM,oBAAoB,EAAE,WAiBlC,CAAC"}