@duckcodeailabs/dql-cli 1.0.4 → 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.
- package/dist/args.d.ts +1 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +4 -0
- package/dist/args.js.map +1 -1
- package/dist/assets/dql-notebook/assets/index-Cscl1A2H.js +628 -0
- package/dist/assets/dql-notebook/index.html +1 -1
- package/dist/commands/app.d.ts +3 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +191 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +30 -2
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/fmt.d.ts.map +1 -1
- package/dist/commands/fmt.js +26 -9
- package/dist/commands/fmt.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +7 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +16 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/schedule.d.ts +3 -0
- package/dist/commands/schedule.d.ts.map +1 -0
- package/dist/commands/schedule.js +132 -0
- package/dist/commands/schedule.js.map +1 -0
- package/dist/digest.d.ts +10 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +83 -0
- package/dist/digest.js.map +1 -0
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/claude-agent-sdk.d.ts +3 -0
- package/dist/llm/claude-agent-sdk.d.ts.map +1 -0
- package/dist/llm/claude-agent-sdk.js +174 -0
- package/dist/llm/claude-agent-sdk.js.map +1 -0
- package/dist/llm/claude-code.d.ts +8 -0
- package/dist/llm/claude-code.d.ts.map +1 -0
- package/dist/llm/claude-code.js +171 -0
- package/dist/llm/claude-code.js.map +1 -0
- package/dist/llm/index.d.ts +4 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +10 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/tools.d.ts +9 -0
- package/dist/llm/tools.d.ts.map +1 -0
- package/dist/llm/tools.js +112 -0
- package/dist/llm/tools.js.map +1 -0
- package/dist/llm/types.d.ts +64 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +2 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/local-runtime.d.ts +6 -0
- package/dist/local-runtime.d.ts.map +1 -1
- package/dist/local-runtime.js +69 -1
- package/dist/local-runtime.js.map +1 -1
- package/dist/schedule/alerts.d.ts +5 -0
- package/dist/schedule/alerts.d.ts.map +1 -0
- package/dist/schedule/alerts.js +54 -0
- package/dist/schedule/alerts.js.map +1 -0
- package/dist/schedule/discovery.d.ts +4 -0
- package/dist/schedule/discovery.d.ts.map +1 -0
- package/dist/schedule/discovery.js +36 -0
- package/dist/schedule/discovery.js.map +1 -0
- package/dist/schedule/notifiers/email.d.ts +3 -0
- package/dist/schedule/notifiers/email.d.ts.map +1 -0
- package/dist/schedule/notifiers/email.js +76 -0
- package/dist/schedule/notifiers/email.js.map +1 -0
- package/dist/schedule/notifiers/file.d.ts +3 -0
- package/dist/schedule/notifiers/file.d.ts.map +1 -0
- package/dist/schedule/notifiers/file.js +50 -0
- package/dist/schedule/notifiers/file.js.map +1 -0
- package/dist/schedule/notifiers/index.d.ts +10 -0
- package/dist/schedule/notifiers/index.d.ts.map +1 -0
- package/dist/schedule/notifiers/index.js +33 -0
- package/dist/schedule/notifiers/index.js.map +1 -0
- package/dist/schedule/notifiers/slack.d.ts +3 -0
- package/dist/schedule/notifiers/slack.d.ts.map +1 -0
- package/dist/schedule/notifiers/slack.js +58 -0
- package/dist/schedule/notifiers/slack.js.map +1 -0
- package/dist/schedule/runner.d.ts +11 -0
- package/dist/schedule/runner.d.ts.map +1 -0
- package/dist/schedule/runner.js +109 -0
- package/dist/schedule/runner.js.map +1 -0
- package/dist/schedule/runs.d.ts +5 -0
- package/dist/schedule/runs.d.ts.map +1 -0
- package/dist/schedule/runs.js +40 -0
- package/dist/schedule/runs.js.map +1 -0
- package/dist/schedule/service.d.ts +12 -0
- package/dist/schedule/service.d.ts.map +1 -0
- package/dist/schedule/service.js +49 -0
- package/dist/schedule/service.js.map +1 -0
- package/dist/schedule/types.d.ts +64 -0
- package/dist/schedule/types.d.ts.map +1 -0
- package/dist/schedule/types.js +2 -0
- package/dist/schedule/types.js.map +1 -0
- package/package.json +16 -10
- package/dist/assets/dql-notebook/assets/index-dZVjj9xj.js +0 -623
|
@@ -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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAoB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACL,WAAW,GAKZ,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAyB,EACzB,WAAmB,EACnB,GAAuB;IAEvB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;QAC5B,SAAS;QACT,sEAAsE;QACtE,uEAAuE;QACvE,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE;QAClD,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;QACpC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACzD,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,OAAO,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,WAAqB;IAClE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,OAAO,GAAmB,IAAI,GAAG,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1D,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;YAChB,IAAI,EAAE,KAAK,CAAC,QAAQ;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAgB,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,QAAgB;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,8BAA8B,QAAQ,GAAG,EAAE;YAC9D,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,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
|
|
|
@@ -47,6 +50,9 @@ const HELP = `
|
|
|
47
50
|
dql compile [path] Generate project manifest (dql-manifest.json)
|
|
48
51
|
dql sync dbt [path] Detect dbt manifest changes; report DQL cache status
|
|
49
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)
|
|
50
56
|
dql --version Show version
|
|
51
57
|
dql --help Show this help
|
|
52
58
|
|
|
@@ -85,7 +91,7 @@ async function main() {
|
|
|
85
91
|
console.log(HELP.trim());
|
|
86
92
|
process.exit(0);
|
|
87
93
|
}
|
|
88
|
-
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') {
|
|
89
95
|
console.error('Error: No file/argument specified. Run "dql --help" for usage.');
|
|
90
96
|
process.exit(1);
|
|
91
97
|
}
|
|
@@ -148,6 +154,15 @@ async function main() {
|
|
|
148
154
|
case 'diff':
|
|
149
155
|
await runDiff(file, rest, flags);
|
|
150
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;
|
|
151
166
|
default:
|
|
152
167
|
console.error(`Unknown command: ${command}. Run "dql --help" for usage.`);
|
|
153
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":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { DQLContext, findProjectRoot } from '@duckcodeailabs/dql-mcp';
|
|
5
|
+
import { buildAgentTools } from './tools.js';
|
|
6
|
+
const MODEL = 'claude-opus-4-7';
|
|
7
|
+
const MAX_TOOL_ITERATIONS = 16;
|
|
8
|
+
function loadApiKey() {
|
|
9
|
+
if (process.env.ANTHROPIC_API_KEY)
|
|
10
|
+
return process.env.ANTHROPIC_API_KEY;
|
|
11
|
+
if (process.env.DQL_LLM_KEY)
|
|
12
|
+
return process.env.DQL_LLM_KEY;
|
|
13
|
+
const credPath = join(homedir(), '.dql', 'credentials');
|
|
14
|
+
if (!existsSync(credPath))
|
|
15
|
+
return null;
|
|
16
|
+
try {
|
|
17
|
+
const content = readFileSync(credPath, 'utf-8');
|
|
18
|
+
const match = content.match(/^\s*anthropic\s*=\s*"?([^"\n]+)"?/m);
|
|
19
|
+
return match?.[1]?.trim() ?? null;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function loadAnthropic() {
|
|
26
|
+
const apiKey = loadApiKey();
|
|
27
|
+
if (!apiKey) {
|
|
28
|
+
return {
|
|
29
|
+
error: 'No Anthropic API key found. Set ANTHROPIC_API_KEY, or add `anthropic = "sk-..."` to ~/.dql/credentials.',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const mod = (await import('@anthropic-ai/sdk'));
|
|
34
|
+
const Ctor = mod.default ?? mod.Anthropic;
|
|
35
|
+
if (!Ctor)
|
|
36
|
+
return { error: '@anthropic-ai/sdk is installed but does not export a client.' };
|
|
37
|
+
return new Ctor({ apiKey });
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {
|
|
41
|
+
error: '@anthropic-ai/sdk is not installed. Run `pnpm add -w @anthropic-ai/sdk` to enable the Claude Agent SDK provider, or switch to the Claude Code provider.',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function systemPrompt(ctx, upstreamSql) {
|
|
46
|
+
const domains = Array.from(new Set(Object.values(ctx.manifest.blocks).map((b) => b.domain).filter(Boolean))).sort();
|
|
47
|
+
const metricCount = ctx.semanticLayer.listMetrics().length;
|
|
48
|
+
const dimensionCount = ctx.semanticLayer.listDimensions().length;
|
|
49
|
+
return [
|
|
50
|
+
'You are the DQL authoring agent. Your job is to help the analyst turn a business question into a certified, governed DQL block.',
|
|
51
|
+
'',
|
|
52
|
+
'Always ground answers in existing blocks, semantic metrics, and dimensions — do not invent SQL from scratch without checking what already exists. Use the provided tools:',
|
|
53
|
+
'- search_blocks: find existing blocks before writing new ones.',
|
|
54
|
+
'- get_block: inspect a block\'s SQL, dependencies, and lineage.',
|
|
55
|
+
'- list_metrics / list_dimensions: enumerate the semantic layer.',
|
|
56
|
+
'- lineage_impact: understand upstream/downstream blast radius.',
|
|
57
|
+
'- certify: check governance rules against a proposed block.',
|
|
58
|
+
'- suggest_block: END of turn — write a reviewable draft to blocks/_drafts/ once the user is ready.',
|
|
59
|
+
'',
|
|
60
|
+
'When the conversation has produced a concrete block design, call `suggest_block` with all required fields (name, domain, owner, description, sql). The response includes a governance gate — if it fails, refine and retry.',
|
|
61
|
+
'',
|
|
62
|
+
`Project context: ${Object.keys(ctx.manifest.blocks).length} blocks, ${metricCount} metrics, ${dimensionCount} dimensions. Domains: ${domains.join(', ') || '(none yet)'}.`,
|
|
63
|
+
upstreamSql ? `The user is authoring a cell with this upstream SQL:\n\`\`\`sql\n${upstreamSql}\n\`\`\`` : '',
|
|
64
|
+
]
|
|
65
|
+
.filter(Boolean)
|
|
66
|
+
.join('\n');
|
|
67
|
+
}
|
|
68
|
+
async function runToolLoop(client, tools, system, initialMessages, emit, signal) {
|
|
69
|
+
const messages = [...initialMessages];
|
|
70
|
+
const toolDefs = tools.map((t) => ({ name: t.name, description: t.description, input_schema: t.inputSchema }));
|
|
71
|
+
for (let iteration = 0; iteration < MAX_TOOL_ITERATIONS; iteration++) {
|
|
72
|
+
if (signal.aborted) {
|
|
73
|
+
emit({ kind: 'error', message: 'Aborted by user.' });
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const response = await client.messages.create({
|
|
77
|
+
model: MODEL,
|
|
78
|
+
max_tokens: 8192,
|
|
79
|
+
thinking: { type: 'adaptive', display: 'summarized' },
|
|
80
|
+
output_config: { effort: 'xhigh' },
|
|
81
|
+
system,
|
|
82
|
+
tools: toolDefs,
|
|
83
|
+
messages,
|
|
84
|
+
});
|
|
85
|
+
const toolUses = [];
|
|
86
|
+
for (const block of response.content) {
|
|
87
|
+
if (block.type === 'thinking')
|
|
88
|
+
emit({ kind: 'thinking', text: block.thinking });
|
|
89
|
+
else if (block.type === 'text')
|
|
90
|
+
emit({ kind: 'text', text: block.text });
|
|
91
|
+
else if (block.type === 'tool_use') {
|
|
92
|
+
const tu = block;
|
|
93
|
+
toolUses.push(tu);
|
|
94
|
+
emit({ kind: 'tool_call', id: tu.id, name: tu.name, input: tu.input });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
messages.push({ role: 'assistant', content: response.content });
|
|
98
|
+
if (response.stop_reason !== 'tool_use' || toolUses.length === 0) {
|
|
99
|
+
emit({ kind: 'done', stopReason: response.stop_reason ?? undefined });
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const results = [];
|
|
103
|
+
for (const tu of toolUses) {
|
|
104
|
+
const tool = tools.find((t) => t.name === tu.name);
|
|
105
|
+
let output;
|
|
106
|
+
let isError = false;
|
|
107
|
+
if (!tool) {
|
|
108
|
+
output = { error: `Unknown tool: ${tu.name}` };
|
|
109
|
+
isError = true;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
try {
|
|
113
|
+
output = await tool.run(tu.input);
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
output = { error: err instanceof Error ? err.message : String(err) };
|
|
117
|
+
isError = true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
emit({ kind: 'tool_result', id: tu.id, output, isError });
|
|
121
|
+
if (tu.name === 'suggest_block')
|
|
122
|
+
emitProposal(tu.input, output, emit);
|
|
123
|
+
results.push({ type: 'tool_result', tool_use_id: tu.id, content: JSON.stringify(output), is_error: isError });
|
|
124
|
+
}
|
|
125
|
+
messages.push({ role: 'user', content: results });
|
|
126
|
+
}
|
|
127
|
+
emit({ kind: 'error', message: `Tool loop exceeded ${MAX_TOOL_ITERATIONS} iterations.` });
|
|
128
|
+
}
|
|
129
|
+
function emitProposal(input, output, emit) {
|
|
130
|
+
if (!input || typeof input !== 'object')
|
|
131
|
+
return;
|
|
132
|
+
const p = input;
|
|
133
|
+
if (!p.name || !p.sql)
|
|
134
|
+
return;
|
|
135
|
+
const proposal = {
|
|
136
|
+
name: String(p.name),
|
|
137
|
+
domain: String(p.domain ?? ''),
|
|
138
|
+
owner: String(p.owner ?? ''),
|
|
139
|
+
description: String(p.description ?? ''),
|
|
140
|
+
sql: String(p.sql),
|
|
141
|
+
tags: Array.isArray(p.tags) ? p.tags.map(String) : undefined,
|
|
142
|
+
chartType: typeof p.chartType === 'string' ? p.chartType : undefined,
|
|
143
|
+
};
|
|
144
|
+
const out = (output ?? {});
|
|
145
|
+
emit({
|
|
146
|
+
kind: 'proposal',
|
|
147
|
+
proposal,
|
|
148
|
+
governance: {
|
|
149
|
+
certified: Boolean(out.certified),
|
|
150
|
+
errors: Array.isArray(out.errors) ? out.errors.map(String) : [],
|
|
151
|
+
warnings: Array.isArray(out.warnings) ? out.warnings.map(String) : [],
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
export const claudeAgentSdkRunner = {
|
|
156
|
+
async run(req, emit, signal) {
|
|
157
|
+
const client = await loadAnthropic();
|
|
158
|
+
if ('error' in client) {
|
|
159
|
+
emit({ kind: 'error', message: client.error });
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const ctx = new DQLContext({ projectRoot: findProjectRoot(req.projectRoot) });
|
|
163
|
+
const tools = buildAgentTools(ctx);
|
|
164
|
+
const system = systemPrompt(ctx, req.upstream?.sql);
|
|
165
|
+
const messages = req.messages.map((m) => ({ role: m.role, content: m.content }));
|
|
166
|
+
try {
|
|
167
|
+
await runToolLoop(client, tools, system, messages, emit, signal);
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
emit({ kind: 'error', message: err instanceof Error ? err.message : String(err) });
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=claude-agent-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent-sdk.js","sourceRoot":"","sources":["../../src/llm/claude-agent-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentRunner } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* `claude-code` provider: spawns the `claude` CLI in headless print mode and
|
|
4
|
+
* connects it to DQL's stdio MCP server via `--mcp-config`. Requires the user
|
|
5
|
+
* to have `claude` on PATH — no API key needed (Claude Code uses its own auth).
|
|
6
|
+
*/
|
|
7
|
+
export declare const claudeCodeRunner: AgentRunner;
|
|
8
|
+
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/llm/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,WAAW,EAA4B,MAAM,YAAY,CAAC;AAEzF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,WA8E9B,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
/**
|
|
6
|
+
* `claude-code` provider: spawns the `claude` CLI in headless print mode and
|
|
7
|
+
* connects it to DQL's stdio MCP server via `--mcp-config`. Requires the user
|
|
8
|
+
* to have `claude` on PATH — no API key needed (Claude Code uses its own auth).
|
|
9
|
+
*/
|
|
10
|
+
export const claudeCodeRunner = {
|
|
11
|
+
async run(req, emit, signal) {
|
|
12
|
+
const tempDir = mkdtempSync(join(tmpdir(), 'dql-claude-'));
|
|
13
|
+
const mcpConfigPath = join(tempDir, 'mcp.json');
|
|
14
|
+
writeFileSync(mcpConfigPath, JSON.stringify({
|
|
15
|
+
mcpServers: {
|
|
16
|
+
dql: { command: 'dql', args: ['mcp'], cwd: req.projectRoot },
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
const prompt = buildPrompt(req);
|
|
20
|
+
const child = spawn('claude', [
|
|
21
|
+
'-p',
|
|
22
|
+
prompt,
|
|
23
|
+
'--mcp-config',
|
|
24
|
+
mcpConfigPath,
|
|
25
|
+
'--output-format',
|
|
26
|
+
'stream-json',
|
|
27
|
+
'--verbose',
|
|
28
|
+
'--allowedTools',
|
|
29
|
+
'mcp__dql__search_blocks mcp__dql__get_block mcp__dql__list_metrics mcp__dql__list_dimensions mcp__dql__lineage_impact mcp__dql__certify mcp__dql__suggest_block',
|
|
30
|
+
], { cwd: req.projectRoot, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
31
|
+
const cleanup = () => {
|
|
32
|
+
try {
|
|
33
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
34
|
+
}
|
|
35
|
+
catch { /* noop */ }
|
|
36
|
+
};
|
|
37
|
+
signal.addEventListener('abort', () => child.kill('SIGTERM'));
|
|
38
|
+
const stderr = [];
|
|
39
|
+
child.stderr.on('data', (chunk) => stderr.push(chunk.toString()));
|
|
40
|
+
const toolNameById = new Map();
|
|
41
|
+
let buffer = '';
|
|
42
|
+
child.stdout.on('data', (chunk) => {
|
|
43
|
+
buffer += chunk.toString();
|
|
44
|
+
let newlineIdx;
|
|
45
|
+
while ((newlineIdx = buffer.indexOf('\n')) !== -1) {
|
|
46
|
+
const line = buffer.slice(0, newlineIdx).trim();
|
|
47
|
+
buffer = buffer.slice(newlineIdx + 1);
|
|
48
|
+
if (!line)
|
|
49
|
+
continue;
|
|
50
|
+
try {
|
|
51
|
+
const event = JSON.parse(line);
|
|
52
|
+
mapClaudeCodeEvent(event, emit, toolNameById);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
/* skip non-JSON lines */
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
child.on('error', (err) => {
|
|
61
|
+
emit({
|
|
62
|
+
kind: 'error',
|
|
63
|
+
message: `Failed to spawn 'claude': ${err.message}. Install Claude Code (https://claude.com/claude-code) or switch to the Claude Agent SDK provider.`,
|
|
64
|
+
});
|
|
65
|
+
cleanup();
|
|
66
|
+
resolve();
|
|
67
|
+
});
|
|
68
|
+
child.on('close', (code) => {
|
|
69
|
+
if (code !== 0) {
|
|
70
|
+
const detail = stderr.join('').trim();
|
|
71
|
+
emit({ kind: 'error', message: `claude exited with code ${code}${detail ? `: ${detail}` : ''}` });
|
|
72
|
+
}
|
|
73
|
+
emit({ kind: 'done' });
|
|
74
|
+
cleanup();
|
|
75
|
+
resolve();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
function buildPrompt(req) {
|
|
81
|
+
const history = req.messages.map((m) => `${m.role === 'user' ? 'User' : 'Assistant'}: ${m.content}`).join('\n\n');
|
|
82
|
+
const upstream = req.upstream?.sql
|
|
83
|
+
? `\n\nThe user is authoring a notebook cell with this upstream SQL:\n\`\`\`sql\n${req.upstream.sql}\n\`\`\`\n`
|
|
84
|
+
: '';
|
|
85
|
+
return [
|
|
86
|
+
'You are the DQL authoring agent. Ground every answer in existing DQL blocks, metrics, and dimensions. Use the mcp__dql__* tools to search, inspect, and ultimately propose a new block.',
|
|
87
|
+
'',
|
|
88
|
+
'When the user is ready for a concrete block, call mcp__dql__suggest_block with name, domain, owner, description, and sql. The response returns governance-gate results.',
|
|
89
|
+
upstream,
|
|
90
|
+
'',
|
|
91
|
+
history,
|
|
92
|
+
].join('\n');
|
|
93
|
+
}
|
|
94
|
+
function mapClaudeCodeEvent(event, emit, toolNameById) {
|
|
95
|
+
const type = event.type;
|
|
96
|
+
if (type === 'assistant') {
|
|
97
|
+
const message = event.message;
|
|
98
|
+
for (const block of message?.content ?? []) {
|
|
99
|
+
const b = block;
|
|
100
|
+
if (b.type === 'text' && b.text)
|
|
101
|
+
emit({ kind: 'text', text: b.text });
|
|
102
|
+
else if (b.type === 'thinking' && b.thinking)
|
|
103
|
+
emit({ kind: 'thinking', text: b.thinking });
|
|
104
|
+
else if (b.type === 'tool_use' && b.id && b.name) {
|
|
105
|
+
const short = stripMcpPrefix(b.name);
|
|
106
|
+
toolNameById.set(b.id, short);
|
|
107
|
+
emit({ kind: 'tool_call', id: b.id, name: short, input: b.input ?? {} });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (type === 'user') {
|
|
113
|
+
const message = event.message;
|
|
114
|
+
for (const block of message?.content ?? []) {
|
|
115
|
+
const b = block;
|
|
116
|
+
if (b.type === 'tool_result' && b.tool_use_id) {
|
|
117
|
+
const output = parseToolOutput(b.content);
|
|
118
|
+
emit({ kind: 'tool_result', id: b.tool_use_id, output, isError: Boolean(b.is_error) });
|
|
119
|
+
if (toolNameById.get(b.tool_use_id) === 'suggest_block')
|
|
120
|
+
emitProposalFromResult(output, emit);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function stripMcpPrefix(name) {
|
|
126
|
+
return name.replace(/^mcp__dql__/, '');
|
|
127
|
+
}
|
|
128
|
+
function parseToolOutput(content) {
|
|
129
|
+
if (typeof content === 'string') {
|
|
130
|
+
try {
|
|
131
|
+
return JSON.parse(content);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return content;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (Array.isArray(content)) {
|
|
138
|
+
const text = content.map((c) => c.text ?? '').join('');
|
|
139
|
+
try {
|
|
140
|
+
return JSON.parse(text);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return text;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return content;
|
|
147
|
+
}
|
|
148
|
+
function emitProposalFromResult(output, emit) {
|
|
149
|
+
if (!output || typeof output !== 'object')
|
|
150
|
+
return;
|
|
151
|
+
const o = output;
|
|
152
|
+
if (!o.name || !o.path)
|
|
153
|
+
return;
|
|
154
|
+
const proposal = {
|
|
155
|
+
name: String(o.name),
|
|
156
|
+
domain: '',
|
|
157
|
+
owner: '',
|
|
158
|
+
description: '',
|
|
159
|
+
sql: '',
|
|
160
|
+
};
|
|
161
|
+
emit({
|
|
162
|
+
kind: 'proposal',
|
|
163
|
+
proposal,
|
|
164
|
+
governance: {
|
|
165
|
+
certified: Boolean(o.certified),
|
|
166
|
+
errors: Array.isArray(o.errors) ? o.errors.map(String) : [],
|
|
167
|
+
warnings: Array.isArray(o.warnings) ? o.warnings.map(String) : [],
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/llm/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,KAAK,CAAC,GAAG,CAAC,GAAoB,EAAE,IAAI,EAAE,MAAM;QAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAChD,aAAa,CACX,aAAa,EACb,IAAI,CAAC,SAAS,CAAC;YACb,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE;aAC7D;SACF,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CACjB,QAAQ,EACR;YACE,IAAI;YACJ,MAAM;YACN,cAAc;YACd,aAAa;YACb,iBAAiB;YACjB,aAAa;YACb,WAAW;YACX,gBAAgB;YAChB,iKAAiK;SAClK,EACD,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAC5D,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC;gBAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjF,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC/C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,UAAkB,CAAC;YACvB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;oBAC1D,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,IAAI,CAAC;oBACH,IAAI,EAAE,OAAO;oBACb,OAAO,EACL,6BAA6B,GAAG,CAAC,OAAO,oGAAoG;iBAC/I,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBACtC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpG,CAAC;gBACD,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,SAAS,WAAW,CAAC,GAAoB;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClH,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG;QAChC,CAAC,CAAC,iFAAiF,GAAG,CAAC,QAAQ,CAAC,GAAG,YAAY;QAC/G,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,yLAAyL;QACzL,EAAE;QACF,yKAAyK;QACzK,QAAQ;QACR,EAAE;QACF,OAAO;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CACzB,KAA8B,EAC9B,IAA+B,EAC/B,YAAiC;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAA8C,CAAC;QACrE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,KAAyG,CAAC;YACpH,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI;gBAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBACjE,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ;gBAAE,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACtF,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,OAA8C,CAAC;QACrE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,KAAuF,CAAC;YAClG,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACvF,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,eAAe;oBAAE,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,OAAO,CAAC;QAAC,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAuB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IACzD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAe,EAAE,IAA+B;IAC9E,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO;IAClD,MAAM,CAAC,GAAG,MAAuG,CAAC;IAClH,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,OAAO;IAC/B,MAAM,QAAQ,GAAkB;QAC9B,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpB,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,EAAE;KACR,CAAC;IACF,IAAI,CAAC;QACH,IAAI,EAAE,UAAU;QAChB,QAAQ;QACR,UAAU,EAAE;YACV,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/B,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3D,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;SAClE;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentRunner, ProviderId } from './types.js';
|
|
2
|
+
export { type AgentRunRequest, type AgentRunner, type AgentTurn, type BlockProposal, type ChatTurn, type ProviderId } from './types.js';
|
|
3
|
+
export declare function getRunner(provider: ProviderId): AgentRunner | null;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAOxI,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAElE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { claudeAgentSdkRunner } from './claude-agent-sdk.js';
|
|
2
|
+
import { claudeCodeRunner } from './claude-code.js';
|
|
3
|
+
const RUNNERS = {
|
|
4
|
+
'claude-agent-sdk': claudeAgentSdkRunner,
|
|
5
|
+
'claude-code': claudeCodeRunner,
|
|
6
|
+
};
|
|
7
|
+
export function getRunner(provider) {
|
|
8
|
+
return RUNNERS[provider] ?? null;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKpD,MAAM,OAAO,GAAoC;IAC/C,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,gBAAgB;CAChC,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,QAAoB;IAC5C,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DQLContext } from '@duckcodeailabs/dql-mcp';
|
|
2
|
+
export interface AgentTool {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: Record<string, unknown>;
|
|
6
|
+
run(args: unknown): Promise<unknown>;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildAgentTools(ctx: DQLContext): AgentTool[];
|
|
9
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/llm/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAQX,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAuED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,EAAE,CA+C5D"}
|