@duckcodeailabs/dql-agent 1.6.30 → 1.6.32
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/agent-run-engine.d.ts +52 -6
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +159 -79
- package/dist/agent-run-engine.js.map +1 -1
- package/dist/agent-run-gates.d.ts.map +1 -1
- package/dist/agent-run-gates.js +72 -5
- package/dist/agent-run-gates.js.map +1 -1
- package/dist/agent-run-planner.d.ts.map +1 -1
- package/dist/agent-run-planner.js +13 -0
- package/dist/agent-run-planner.js.map +1 -1
- package/dist/answer-loop.d.ts +117 -8
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +1690 -1302
- package/dist/answer-loop.js.map +1 -1
- package/dist/answer-shape.d.ts +16 -0
- package/dist/answer-shape.d.ts.map +1 -0
- package/dist/answer-shape.js +85 -0
- package/dist/answer-shape.js.map +1 -0
- package/dist/cascade/budgets.d.ts +101 -0
- package/dist/cascade/budgets.d.ts.map +1 -0
- package/dist/cascade/budgets.js +184 -0
- package/dist/cascade/budgets.js.map +1 -0
- package/dist/cascade/cascade.d.ts +86 -0
- package/dist/cascade/cascade.d.ts.map +1 -0
- package/dist/cascade/cascade.js +115 -0
- package/dist/cascade/cascade.js.map +1 -0
- package/dist/cascade/route-policy.d.ts +14 -0
- package/dist/cascade/route-policy.d.ts.map +1 -0
- package/dist/cascade/route-policy.js +48 -0
- package/dist/cascade/route-policy.js.map +1 -0
- package/dist/cascade/triage.d.ts +20 -0
- package/dist/cascade/triage.d.ts.map +1 -0
- package/dist/cascade/triage.js +25 -0
- package/dist/cascade/triage.js.map +1 -0
- package/dist/conversation/rolling-summary.d.ts +13 -0
- package/dist/conversation/rolling-summary.d.ts.map +1 -0
- package/dist/conversation/rolling-summary.js +43 -0
- package/dist/conversation/rolling-summary.js.map +1 -0
- package/dist/conversation/session-store.d.ts +110 -0
- package/dist/conversation/session-store.d.ts.map +1 -0
- package/dist/conversation/session-store.js +387 -0
- package/dist/conversation/session-store.js.map +1 -0
- package/dist/conversation/snapshot.d.ts +59 -0
- package/dist/conversation/snapshot.d.ts.map +1 -0
- package/dist/conversation/snapshot.js +153 -0
- package/dist/conversation/snapshot.js.map +1 -0
- package/dist/conversation/working-state.d.ts +49 -0
- package/dist/conversation/working-state.d.ts.map +1 -0
- package/dist/conversation/working-state.js +249 -0
- package/dist/conversation/working-state.js.map +1 -0
- package/dist/embeddings/provider.d.ts +62 -0
- package/dist/embeddings/provider.d.ts.map +1 -1
- package/dist/embeddings/provider.js +98 -0
- package/dist/embeddings/provider.js.map +1 -1
- package/dist/grounding/context-ledger.d.ts +30 -0
- package/dist/grounding/context-ledger.d.ts.map +1 -0
- package/dist/grounding/context-ledger.js +54 -0
- package/dist/grounding/context-ledger.js.map +1 -0
- package/dist/grounding/regrounding.d.ts +24 -0
- package/dist/grounding/regrounding.d.ts.map +1 -0
- package/dist/grounding/regrounding.js +219 -0
- package/dist/grounding/regrounding.js.map +1 -0
- package/dist/grounding/value-index.d.ts +32 -0
- package/dist/grounding/value-index.d.ts.map +1 -0
- package/dist/grounding/value-index.js +67 -0
- package/dist/grounding/value-index.js.map +1 -0
- package/dist/index.d.ts +47 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +104 -13
- package/dist/index.js.map +1 -1
- package/dist/intent-controller.d.ts +7 -0
- package/dist/intent-controller.d.ts.map +1 -1
- package/dist/intent-controller.js +22 -1
- package/dist/intent-controller.js.map +1 -1
- package/dist/kg/build.d.ts.map +1 -1
- package/dist/kg/build.js +44 -17
- package/dist/kg/build.js.map +1 -1
- package/dist/kg/sqlite-fts.d.ts +3 -1
- package/dist/kg/sqlite-fts.d.ts.map +1 -1
- package/dist/kg/sqlite-fts.js +16 -2
- package/dist/kg/sqlite-fts.js.map +1 -1
- package/dist/kg/types.d.ts +23 -1
- package/dist/kg/types.d.ts.map +1 -1
- package/dist/memory/fts-query.d.ts +7 -0
- package/dist/memory/fts-query.d.ts.map +1 -0
- package/dist/memory/fts-query.js +36 -0
- package/dist/memory/fts-query.js.map +1 -0
- package/dist/memory/sqlite-memory.d.ts.map +1 -1
- package/dist/memory/sqlite-memory.js +1 -30
- package/dist/memory/sqlite-memory.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts +23 -0
- package/dist/metadata/analysis-planner.d.ts.map +1 -1
- package/dist/metadata/analysis-planner.js +432 -2
- package/dist/metadata/analysis-planner.js.map +1 -1
- package/dist/metadata/block-fit.d.ts +24 -0
- package/dist/metadata/block-fit.d.ts.map +1 -0
- package/dist/metadata/block-fit.js +373 -0
- package/dist/metadata/block-fit.js.map +1 -0
- package/dist/metadata/catalog.d.ts +72 -3
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +1452 -72
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/drafts.d.ts +25 -0
- package/dist/metadata/drafts.d.ts.map +1 -1
- package/dist/metadata/drafts.js +112 -2
- package/dist/metadata/drafts.js.map +1 -1
- package/dist/metadata/metric-match.d.ts +55 -6
- package/dist/metadata/metric-match.d.ts.map +1 -1
- package/dist/metadata/metric-match.js +158 -13
- package/dist/metadata/metric-match.js.map +1 -1
- package/dist/metadata/sql-context-validation.d.ts +13 -1
- package/dist/metadata/sql-context-validation.d.ts.map +1 -1
- package/dist/metadata/sql-context-validation.js +172 -19
- package/dist/metadata/sql-context-validation.js.map +1 -1
- package/dist/metadata/sql-retrieval.d.ts +3 -2
- package/dist/metadata/sql-retrieval.d.ts.map +1 -1
- package/dist/metadata/sql-retrieval.js +6 -4
- package/dist/metadata/sql-retrieval.js.map +1 -1
- package/dist/providers/claude.d.ts +2 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +151 -28
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +20 -0
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +156 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/reasoning-effort.d.ts +46 -0
- package/dist/providers/reasoning-effort.d.ts.map +1 -0
- package/dist/providers/reasoning-effort.js +81 -0
- package/dist/providers/reasoning-effort.js.map +1 -0
- package/dist/providers/tool-output.d.ts +2 -0
- package/dist/providers/tool-output.d.ts.map +1 -0
- package/dist/providers/tool-output.js +22 -0
- package/dist/providers/tool-output.js.map +1 -0
- package/dist/providers/types.d.ts +29 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/semantic-bridge/compose.d.ts +89 -0
- package/dist/semantic-bridge/compose.d.ts.map +1 -0
- package/dist/semantic-bridge/compose.js +528 -0
- package/dist/semantic-bridge/compose.js.map +1 -0
- package/dist/semantic-bridge/member-select.d.ts +23 -0
- package/dist/semantic-bridge/member-select.d.ts.map +1 -0
- package/dist/semantic-bridge/member-select.js +106 -0
- package/dist/semantic-bridge/member-select.js.map +1 -0
- package/dist/skills/defaults.d.ts.map +1 -1
- package/dist/skills/defaults.js +5 -0
- package/dist/skills/defaults.js.map +1 -1
- package/dist/synthesize.d.ts +26 -0
- package/dist/synthesize.d.ts.map +1 -1
- package/dist/synthesize.js +72 -3
- package/dist/synthesize.js.map +1 -1
- package/dist/tools/registry.d.ts +15 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +692 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/trust/stamp.d.ts +26 -0
- package/dist/trust/stamp.d.ts.map +1 -0
- package/dist/trust/stamp.js +33 -0
- package/dist/trust/stamp.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export const REASONING_EFFORTS = ['low', 'medium', 'high'];
|
|
2
|
+
/** Narrowing type-guard for untrusted input (settings JSON, env vars, request bodies). */
|
|
3
|
+
export function isReasoningEffort(value) {
|
|
4
|
+
return value === 'low' || value === 'medium' || value === 'high';
|
|
5
|
+
}
|
|
6
|
+
/** Coerce untrusted input to a valid effort, or `undefined` when unset/invalid. */
|
|
7
|
+
export function coerceReasoningEffort(value) {
|
|
8
|
+
if (value == null || value === '')
|
|
9
|
+
return undefined;
|
|
10
|
+
const normalized = String(value).trim().toLowerCase();
|
|
11
|
+
return isReasoningEffort(normalized) ? normalized : undefined;
|
|
12
|
+
}
|
|
13
|
+
const RANK = { low: 0, medium: 1, high: 2 };
|
|
14
|
+
/**
|
|
15
|
+
* Clamp a desired effort to a ceiling. The user's global Settings choice acts as
|
|
16
|
+
* the ceiling; the engine's per-route effort is the desired value. So "Low"
|
|
17
|
+
* globally is always honored, while "High" lets the engine pick per task.
|
|
18
|
+
*/
|
|
19
|
+
export function clampReasoningEffort(desired, ceiling) {
|
|
20
|
+
return RANK[desired] <= RANK[ceiling] ? desired : ceiling;
|
|
21
|
+
}
|
|
22
|
+
/** Bump one level (a failed cheap pass earns more reasoning on the repair). Saturates at `high`. */
|
|
23
|
+
export function bumpReasoningEffort(effort) {
|
|
24
|
+
return effort === 'low' ? 'medium' : 'high';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether a provider+model actually accepts a reasoning parameter. Gating here
|
|
28
|
+
* keeps us from sending an unsupported field to a model that would reject the
|
|
29
|
+
* request (e.g. `gpt-4.1-mini`, older Claude, plain Gemini Flash).
|
|
30
|
+
*/
|
|
31
|
+
export function supportsReasoningEffort(provider, model) {
|
|
32
|
+
const m = (model ?? '').toLowerCase();
|
|
33
|
+
switch (provider) {
|
|
34
|
+
case 'claude':
|
|
35
|
+
// `output_config.effort` is supported on Opus 4.5+, Sonnet 4.6+, Sonnet 5+,
|
|
36
|
+
// and Fable 5+ (and explicit `:thinking` virtual ids). It is REJECTED on
|
|
37
|
+
// Sonnet 4.5 and Haiku 4.5, so those must not match — a false positive here
|
|
38
|
+
// 400s the request. Kept intentionally conservative; a defensive retry in
|
|
39
|
+
// ClaudeProvider strips the field if a model/gateway still rejects it.
|
|
40
|
+
if (m.includes(':thinking'))
|
|
41
|
+
return true;
|
|
42
|
+
if (/opus-4-([5-9]|\d\d)/.test(m) || /opus-[5-9]/.test(m))
|
|
43
|
+
return true;
|
|
44
|
+
if (/sonnet-4-([6-9]|\d\d)/.test(m) || /sonnet-[5-9]/.test(m))
|
|
45
|
+
return true;
|
|
46
|
+
if (/fable-[5-9]/.test(m))
|
|
47
|
+
return true;
|
|
48
|
+
return false;
|
|
49
|
+
case 'openai':
|
|
50
|
+
// o-series (o1, o3, o4-mini, …) and the gpt-5 family take reasoning_effort.
|
|
51
|
+
// Allow a leading provider namespace (e.g. `openai/o3-mini`).
|
|
52
|
+
return /(^|\/)o\d/.test(m) || m.includes('gpt-5') || m.includes('gpt5');
|
|
53
|
+
case 'gemini':
|
|
54
|
+
return geminiReasoningStyle(model) !== null;
|
|
55
|
+
default:
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function geminiReasoningStyle(model) {
|
|
60
|
+
const m = (model ?? '').toLowerCase();
|
|
61
|
+
if (m.includes('gemini-3'))
|
|
62
|
+
return 'level';
|
|
63
|
+
if (m.includes('gemini-2.5') || m.includes('flash-thinking'))
|
|
64
|
+
return 'budget';
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
/** Token budgets for budget-style thinking providers (Anthropic-native / Gemini 2.5). */
|
|
68
|
+
const EFFORT_BUDGET = { low: 2048, medium: 8192, high: 16384 };
|
|
69
|
+
/**
|
|
70
|
+
* Map effort → a thinking-token budget, kept strictly below the answer's
|
|
71
|
+
* `maxTokens` (with headroom) so the budget can never starve the response.
|
|
72
|
+
* Anthropic requires a floor of 1024.
|
|
73
|
+
*/
|
|
74
|
+
export function effortToThinkingBudget(effort, maxTokens) {
|
|
75
|
+
const base = EFFORT_BUDGET[effort];
|
|
76
|
+
if (typeof maxTokens === 'number' && maxTokens > 0) {
|
|
77
|
+
return Math.max(1024, Math.min(base, Math.floor(maxTokens * 0.8)));
|
|
78
|
+
}
|
|
79
|
+
return base;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=reasoning-effort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-effort.js","sourceRoot":"","sources":["../../src/providers/reasoning-effort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-output.d.ts","sourceRoot":"","sources":["../../src/providers/tool-output.ts"],"names":[],"mappings":"AAWA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,SAA4B,GAAG,MAAM,CAS5F"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact a tool result for inclusion in a provider tool-loop message.
|
|
3
|
+
*
|
|
4
|
+
* Tool outputs can be large; we cap them so a single result can't blow the
|
|
5
|
+
* context budget. When capping, we must NOT slice a serialized JSON string
|
|
6
|
+
* mid-token — that yields malformed JSON the model then tries to parse. Instead
|
|
7
|
+
* we return a valid JSON envelope carrying an explicit `truncated` marker and a
|
|
8
|
+
* bounded preview, so the result always parses and the model is told it was cut.
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_TOOL_OUTPUT_LIMIT = 12000;
|
|
11
|
+
export function compactToolOutput(output, limit = DEFAULT_TOOL_OUTPUT_LIMIT) {
|
|
12
|
+
const text = typeof output === 'string' ? output : JSON.stringify(output) ?? 'null';
|
|
13
|
+
if (text.length <= limit)
|
|
14
|
+
return text;
|
|
15
|
+
return JSON.stringify({
|
|
16
|
+
truncated: true,
|
|
17
|
+
originalLength: text.length,
|
|
18
|
+
note: `Tool result truncated to ${limit} characters. Issue a narrower query to see the rest.`,
|
|
19
|
+
preview: text.slice(0, limit),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=tool-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-output.js","sourceRoot":"","sources":["../../src/providers/tool-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAExC,MAAM,UAAU,iBAAiB,CAAC,MAAe,EAAE,KAAK,GAAG,yBAAyB;IAClF,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IACpF,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI,CAAC,MAAM;QAC3B,IAAI,EAAE,4BAA4B,KAAK,sDAAsD;QAC7F,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -23,9 +23,32 @@ export interface ProviderRunOptions {
|
|
|
23
23
|
maxTokens?: number;
|
|
24
24
|
/** Sampling temperature (0..1). */
|
|
25
25
|
temperature?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Reasoning effort (low/medium/high). Providers with a reasoning surface
|
|
28
|
+
* translate it into their native param; the rest ignore it. See
|
|
29
|
+
* `./reasoning-effort.ts`.
|
|
30
|
+
*/
|
|
31
|
+
reasoningEffort?: import('./reasoning-effort.js').ReasoningEffort;
|
|
26
32
|
/** Caller-supplied AbortSignal — providers honor it. */
|
|
27
33
|
signal?: AbortSignal;
|
|
28
34
|
}
|
|
35
|
+
export interface AgentToolDefinition {
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
inputSchema: Record<string, unknown>;
|
|
39
|
+
run(args: unknown): Promise<unknown>;
|
|
40
|
+
}
|
|
41
|
+
export interface ProviderToolLoopOptions extends ProviderRunOptions {
|
|
42
|
+
/** Hard cap for provider-visible tool calls in this turn. Default 8. */
|
|
43
|
+
maxToolCalls?: number;
|
|
44
|
+
/** Optional trace hook for tests/UI instrumentation. */
|
|
45
|
+
onToolCall?: (event: {
|
|
46
|
+
name: string;
|
|
47
|
+
input: unknown;
|
|
48
|
+
output?: unknown;
|
|
49
|
+
isError?: boolean;
|
|
50
|
+
}) => void;
|
|
51
|
+
}
|
|
29
52
|
export interface AgentProvider {
|
|
30
53
|
readonly name: ProviderName;
|
|
31
54
|
/**
|
|
@@ -33,6 +56,12 @@ export interface AgentProvider {
|
|
|
33
56
|
* Throws on transport / API errors.
|
|
34
57
|
*/
|
|
35
58
|
generate(messages: AgentMessage[], options?: ProviderRunOptions): Promise<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Optional bounded tool loop. Providers that implement native tool use should
|
|
61
|
+
* call supplied tools, append their observations, and resolve with the final
|
|
62
|
+
* assistant text. Callers must keep a one-shot generate() fallback.
|
|
63
|
+
*/
|
|
64
|
+
generateWithTools?(messages: AgentMessage[], tools: AgentToolDefinition[], options?: ProviderToolLoopOptions): Promise<string>;
|
|
36
65
|
/**
|
|
37
66
|
* Optional token streaming. Calls `onDelta` with each text chunk as it arrives
|
|
38
67
|
* and resolves with the full concatenated text. Providers that omit this fall
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClF;;;;OAIG;IACH,cAAc,CAAC,CACb,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,uEAAuE;IACvE,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,MAAM,CAAC,CAOjB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,uBAAuB,EAAE,eAAe,CAAC;IAClE,wDAAwD;IACxD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,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;AAED,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CACrG;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClF;;;;OAIG;IACH,iBAAiB,CAAC,CAChB,QAAQ,EAAE,YAAY,EAAE,EACxB,KAAK,EAAE,mBAAmB,EAAE,EAC5B,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,CACb,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,uEAAuE;IACvE,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,MAAM,CAAC,CAOjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAuEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAuB,EACvB,QAAwB,EACxB,OAA2B,EAC3B,OAAgC;IAEhC,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { ComposeQueryResult, DqlArtifactReference, SemanticLayer } from '@duckcodeailabs/dql-core';
|
|
2
|
+
import type { KGNode } from '../kg/types.js';
|
|
3
|
+
import type { AnalysisQuestionPlan } from '../metadata/analysis-planner.js';
|
|
4
|
+
export interface SemanticBridgeFilter {
|
|
5
|
+
dimension: string;
|
|
6
|
+
operator: string;
|
|
7
|
+
values: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface SemanticBridgeOrderBy {
|
|
10
|
+
name: string;
|
|
11
|
+
direction: 'asc' | 'desc';
|
|
12
|
+
}
|
|
13
|
+
export interface SemanticDqlArtifactInput {
|
|
14
|
+
question: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
metrics: string[];
|
|
17
|
+
domain?: string;
|
|
18
|
+
titleFallback?: string;
|
|
19
|
+
dimensions: string[];
|
|
20
|
+
filters: SemanticBridgeFilter[];
|
|
21
|
+
timeDimension?: {
|
|
22
|
+
name: string;
|
|
23
|
+
granularity: string;
|
|
24
|
+
};
|
|
25
|
+
orderBy?: SemanticBridgeOrderBy[];
|
|
26
|
+
limit?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface SemanticBridgeQueryResult {
|
|
29
|
+
sql: string;
|
|
30
|
+
/** Primary metric kept for backward-compatible route labels and citations. */
|
|
31
|
+
metric: string;
|
|
32
|
+
metrics: string[];
|
|
33
|
+
dimensions: string[];
|
|
34
|
+
filters: SemanticBridgeFilter[];
|
|
35
|
+
timeDimension?: {
|
|
36
|
+
name: string;
|
|
37
|
+
granularity: string;
|
|
38
|
+
};
|
|
39
|
+
orderBy?: SemanticBridgeOrderBy[];
|
|
40
|
+
limit?: number;
|
|
41
|
+
dqlArtifact: DqlArtifactReference & {
|
|
42
|
+
kind: 'semantic_block';
|
|
43
|
+
};
|
|
44
|
+
composeResult: ComposeQueryResult;
|
|
45
|
+
}
|
|
46
|
+
export interface ComposeSemanticQueryInput {
|
|
47
|
+
semanticLayer: SemanticLayer;
|
|
48
|
+
question: string;
|
|
49
|
+
questionPlan: AnalysisQuestionPlan;
|
|
50
|
+
matchedMetric?: KGNode;
|
|
51
|
+
driver?: string;
|
|
52
|
+
tableMapping?: Record<string, string>;
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a filter literal to the physical column name(s) whose sampled values
|
|
55
|
+
* contain it (from the runtime value index / schema sample values). Lets us bind
|
|
56
|
+
* a value like "beverage" to whichever dimension actually carries it, instead of
|
|
57
|
+
* hard-coding project-specific value→dimension guesses.
|
|
58
|
+
*/
|
|
59
|
+
filterValueColumns?: (value: string) => string[];
|
|
60
|
+
}
|
|
61
|
+
export declare function composeSemanticQueryForQuestion(input: ComposeSemanticQueryInput): SemanticBridgeQueryResult | undefined;
|
|
62
|
+
/** A validated member selection, e.g. from an LLM emitting the query_semantic_model contract. */
|
|
63
|
+
export interface SemanticMemberSelection {
|
|
64
|
+
metrics: string[];
|
|
65
|
+
dimensions?: string[];
|
|
66
|
+
timeDimension?: {
|
|
67
|
+
name: string;
|
|
68
|
+
granularity: string;
|
|
69
|
+
};
|
|
70
|
+
filters?: SemanticBridgeFilter[];
|
|
71
|
+
orderBy?: SemanticBridgeOrderBy[];
|
|
72
|
+
limit?: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Compose from an EXPLICIT member selection (metrics/dimensions/grain/filters),
|
|
76
|
+
* validating each member against the layer before compiling. This is the Lane-2
|
|
77
|
+
* fallback when deterministic token-overlap selection misses but the semantic
|
|
78
|
+
* layer still covers the question — an LLM picks members, the compiler owns SQL.
|
|
79
|
+
*/
|
|
80
|
+
export declare function composeSemanticQueryFromMembers(input: {
|
|
81
|
+
semanticLayer: SemanticLayer;
|
|
82
|
+
question: string;
|
|
83
|
+
selection: SemanticMemberSelection;
|
|
84
|
+
driver?: string;
|
|
85
|
+
tableMapping?: Record<string, string>;
|
|
86
|
+
}): SemanticBridgeQueryResult | undefined;
|
|
87
|
+
export declare function renderSemanticDqlArtifact(input: SemanticDqlArtifactInput): string;
|
|
88
|
+
export declare function semanticDqlArtifactName(input: SemanticDqlArtifactInput): string;
|
|
89
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/semantic-bridge/compose.ts"],"names":[],"mappings":"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"}
|