@duckcodeailabs/dql-agent 1.6.8 → 1.6.10
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/answer-loop.d.ts +12 -0
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +1020 -53
- package/dist/answer-loop.js.map +1 -1
- package/dist/app-builder.d.ts +27 -0
- package/dist/app-builder.d.ts.map +1 -1
- package/dist/app-builder.js +210 -43
- package/dist/app-builder.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts +52 -0
- package/dist/metadata/analysis-planner.d.ts.map +1 -0
- package/dist/metadata/analysis-planner.js +632 -0
- package/dist/metadata/analysis-planner.js.map +1 -0
- package/dist/metadata/catalog.d.ts +32 -0
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +705 -22
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/sql-context-validation.d.ts.map +1 -1
- package/dist/metadata/sql-context-validation.js +41 -13
- package/dist/metadata/sql-context-validation.js.map +1 -1
- package/dist/metadata/sql-shape.d.ts +13 -0
- package/dist/metadata/sql-shape.d.ts.map +1 -0
- package/dist/metadata/sql-shape.js +92 -0
- package/dist/metadata/sql-shape.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface SimpleSelectShape {
|
|
2
|
+
selectExpressions: string[];
|
|
3
|
+
relation: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SqlShapeColumn {
|
|
6
|
+
name: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function extractSimpleSelectShape(sql: string): SimpleSelectShape | undefined;
|
|
10
|
+
export declare function sourceSqlShapeColumns(sql: string): SqlShapeColumn[];
|
|
11
|
+
export declare function selectExpressionOutputName(expression: string): string | undefined;
|
|
12
|
+
export declare function compactSqlSnippet(sql: string, maxLength: number): string;
|
|
13
|
+
//# sourceMappingURL=sql-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-shape.d.ts","sourceRoot":"","sources":["../../src/metadata/sql-shape.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAUnF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAiBnE;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMjF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export function extractSimpleSelectShape(sql) {
|
|
2
|
+
const cleaned = stripSqlComments(sql).replace(/;\s*$/, '').trim();
|
|
3
|
+
const match = cleaned.match(/\bselect\b([\s\S]*?)\bfrom\s+((?:"[^"]+"|`[^`]+`|[\w.-]+)(?:\s*\.\s*(?:"[^"]+"|`[^`]+`|[\w-]+))*)/i);
|
|
4
|
+
if (!match)
|
|
5
|
+
return undefined;
|
|
6
|
+
const selectExpressions = splitSqlSelectList(match[1] ?? '')
|
|
7
|
+
.map((expression) => expression.trim())
|
|
8
|
+
.filter((expression) => expression.length > 0 && expression !== '*');
|
|
9
|
+
const relation = (match[2] ?? '').trim();
|
|
10
|
+
if (selectExpressions.length === 0 || !relation)
|
|
11
|
+
return undefined;
|
|
12
|
+
return { selectExpressions, relation };
|
|
13
|
+
}
|
|
14
|
+
export function sourceSqlShapeColumns(sql) {
|
|
15
|
+
const shape = extractSimpleSelectShape(sql);
|
|
16
|
+
if (!shape)
|
|
17
|
+
return [];
|
|
18
|
+
const seen = new Set();
|
|
19
|
+
const columns = [];
|
|
20
|
+
for (const expression of shape.selectExpressions) {
|
|
21
|
+
const name = selectExpressionOutputName(expression);
|
|
22
|
+
if (!name)
|
|
23
|
+
continue;
|
|
24
|
+
const key = name.toLowerCase();
|
|
25
|
+
if (seen.has(key))
|
|
26
|
+
continue;
|
|
27
|
+
seen.add(key);
|
|
28
|
+
columns.push({
|
|
29
|
+
name,
|
|
30
|
+
description: 'Projected by certified source SQL shape.',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return columns;
|
|
34
|
+
}
|
|
35
|
+
export function selectExpressionOutputName(expression) {
|
|
36
|
+
const alias = expression.match(/\bas\s+(["`]?\w+["`]?)\s*$/i)?.[1]
|
|
37
|
+
?? expression.match(/\s+(["`]?\w+["`]?)\s*$/i)?.[1];
|
|
38
|
+
if (alias && !/\)|\+|-|\*|\//.test(alias))
|
|
39
|
+
return cleanSqlIdentifier(alias);
|
|
40
|
+
const simple = expression.match(/^(?:(["`]?\w+["`]?)\.)?(["`]?\w+["`]?)$/);
|
|
41
|
+
return simple ? cleanSqlIdentifier(simple[2] ?? '') : undefined;
|
|
42
|
+
}
|
|
43
|
+
export function compactSqlSnippet(sql, maxLength) {
|
|
44
|
+
const compact = stripSqlComments(sql).replace(/\s+/g, ' ').trim();
|
|
45
|
+
if (compact.length <= maxLength)
|
|
46
|
+
return compact;
|
|
47
|
+
return `${compact.slice(0, Math.max(0, maxLength - 3)).trim()}...`;
|
|
48
|
+
}
|
|
49
|
+
function stripSqlComments(sql) {
|
|
50
|
+
return sql
|
|
51
|
+
.replace(/\/\*[\s\S]*?\*\//g, ' ')
|
|
52
|
+
.replace(/--.*$/gm, ' ')
|
|
53
|
+
.replace(/\s+/g, ' ')
|
|
54
|
+
.trim();
|
|
55
|
+
}
|
|
56
|
+
function splitSqlSelectList(selectList) {
|
|
57
|
+
const parts = [];
|
|
58
|
+
let current = '';
|
|
59
|
+
let depth = 0;
|
|
60
|
+
let quote = null;
|
|
61
|
+
for (let index = 0; index < selectList.length; index += 1) {
|
|
62
|
+
const char = selectList[index];
|
|
63
|
+
if (quote) {
|
|
64
|
+
current += char;
|
|
65
|
+
if (char === quote)
|
|
66
|
+
quote = null;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (char === '"' || char === "'" || char === '`') {
|
|
70
|
+
quote = char;
|
|
71
|
+
current += char;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (char === '(')
|
|
75
|
+
depth += 1;
|
|
76
|
+
if (char === ')' && depth > 0)
|
|
77
|
+
depth -= 1;
|
|
78
|
+
if (char === ',' && depth === 0) {
|
|
79
|
+
parts.push(current);
|
|
80
|
+
current = '';
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
current += char;
|
|
84
|
+
}
|
|
85
|
+
if (current.trim())
|
|
86
|
+
parts.push(current);
|
|
87
|
+
return parts;
|
|
88
|
+
}
|
|
89
|
+
function cleanSqlIdentifier(identifier) {
|
|
90
|
+
return identifier.replace(/^["`]|["`]$/g, '').trim();
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sql-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-shape.js","sourceRoot":"","sources":["../../src/metadata/sql-shape.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duckcodeailabs/dql-agent",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.10",
|
|
4
4
|
"description": "DQL agent: knowledge graph, Skills, block-first answer loop, and pluggable LLM providers (Claude / OpenAI / Gemini / Ollama)",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@duckcodeailabs/dql-core": "^1.6.
|
|
28
|
-
"@duckcodeailabs/dql-governance": "^1.6.
|
|
29
|
-
"@duckcodeailabs/dql-project": "^1.6.
|
|
27
|
+
"@duckcodeailabs/dql-core": "^1.6.10",
|
|
28
|
+
"@duckcodeailabs/dql-governance": "^1.6.10",
|
|
29
|
+
"@duckcodeailabs/dql-project": "^1.6.10",
|
|
30
30
|
"better-sqlite3": "^11.7.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|