@duckcodeailabs/dql-agent 1.13.4 → 1.14.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/agent-run-engine.d.ts +87 -7
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +559 -40
- package/dist/agent-run-engine.js.map +1 -1
- package/dist/agent-run-store.d.ts.map +1 -1
- package/dist/agent-run-store.js +42 -25
- package/dist/agent-run-store.js.map +1 -1
- package/dist/agentic/tool-loop.d.ts.map +1 -1
- package/dist/agentic/tool-loop.js +100 -32
- package/dist/agentic/tool-loop.js.map +1 -1
- package/dist/aggregation-safety-proof.d.ts +41 -0
- package/dist/aggregation-safety-proof.d.ts.map +1 -0
- package/dist/aggregation-safety-proof.js +511 -0
- package/dist/aggregation-safety-proof.js.map +1 -0
- package/dist/analytical-compatibility.d.ts.map +1 -1
- package/dist/analytical-compatibility.js +42 -25
- package/dist/analytical-compatibility.js.map +1 -1
- package/dist/analytical-execution-graph.d.ts +4 -21
- package/dist/analytical-execution-graph.d.ts.map +1 -1
- package/dist/analytical-execution-graph.js +27 -0
- package/dist/analytical-execution-graph.js.map +1 -1
- package/dist/analytical-frame.d.ts +12 -1
- package/dist/analytical-frame.d.ts.map +1 -1
- package/dist/analytical-frame.js +102 -2
- package/dist/analytical-frame.js.map +1 -1
- package/dist/analytical-orchestration.d.ts +256 -0
- package/dist/analytical-orchestration.d.ts.map +1 -0
- package/dist/analytical-orchestration.js +419 -0
- package/dist/analytical-orchestration.js.map +1 -0
- package/dist/analytical-result-facts.d.ts +54 -1
- package/dist/analytical-result-facts.d.ts.map +1 -1
- package/dist/analytical-result-facts.js +183 -0
- package/dist/analytical-result-facts.js.map +1 -1
- package/dist/answer-loop.d.ts +44 -3
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +771 -38
- package/dist/answer-loop.js.map +1 -1
- package/dist/cascade/budgets.js +1 -1
- package/dist/cascade/route-policy.d.ts +1 -1
- package/dist/cascade/route-policy.d.ts.map +1 -1
- package/dist/cascade/route-policy.js +2 -0
- package/dist/cascade/route-policy.js.map +1 -1
- package/dist/conversation/snapshot.d.ts.map +1 -1
- package/dist/conversation/snapshot.js +3 -0
- package/dist/conversation/snapshot.js.map +1 -1
- package/dist/conversation/turn-trust.d.ts.map +1 -1
- package/dist/conversation/turn-trust.js +6 -0
- package/dist/conversation/turn-trust.js.map +1 -1
- package/dist/generated-analytical-proposal.d.ts +37 -0
- package/dist/generated-analytical-proposal.d.ts.map +1 -0
- package/dist/generated-analytical-proposal.js +219 -0
- package/dist/generated-analytical-proposal.js.map +1 -0
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/intent-controller.d.ts +8 -1
- package/dist/intent-controller.d.ts.map +1 -1
- package/dist/intent-controller.js.map +1 -1
- package/dist/kg/build.js +102 -6
- package/dist/kg/build.js.map +1 -1
- package/dist/meaning-resolution.d.ts +30 -0
- package/dist/meaning-resolution.d.ts.map +1 -1
- package/dist/meaning-resolution.js +61 -8
- package/dist/meaning-resolution.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts.map +1 -1
- package/dist/metadata/analysis-planner.js +46 -2
- package/dist/metadata/analysis-planner.js.map +1 -1
- package/dist/metadata/block-fit.d.ts.map +1 -1
- package/dist/metadata/block-fit.js +55 -2
- package/dist/metadata/block-fit.js.map +1 -1
- package/dist/metadata/catalog.d.ts +24 -0
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +227 -42
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/meaning-evidence.d.ts.map +1 -1
- package/dist/metadata/meaning-evidence.js +408 -36
- package/dist/metadata/meaning-evidence.js.map +1 -1
- package/dist/metadata/sql-context-validation.d.ts +3 -0
- package/dist/metadata/sql-context-validation.d.ts.map +1 -1
- package/dist/metadata/sql-context-validation.js +16 -5
- package/dist/metadata/sql-context-validation.js.map +1 -1
- package/dist/plan-execution-adapter.d.ts +9 -1
- package/dist/plan-execution-adapter.d.ts.map +1 -1
- package/dist/plan-execution-adapter.js +81 -32
- package/dist/plan-execution-adapter.js.map +1 -1
- package/dist/provider-egress.d.ts +122 -0
- package/dist/provider-egress.d.ts.map +1 -0
- package/dist/provider-egress.js +504 -0
- package/dist/provider-egress.js.map +1 -0
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +76 -33
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/dispatch.d.ts +15 -0
- package/dist/providers/dispatch.d.ts.map +1 -0
- package/dist/providers/dispatch.js +25 -0
- package/dist/providers/dispatch.js.map +1 -0
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +16 -8
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +2 -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/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +29 -10
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +92 -36
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +43 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/relationship-proof.d.ts +19 -0
- package/dist/relationship-proof.d.ts.map +1 -0
- package/dist/relationship-proof.js +75 -0
- package/dist/relationship-proof.js.map +1 -0
- package/dist/research-loop.d.ts.map +1 -1
- package/dist/research-loop.js +17 -11
- package/dist/research-loop.js.map +1 -1
- package/dist/resolved-analytical-plan.d.ts +25 -3
- package/dist/resolved-analytical-plan.d.ts.map +1 -1
- package/dist/resolved-analytical-plan.js +460 -31
- package/dist/resolved-analytical-plan.js.map +1 -1
- package/dist/router.d.ts +38 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +1060 -53
- package/dist/router.js.map +1 -1
- package/dist/semantic-identities.d.ts +18 -0
- package/dist/semantic-identities.d.ts.map +1 -0
- package/dist/semantic-identities.js +60 -0
- package/dist/semantic-identities.js.map +1 -0
- package/dist/semantic-proof-authority.d.ts +29 -0
- package/dist/semantic-proof-authority.d.ts.map +1 -0
- package/dist/semantic-proof-authority.js +34 -0
- package/dist/semantic-proof-authority.js.map +1 -0
- package/package.json +4 -4
|
@@ -19,13 +19,17 @@
|
|
|
19
19
|
* compiler owns semantic SQL, certified execution keeps its grain gate, run_sql
|
|
20
20
|
* is read-only). This module only orchestrates the conversation.
|
|
21
21
|
*/
|
|
22
|
+
import { assertProviderPayloadAllowed, boundProviderResultRows } from '../provider-egress.js';
|
|
22
23
|
/**
|
|
23
24
|
* Run the agentic tool loop and return the model's final assistant text. Tool
|
|
24
25
|
* observations are surfaced through `options.onToolCall` (same contract the native
|
|
25
26
|
* providers already use), so callers can record evidence regardless of transport.
|
|
26
27
|
*/
|
|
27
28
|
export async function runAgenticToolLoop(provider, messages, tools, options = {}) {
|
|
28
|
-
const
|
|
29
|
+
const resultRowBudgetUsage = new Map();
|
|
30
|
+
const usable = tools
|
|
31
|
+
.filter((tool) => tool.name && tool.description)
|
|
32
|
+
.map((tool) => guardToolOutput(tool, options, resultRowBudgetUsage));
|
|
29
33
|
const policyMessages = options.toolPolicy
|
|
30
34
|
? [{ role: 'system', content: options.toolPolicy }]
|
|
31
35
|
: [];
|
|
@@ -38,6 +42,38 @@ export async function runAgenticToolLoop(provider, messages, tools, options = {}
|
|
|
38
42
|
}
|
|
39
43
|
return runTextProtocolToolLoop(provider, [...messages, ...policyMessages], usable, options);
|
|
40
44
|
}
|
|
45
|
+
function guardToolOutput(tool, options, resultRowBudgetUsage) {
|
|
46
|
+
const policy = options.providerPayloadGuard;
|
|
47
|
+
if (!policy)
|
|
48
|
+
return tool;
|
|
49
|
+
return {
|
|
50
|
+
...tool,
|
|
51
|
+
run: async (args) => {
|
|
52
|
+
const output = await tool.run(args);
|
|
53
|
+
const maxResultRows = policy.allowedResultRowTools?.[tool.name] ?? 0;
|
|
54
|
+
const budgetGroup = policy.resultRowBudgetGroupByTool?.[tool.name] ?? tool.name;
|
|
55
|
+
const cumulativeLimit = policy.cumulativeResultRowBudgets?.[budgetGroup] ?? maxResultRows;
|
|
56
|
+
const alreadyUsed = resultRowBudgetUsage.get(budgetGroup) ?? 0;
|
|
57
|
+
const bounded = boundProviderResultRows(output, Math.max(0, cumulativeLimit - alreadyUsed));
|
|
58
|
+
const shape = assertProviderPayloadAllowed(bounded.value, {
|
|
59
|
+
allowResultRows: maxResultRows > 0,
|
|
60
|
+
maxResultRows: Math.max(0, cumulativeLimit - alreadyUsed),
|
|
61
|
+
purpose: policy.purpose,
|
|
62
|
+
});
|
|
63
|
+
const cumulativeResultRowCount = alreadyUsed + shape.resultRowCount;
|
|
64
|
+
resultRowBudgetUsage.set(budgetGroup, cumulativeResultRowCount);
|
|
65
|
+
policy.onPayload?.({
|
|
66
|
+
toolName: tool.name,
|
|
67
|
+
output: bounded.value,
|
|
68
|
+
...shape,
|
|
69
|
+
cumulativeResultRowCount,
|
|
70
|
+
budgetGroup,
|
|
71
|
+
budgetExhausted: bounded.exhausted || cumulativeResultRowCount >= cumulativeLimit,
|
|
72
|
+
});
|
|
73
|
+
return bounded.value;
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
41
77
|
/**
|
|
42
78
|
* Text-protocol ReAct loop for providers without native tool use. The model
|
|
43
79
|
* chooses ONE action per turn: call a tool, or emit the final answer. We parse its
|
|
@@ -47,51 +83,83 @@ export async function runAgenticToolLoop(provider, messages, tools, options = {}
|
|
|
47
83
|
async function runTextProtocolToolLoop(provider, baseMessages, tools, options) {
|
|
48
84
|
const maxToolCalls = Math.max(0, Math.min(30, options.maxToolCalls ?? 8));
|
|
49
85
|
const toolMap = new Map(tools.map((tool) => [tool.name, tool]));
|
|
50
|
-
|
|
86
|
+
// Preserve the complete transport contract across both text-protocol turns.
|
|
87
|
+
// Reconstructing a small options subset silently dropped the physical-send
|
|
88
|
+
// observer, dispatch cap, redaction guard, and egress accounting for CLI and
|
|
89
|
+
// Ollama providers.
|
|
90
|
+
const dispatchLimit = Math.max(1, Math.min(30, options.maxProviderDispatches ?? 2));
|
|
91
|
+
let physicalDispatches = 0;
|
|
92
|
+
const outerObserver = options.onProviderDispatch;
|
|
93
|
+
const runOptions = {
|
|
94
|
+
...options,
|
|
95
|
+
onProviderDispatch: (event) => {
|
|
96
|
+
physicalDispatches += 1;
|
|
97
|
+
if (physicalDispatches > dispatchLimit) {
|
|
98
|
+
throw Object.assign(new Error(`Provider dispatch budget exhausted after ${dispatchLimit} physical attempt${dispatchLimit === 1 ? '' : 's'}.`), { code: 'PROVIDER_DISPATCH_BUDGET_EXHAUSTED' });
|
|
99
|
+
}
|
|
100
|
+
return outerObserver?.(event) ?? event.envelope;
|
|
101
|
+
},
|
|
102
|
+
};
|
|
51
103
|
const messages = [
|
|
52
104
|
...baseMessages,
|
|
53
105
|
{ role: 'system', content: buildTextToolContract(tools, maxToolCalls) },
|
|
54
106
|
];
|
|
55
|
-
let toolCallsUsed = 0;
|
|
56
107
|
let lastText = '';
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
108
|
+
const text = await provider.generate(messages, runOptions);
|
|
109
|
+
if (text.trim())
|
|
110
|
+
lastText = text;
|
|
111
|
+
const call = maxToolCalls > 0 ? parseTextToolCall(text) : undefined;
|
|
112
|
+
if (!call)
|
|
113
|
+
return text || lastText;
|
|
114
|
+
const tool = toolMap.get(call.name);
|
|
115
|
+
let output;
|
|
116
|
+
let isError = false;
|
|
117
|
+
const startedAt = Date.now();
|
|
118
|
+
if (!tool) {
|
|
119
|
+
output = { error: `Unknown tool: ${call.name}. Available: ${tools.map((t) => t.name).join(', ')}` };
|
|
120
|
+
isError = true;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
try {
|
|
124
|
+
assertMayStartToolCall(options);
|
|
125
|
+
output = await tool.run(call.input ?? {});
|
|
72
126
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
catch (err) {
|
|
78
|
-
output = { error: err instanceof Error ? err.message : String(err) };
|
|
79
|
-
isError = true;
|
|
80
|
-
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
output = { error: err instanceof Error ? err.message : String(err) };
|
|
129
|
+
isError = true;
|
|
81
130
|
}
|
|
82
|
-
options.onToolCall?.({ name: call.name, input: call.input, output, isError, durationMs: Date.now() - startedAt });
|
|
83
|
-
messages.push({ role: 'assistant', content: text });
|
|
84
|
-
messages.push({ role: 'user', content: renderObservation(call.name, output) });
|
|
85
131
|
}
|
|
86
|
-
|
|
87
|
-
|
|
132
|
+
options.onToolCall?.({ name: call.name, input: call.input, output, isError, durationMs: Date.now() - startedAt });
|
|
133
|
+
messages.push({ role: 'assistant', content: text });
|
|
134
|
+
messages.push({ role: 'user', content: renderObservation(call.name, output) });
|
|
135
|
+
// One provider proposal plus one final generation is the complete ordinary
|
|
136
|
+
// tool round. The final instruction prohibits a second tool proposal.
|
|
88
137
|
messages.push({
|
|
89
138
|
role: 'user',
|
|
90
139
|
content: 'Tool budget reached — do not call any more tools. Answer now using only the tool results above, as a single ```json fenced object with summary, sql, viz, outputs.',
|
|
91
140
|
});
|
|
92
|
-
const finalText = await provider.generate(messages, runOptions).catch(() =>
|
|
141
|
+
const finalText = await provider.generate(messages, runOptions).catch((error) => {
|
|
142
|
+
const code = error && typeof error === 'object' && 'code' in error
|
|
143
|
+
? error.code
|
|
144
|
+
: undefined;
|
|
145
|
+
// Running out of wall clock is not a reason to discard a usable draft: the
|
|
146
|
+
// model already produced text and a tool observation. Fall back to that
|
|
147
|
+
// instead of failing the whole run with nothing.
|
|
148
|
+
if (code === 'RUN_DEADLINE_INSUFFICIENT' && lastText.trim())
|
|
149
|
+
return '';
|
|
150
|
+
if (code === 'PROVIDER_DISPATCH_BUDGET_EXHAUSTED')
|
|
151
|
+
throw error;
|
|
152
|
+
return '';
|
|
153
|
+
});
|
|
93
154
|
return finalText.trim() ? finalText : lastText;
|
|
94
155
|
}
|
|
156
|
+
function assertMayStartToolCall(options) {
|
|
157
|
+
if (options.mayStartToolCall?.() === false) {
|
|
158
|
+
throw Object.assign(new Error('The run soft target elapsed before this tool branch could start.'), {
|
|
159
|
+
code: 'RUN_SOFT_TARGET_EXCEEDED',
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
95
163
|
/**
|
|
96
164
|
* Parse a text-protocol tool call. A tool call is a JSON object with a `tool`
|
|
97
165
|
* (string) field, optionally in a ```json fence. Anything else — prose, or a JSON
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-loop.js","sourceRoot":"","sources":["../../src/agentic/tool-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"tool-loop.js","sourceRoot":"","sources":["../../src/agentic/tool-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type AggregationSafetyProofV1, type MetricCapabilityContract, type ResolvedRelationshipProofV1 } from '@duckcodeailabs/dql-core';
|
|
2
|
+
import type { LocalContextPack } from './metadata/catalog.js';
|
|
3
|
+
import type { SemanticProofAuthorityV1 } from './semantic-proof-authority.js';
|
|
4
|
+
/**
|
|
5
|
+
* Builds aggregation authority exclusively from parser and governed metadata
|
|
6
|
+
* facts. It intentionally has no warehouse-result input.
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildAggregationSafetyProof(sql: string, contextPack: LocalContextPack | undefined, dialect?: string, planFingerprint?: string): AggregationSafetyProofV1;
|
|
9
|
+
/**
|
|
10
|
+
* Proves an exact semantic-adapter compilation without pretending that a
|
|
11
|
+
* derived metric is a stored additive column. A ratio may pass only when the
|
|
12
|
+
* pinned compiler calculates it from multiple aggregates; SUM(ratio_output)
|
|
13
|
+
* remains a blocked non-additive rollup.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildSemanticCompilationAggregationSafetyProof(input: {
|
|
16
|
+
sql: string;
|
|
17
|
+
capability: MetricCapabilityContract;
|
|
18
|
+
/**
|
|
19
|
+
* Compiler-owned metric expression rendered from the immutable semantic
|
|
20
|
+
* snapshot before target SQL execution. The proof compares parser-owned
|
|
21
|
+
* expression trees; prose, warehouse success, or a matching alias is never
|
|
22
|
+
* accepted as authority.
|
|
23
|
+
*/
|
|
24
|
+
compilerMetricExpressionSql?: string;
|
|
25
|
+
compilerMetricId?: string;
|
|
26
|
+
compilerMeasureIds?: string[];
|
|
27
|
+
compilerRelation?: string;
|
|
28
|
+
compilerRelationAliases?: string[];
|
|
29
|
+
compilerAuthorityIssueCodes?: string[];
|
|
30
|
+
relationshipProofs?: ResolvedRelationshipProofV1[];
|
|
31
|
+
executionId?: string;
|
|
32
|
+
snapshotId?: string;
|
|
33
|
+
capabilityFingerprint?: string;
|
|
34
|
+
route?: 'semantic';
|
|
35
|
+
adapterId?: string;
|
|
36
|
+
semanticAuthority?: SemanticProofAuthorityV1;
|
|
37
|
+
contextPack?: LocalContextPack;
|
|
38
|
+
dialect?: string;
|
|
39
|
+
planFingerprint: string;
|
|
40
|
+
}): AggregationSafetyProofV1;
|
|
41
|
+
//# sourceMappingURL=aggregation-safety-proof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregation-safety-proof.d.ts","sourceRoot":"","sources":["../src/aggregation-safety-proof.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,uBAAuB,CAAC;AAG9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAE9E;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,OAAO,SAAW,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,wBAAwB,CAmG1B;AAED;;;;;GAKG;AACH,wBAAgB,8CAA8C,CAAC,KAAK,EAAE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,wBAAwB,CAAC;IACrC;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,wBAAwB,CAmH3B"}
|