@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
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared contracts for the conversational analytical orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* The existing DQL engine remains the authority for compilation, execution,
|
|
5
|
+
* trust, and the immutable resolved analytical plan. This module is the thin
|
|
6
|
+
* outer contract used by the conversational layer to describe what it
|
|
7
|
+
* understood, what it searched, and why it could or could not continue.
|
|
8
|
+
*
|
|
9
|
+
* The contract is intentionally content-only: it never carries model
|
|
10
|
+
* chain-of-thought, credentials, raw provider payloads, or authorization.
|
|
11
|
+
*
|
|
12
|
+
* Acceptance: AGT-027..033, CTX-007, PERF-003, E2E-022.
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
export const ANALYTICAL_ORCHESTRATION_CONTRACT_VERSION = 1;
|
|
16
|
+
/**
|
|
17
|
+
* Small, explainable intent vocabulary used before the physical plan exists.
|
|
18
|
+
* It is deliberately not a second semantic matcher: candidate identity still
|
|
19
|
+
* comes from retrieval plus the bounded meaning call. These helpers only turn
|
|
20
|
+
* a request into a task graph and output contract, so a compound question can
|
|
21
|
+
* report partial success instead of collapsing the whole turn to one error.
|
|
22
|
+
*/
|
|
23
|
+
export function inferAnalyticalTurnKind(question) {
|
|
24
|
+
const text = question.toLowerCase();
|
|
25
|
+
if (/\b(hello|hi|hey|thanks|thank you|good morning|good afternoon)\b/.test(text))
|
|
26
|
+
return 'conversation';
|
|
27
|
+
if (/\b(why|root cause|driver|diagnos|anomal|changed)\b/.test(text))
|
|
28
|
+
return 'diagnosis';
|
|
29
|
+
if (/\b(research|investigate|deep dive|tell a story|surrounding context)\b/.test(text))
|
|
30
|
+
return 'research';
|
|
31
|
+
if (/\b(compare|versus|vs\.?|difference)\b/.test(text))
|
|
32
|
+
return 'comparison';
|
|
33
|
+
if (/\b(top|bottom|highest|lowest|rank)\b/.test(text))
|
|
34
|
+
return 'ranking';
|
|
35
|
+
if (/\b(by|per|over time|trend|monthly|daily|weekly)\b/.test(text))
|
|
36
|
+
return 'breakdown';
|
|
37
|
+
if (/\b(what is|what are|define|definition|meaning)\b/.test(text) && !/\b(total|revenue|count|sales|amount)\b/.test(text))
|
|
38
|
+
return 'definition';
|
|
39
|
+
if (/\b(region|country|state|city|name|label|email|category|product|customer)\b/.test(text)
|
|
40
|
+
&& /\b(where|which|what|who)\b/.test(text))
|
|
41
|
+
return 'lookup';
|
|
42
|
+
return 'aggregation';
|
|
43
|
+
}
|
|
44
|
+
export function splitAnalyticalTasks(question) {
|
|
45
|
+
// The separator belongs to the SPLIT, not to the clause. Carrying it through
|
|
46
|
+
// produced a child task whose question was literally
|
|
47
|
+
// `" then "What customer type is Wesley Jenkins` — quote, connector and all —
|
|
48
|
+
// which then failed to resolve and surfaced that punctuation to the reader as
|
|
49
|
+
// the task title.
|
|
50
|
+
const leadingJunk = /^(?:[\s"'“”‘’,:;.\-]+|\b(?:then|and|also)\b)+/i;
|
|
51
|
+
const trailingJunk = /[\s"'“”‘’,:;.\-]+$/;
|
|
52
|
+
const parts = question
|
|
53
|
+
.split(/\s*(?:\?|;|\band then\b|\balso\b)\s*/i)
|
|
54
|
+
.flatMap((part) => part.split(/\s+\band\s+(?=(?:what|who|which|show|list|tell|give|how|why)\b)/i))
|
|
55
|
+
.map((part) => part.replace(leadingJunk, '').replace(trailingJunk, '').trim())
|
|
56
|
+
.filter(Boolean);
|
|
57
|
+
return parts.length > 0 ? parts : [question.trim()];
|
|
58
|
+
}
|
|
59
|
+
export function buildAnalyticalTaskGraph(input) {
|
|
60
|
+
const clauses = splitAnalyticalTasks(input.question).slice(0, Math.max(1, Math.min(6, input.maxTasks ?? 6)));
|
|
61
|
+
const candidateIds = [...new Set((input.candidateIds ?? []).filter((id) => id.trim()))];
|
|
62
|
+
const metrics = [...new Set((input.metrics ?? []).filter((metric) => metric.trim()))];
|
|
63
|
+
const dimensions = [...new Set((input.dimensions ?? []).filter((dimension) => dimension.trim()))];
|
|
64
|
+
const filters = input.filters ?? [];
|
|
65
|
+
const inheritedBindings = input.inheritedBindings ?? [];
|
|
66
|
+
const tasks = clauses.map((clause, index) => {
|
|
67
|
+
const kind = inferAnalyticalTurnKind(clause);
|
|
68
|
+
const research = kind === 'research' || kind === 'diagnosis';
|
|
69
|
+
const taskKind = research
|
|
70
|
+
? 'research_branch'
|
|
71
|
+
: kind === 'lookup'
|
|
72
|
+
? 'attribute_lookup'
|
|
73
|
+
: kind === 'breakdown'
|
|
74
|
+
? 'breakdown'
|
|
75
|
+
: kind === 'comparison'
|
|
76
|
+
? 'comparison'
|
|
77
|
+
: kind === 'ranking'
|
|
78
|
+
? 'ranking'
|
|
79
|
+
: kind === 'definition'
|
|
80
|
+
? 'definition'
|
|
81
|
+
: 'aggregation';
|
|
82
|
+
return {
|
|
83
|
+
version: 1,
|
|
84
|
+
id: `task-${index + 1}`,
|
|
85
|
+
kind: taskKind,
|
|
86
|
+
question: clause,
|
|
87
|
+
dependencies: index === 0 ? [] : [],
|
|
88
|
+
output: {
|
|
89
|
+
metrics,
|
|
90
|
+
dimensions,
|
|
91
|
+
filters,
|
|
92
|
+
...(kind === 'ranking' ? { order: 'desc' } : {}),
|
|
93
|
+
},
|
|
94
|
+
status: 'planned',
|
|
95
|
+
candidateIds,
|
|
96
|
+
inheritedBindings,
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
kind: tasks.length > 1 ? 'compound' : inferAnalyticalTurnKind(input.question),
|
|
101
|
+
tasks,
|
|
102
|
+
partial: false,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export function buildAnalyticalTurnPlan(input) {
|
|
106
|
+
const graph = buildAnalyticalTaskGraph(input);
|
|
107
|
+
const zeroCall = input.zeroCallReason === 'explicit_binding'
|
|
108
|
+
|| input.zeroCallReason === 'conversation_only'
|
|
109
|
+
|| input.zeroCallReason === 'frozen_research_child';
|
|
110
|
+
return {
|
|
111
|
+
version: 1,
|
|
112
|
+
...(input.turnId ? { turnId: input.turnId } : {}),
|
|
113
|
+
question: input.question,
|
|
114
|
+
kind: graph.kind,
|
|
115
|
+
meaningCallBudget: zeroCall ? 0 : 1,
|
|
116
|
+
meaningCallReason: input.zeroCallReason ?? 'candidate_interpretation',
|
|
117
|
+
...(input.snapshotId ? { snapshotId: input.snapshotId } : {}),
|
|
118
|
+
...(input.sourceFingerprint ? { sourceFingerprint: input.sourceFingerprint } : {}),
|
|
119
|
+
taskIds: graph.tasks.map((task) => task.id),
|
|
120
|
+
tasks: graph.tasks,
|
|
121
|
+
authorityOrder: ['certified', 'semantic', 'governed_relational', 'generated'],
|
|
122
|
+
frozen: input.frozen === true,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export function summarizeTaskOutcomes(tasks) {
|
|
126
|
+
const completed = tasks.filter((task) => task.status === 'completed').map((task) => task.id);
|
|
127
|
+
const gaps = tasks.filter((task) => task.status === 'gap' || task.status === 'blocked').map((task) => task.id);
|
|
128
|
+
const status = completed.length === tasks.length && tasks.length > 0
|
|
129
|
+
? 'completed'
|
|
130
|
+
: completed.length > 0
|
|
131
|
+
? 'partial'
|
|
132
|
+
: gaps.some((id) => tasks.find((task) => task.id === id)?.status === 'blocked')
|
|
133
|
+
? 'blocked'
|
|
134
|
+
: 'gap';
|
|
135
|
+
return { status, completed, gaps };
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Normalize connector, MetricFlow, and provider result shapes at one boundary.
|
|
139
|
+
* Connectors may return `ColumnMeta[]` and rows as arrays; UI surfaces should
|
|
140
|
+
* never need to guess how to index those rows.
|
|
141
|
+
*/
|
|
142
|
+
export function normalizeCanonicalQueryResult(input) {
|
|
143
|
+
const columns = Array.isArray(input.columns)
|
|
144
|
+
? input.columns.map(columnName)
|
|
145
|
+
: [];
|
|
146
|
+
const rawRows = Array.isArray(input.rows) ? input.rows : [];
|
|
147
|
+
const inferredColumns = columns.length > 0
|
|
148
|
+
? columns
|
|
149
|
+
: objectRowColumns(rawRows).length > 0
|
|
150
|
+
? objectRowColumns(rawRows)
|
|
151
|
+
: firstArrayRow(rawRows)
|
|
152
|
+
? firstArrayRow(rawRows).map((_, index) => `column_${index + 1}`)
|
|
153
|
+
: [];
|
|
154
|
+
const rows = rawRows.map((row) => normalizeRow(row, inferredColumns));
|
|
155
|
+
const rowCount = typeof input.rowCount === 'number' && Number.isFinite(input.rowCount)
|
|
156
|
+
? Math.max(0, Math.trunc(input.rowCount))
|
|
157
|
+
: rows.length;
|
|
158
|
+
const executionTime = typeof input.executionTimeMs === 'number'
|
|
159
|
+
? input.executionTimeMs
|
|
160
|
+
: typeof input.executionTime === 'number'
|
|
161
|
+
? input.executionTime
|
|
162
|
+
: undefined;
|
|
163
|
+
const canonical = {
|
|
164
|
+
version: 1,
|
|
165
|
+
columns: inferredColumns,
|
|
166
|
+
rows,
|
|
167
|
+
rowCount,
|
|
168
|
+
...(executionTime !== undefined ? { executionTime } : {}),
|
|
169
|
+
...(input.truncated === true ? { truncated: true } : {}),
|
|
170
|
+
};
|
|
171
|
+
const receipt = input.executionReceipt && typeof input.executionReceipt === 'object'
|
|
172
|
+
? input.executionReceipt
|
|
173
|
+
: undefined;
|
|
174
|
+
const receiptFingerprint = typeof receipt?.resultFingerprint === 'string' ? receipt.resultFingerprint : undefined;
|
|
175
|
+
const suppliedFingerprint = typeof input.resultFingerprint === 'string' && input.resultFingerprint.trim()
|
|
176
|
+
? input.resultFingerprint.trim()
|
|
177
|
+
: receiptFingerprint;
|
|
178
|
+
const trustState = input.trustState === 'certified'
|
|
179
|
+
|| input.trustState === 'governed'
|
|
180
|
+
|| input.trustState === 'review_required'
|
|
181
|
+
|| input.trustState === 'not_applicable'
|
|
182
|
+
|| input.trustState === 'blocked'
|
|
183
|
+
? input.trustState
|
|
184
|
+
: undefined;
|
|
185
|
+
return {
|
|
186
|
+
...canonical,
|
|
187
|
+
...(receipt ? { executionReceipt: receipt } : {}),
|
|
188
|
+
...(trustState ? { trustState } : {}),
|
|
189
|
+
...(typeof input.answerTier === 'string' && input.answerTier.trim()
|
|
190
|
+
? { answerTier: input.answerTier.trim() }
|
|
191
|
+
: {}),
|
|
192
|
+
// A connector/execution receipt is authoritative. The local digest is only
|
|
193
|
+
// a backwards-compatible fallback for legacy unreceipted rows.
|
|
194
|
+
resultFingerprint: suppliedFingerprint ?? stableFingerprint(canonical),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
export function canonicalResultRows(result) {
|
|
198
|
+
return result.rows.map((row) => result.columns.map((column) => row[column]));
|
|
199
|
+
}
|
|
200
|
+
export function assertCanonicalResult(result) {
|
|
201
|
+
if (result.version !== 1)
|
|
202
|
+
throw new Error('Unsupported analytical result contract version.');
|
|
203
|
+
if (result.rowCount < result.rows.length)
|
|
204
|
+
throw new Error('Result rowCount cannot be smaller than the returned rows.');
|
|
205
|
+
if (new Set(result.columns).size !== result.columns.length)
|
|
206
|
+
throw new Error('Result columns must be unique.');
|
|
207
|
+
for (const row of result.rows) {
|
|
208
|
+
for (const column of result.columns) {
|
|
209
|
+
if (!Object.prototype.hasOwnProperty.call(row, column)) {
|
|
210
|
+
throw new Error(`Result row is missing the declared column ${column}.`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/** Reciprocal-rank fusion keeps recall across lexical, vector, and graph lanes. */
|
|
216
|
+
export function fuseContextCandidates(lanes, limit = 32) {
|
|
217
|
+
const safeLimit = Math.max(1, Math.min(100, Math.trunc(limit)));
|
|
218
|
+
const byId = new Map();
|
|
219
|
+
const diagnostics = { lanes: {}, selectedIds: [], truncated: false };
|
|
220
|
+
for (const [lane, cards] of Object.entries(lanes)) {
|
|
221
|
+
diagnostics.lanes[lane] = { returned: cards.length };
|
|
222
|
+
cards.forEach((card, index) => {
|
|
223
|
+
if (!card.id.trim())
|
|
224
|
+
return;
|
|
225
|
+
const score = 1 / (60 + index + 1) + Math.max(0, Math.min(1, card.relevance)) * 0.25;
|
|
226
|
+
const existing = byId.get(card.id);
|
|
227
|
+
if (existing) {
|
|
228
|
+
existing.score += score;
|
|
229
|
+
existing.lanes.add(lane);
|
|
230
|
+
if ((card.relevance ?? 0) > existing.relevance)
|
|
231
|
+
existing.relevance = card.relevance;
|
|
232
|
+
if (card.compatible === true)
|
|
233
|
+
existing.compatible = true;
|
|
234
|
+
if (!existing.summary && card.summary)
|
|
235
|
+
existing.summary = card.summary;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
byId.set(card.id, { ...card, score, lanes: new Set([lane]) });
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
const selected = [...byId.values()]
|
|
243
|
+
.sort((left, right) => right.score - left.score || right.relevance - left.relevance || left.id.localeCompare(right.id))
|
|
244
|
+
.slice(0, safeLimit)
|
|
245
|
+
.map(({ score: _score, lanes: _lanes, ...card }) => card);
|
|
246
|
+
diagnostics.selectedIds = selected.map((card) => card.id);
|
|
247
|
+
diagnostics.truncated = byId.size > selected.length;
|
|
248
|
+
return { candidates: selected, diagnostics };
|
|
249
|
+
}
|
|
250
|
+
export async function retrieveContextLanes(lanes, limit = 32, maxConcurrent = 4) {
|
|
251
|
+
const entries = Object.entries(lanes);
|
|
252
|
+
const concurrency = Math.max(1, Math.min(8, Math.trunc(maxConcurrent) || 1));
|
|
253
|
+
const settled = [];
|
|
254
|
+
let nextIndex = 0;
|
|
255
|
+
const worker = async () => {
|
|
256
|
+
for (;;) {
|
|
257
|
+
const index = nextIndex;
|
|
258
|
+
nextIndex += 1;
|
|
259
|
+
const entry = entries[index];
|
|
260
|
+
if (!entry)
|
|
261
|
+
return;
|
|
262
|
+
const [name, retrieve] = entry;
|
|
263
|
+
const startedAt = Date.now();
|
|
264
|
+
try {
|
|
265
|
+
const cards = await retrieve();
|
|
266
|
+
settled[index] = [name, cards, Date.now() - startedAt];
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
settled[index] = [name, { error: error instanceof Error ? error.message : String(error) }, Date.now() - startedAt];
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, entries.length) }, () => worker()));
|
|
274
|
+
const successful = {};
|
|
275
|
+
const errors = {};
|
|
276
|
+
const durations = {};
|
|
277
|
+
for (const [name, result, durationMs] of settled) {
|
|
278
|
+
durations[name] = durationMs;
|
|
279
|
+
if (Array.isArray(result))
|
|
280
|
+
successful[name] = result;
|
|
281
|
+
else
|
|
282
|
+
errors[name] = result.error;
|
|
283
|
+
}
|
|
284
|
+
const fused = fuseContextCandidates(successful, limit);
|
|
285
|
+
for (const [name, cards] of Object.entries(successful)) {
|
|
286
|
+
fused.diagnostics.lanes[name] = {
|
|
287
|
+
returned: cards.length,
|
|
288
|
+
durationMs: durations[name],
|
|
289
|
+
status: cards.length > 0 ? 'ok' : 'empty',
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
for (const [name, error] of Object.entries(errors)) {
|
|
293
|
+
fused.diagnostics.lanes[name] = {
|
|
294
|
+
returned: 0,
|
|
295
|
+
durationMs: durations[name],
|
|
296
|
+
status: 'error',
|
|
297
|
+
error,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
return fused;
|
|
301
|
+
}
|
|
302
|
+
export function capResearchBranches(branches, max = 6) {
|
|
303
|
+
return branches.slice(0, Math.max(1, Math.min(6, Math.trunc(max))));
|
|
304
|
+
}
|
|
305
|
+
export function buildResearchEvidenceLedger(input) {
|
|
306
|
+
const entries = input.entries.slice(0, 6).map((entry) => {
|
|
307
|
+
const resultFingerprint = normalizeAnalyticalExecutionFingerprint(entry.resultFingerprint);
|
|
308
|
+
const executionReceipt = normalizeAnalyticalExecutionReceipt(entry.executionReceipt);
|
|
309
|
+
const receiptFingerprint = executionReceipt?.resultFingerprint;
|
|
310
|
+
const listedFingerprint = entry.receipts
|
|
311
|
+
.map((receipt) => normalizeAnalyticalExecutionFingerprint(receipt))
|
|
312
|
+
.find((receipt) => Boolean(receipt));
|
|
313
|
+
const executionProof = resultFingerprint ?? receiptFingerprint ?? listedFingerprint;
|
|
314
|
+
// A receipt/result proof is meaningful only for an observed branch. Never
|
|
315
|
+
// carry a preloaded receipt, child ID, context-pack ID, or malformed
|
|
316
|
+
// fingerprint through a failed/cancelled/skipped entry.
|
|
317
|
+
if (entry.status !== 'observed') {
|
|
318
|
+
const { executionReceipt: _receipt, resultFingerprint: _fingerprint, ...withoutProof } = entry;
|
|
319
|
+
return { ...withoutProof, receipts: [] };
|
|
320
|
+
}
|
|
321
|
+
// A ready/observed branch without a complete receipt or canonical result
|
|
322
|
+
// fingerprint is not an observation. Downgrade it and retain no invented
|
|
323
|
+
// proof; callers can still inspect the branch and retry it explicitly.
|
|
324
|
+
if (!executionProof) {
|
|
325
|
+
const { executionReceipt: _receipt, resultFingerprint: _fingerprint, ...withoutProof } = entry;
|
|
326
|
+
return {
|
|
327
|
+
...withoutProof,
|
|
328
|
+
status: 'failed',
|
|
329
|
+
receipts: [],
|
|
330
|
+
error: entry.error ?? 'Research branch had no valid execution receipt or canonical result fingerprint.',
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
...entry,
|
|
335
|
+
status: 'observed',
|
|
336
|
+
resultFingerprint: executionProof,
|
|
337
|
+
...(executionReceipt ? { executionReceipt } : {}),
|
|
338
|
+
receipts: [executionProof],
|
|
339
|
+
};
|
|
340
|
+
});
|
|
341
|
+
return {
|
|
342
|
+
version: 1,
|
|
343
|
+
rootQuestion: input.rootQuestion,
|
|
344
|
+
...(input.planId ? { planId: input.planId } : {}),
|
|
345
|
+
...(input.snapshotId ? { snapshotId: input.snapshotId } : {}),
|
|
346
|
+
entries,
|
|
347
|
+
factIds: [...new Set(entries.flatMap((entry) => entry.facts))],
|
|
348
|
+
stoppingReason: input.stoppingReason ?? (entries.length > 0 ? 'completed' : 'not_started'),
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
/** The only accepted host-side execution identity is a SHA-256 fingerprint. */
|
|
352
|
+
export function normalizeAnalyticalExecutionFingerprint(value) {
|
|
353
|
+
return typeof value === 'string' && /^[a-f0-9]{64}$/i.test(value.trim())
|
|
354
|
+
? value.trim().toLowerCase()
|
|
355
|
+
: undefined;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Normalize a complete DQL execution receipt. A partial object or arbitrary
|
|
359
|
+
* identifier is deliberately not execution evidence.
|
|
360
|
+
*/
|
|
361
|
+
export function normalizeAnalyticalExecutionReceipt(value) {
|
|
362
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
363
|
+
return undefined;
|
|
364
|
+
const record = value;
|
|
365
|
+
const sourceFingerprint = normalizeAnalyticalExecutionFingerprint(record.sourceFingerprint);
|
|
366
|
+
const compiledSqlFingerprint = normalizeAnalyticalExecutionFingerprint(record.compiledSqlFingerprint);
|
|
367
|
+
const parameterFingerprint = normalizeAnalyticalExecutionFingerprint(record.parameterFingerprint);
|
|
368
|
+
const resultFingerprint = normalizeAnalyticalExecutionFingerprint(record.resultFingerprint);
|
|
369
|
+
return sourceFingerprint && compiledSqlFingerprint && parameterFingerprint && resultFingerprint
|
|
370
|
+
? { sourceFingerprint, compiledSqlFingerprint, parameterFingerprint, resultFingerprint }
|
|
371
|
+
: undefined;
|
|
372
|
+
}
|
|
373
|
+
export function buildCoverageGap(input) {
|
|
374
|
+
return { version: 1, ...input };
|
|
375
|
+
}
|
|
376
|
+
function columnName(value) {
|
|
377
|
+
if (typeof value === 'string')
|
|
378
|
+
return value;
|
|
379
|
+
if (value && typeof value === 'object' && typeof value.name === 'string') {
|
|
380
|
+
return String(value.name);
|
|
381
|
+
}
|
|
382
|
+
return String(value ?? 'column');
|
|
383
|
+
}
|
|
384
|
+
function objectRowColumns(rows) {
|
|
385
|
+
const columns = new Set();
|
|
386
|
+
for (const row of rows) {
|
|
387
|
+
if (!row || typeof row !== 'object' || Array.isArray(row))
|
|
388
|
+
continue;
|
|
389
|
+
for (const column of Object.keys(row))
|
|
390
|
+
columns.add(column);
|
|
391
|
+
}
|
|
392
|
+
return [...columns];
|
|
393
|
+
}
|
|
394
|
+
function firstArrayRow(rows) {
|
|
395
|
+
const row = rows.find((candidate) => Array.isArray(candidate));
|
|
396
|
+
return row;
|
|
397
|
+
}
|
|
398
|
+
function normalizeRow(row, columns) {
|
|
399
|
+
if (Array.isArray(row))
|
|
400
|
+
return Object.fromEntries(columns.map((column, index) => [column, row[index]]));
|
|
401
|
+
if (row && typeof row === 'object') {
|
|
402
|
+
const record = row;
|
|
403
|
+
return Object.fromEntries(columns.map((column) => [column, record[column]]));
|
|
404
|
+
}
|
|
405
|
+
return Object.fromEntries(columns.map((column) => [column, undefined]));
|
|
406
|
+
}
|
|
407
|
+
function stableFingerprint(value) {
|
|
408
|
+
const text = stableStringify(value);
|
|
409
|
+
return createHash('sha256').update(text).digest('hex');
|
|
410
|
+
}
|
|
411
|
+
function stableStringify(value) {
|
|
412
|
+
if (value === null || typeof value !== 'object')
|
|
413
|
+
return JSON.stringify(value);
|
|
414
|
+
if (Array.isArray(value))
|
|
415
|
+
return `[${value.map(stableStringify).join(',')}]`;
|
|
416
|
+
const record = value;
|
|
417
|
+
return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`).join(',')}}`;
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=analytical-orchestration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytical-orchestration.js","sourceRoot":"","sources":["../src/analytical-orchestration.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ export type AnalyticalNarrativeValidationResult = {
|
|
|
56
56
|
citedFactIds: string[];
|
|
57
57
|
} | {
|
|
58
58
|
status: 'invalid';
|
|
59
|
-
code: 'UNKNOWN_FACT' | 'UNSUPPORTED_NUMBER' | 'CAUSAL_CLAIM' | 'MATERIAL_CAVEAT_HIDDEN';
|
|
59
|
+
code: 'UNKNOWN_FACT' | 'UNSUPPORTED_NUMBER' | 'CAUSAL_CLAIM' | 'MATERIAL_CAVEAT_HIDDEN' | 'ABSENCE_CLAIM';
|
|
60
60
|
reason: string;
|
|
61
61
|
claimId?: string;
|
|
62
62
|
};
|
|
@@ -76,4 +76,57 @@ export declare function validateAnalyticalNarrativeClaims(input: {
|
|
|
76
76
|
factSet: AnalyticalResultFactSetV1;
|
|
77
77
|
claims: AnalyticalNarrativeClaimV1[];
|
|
78
78
|
}): AnalyticalNarrativeValidationResult;
|
|
79
|
+
/**
|
|
80
|
+
* Serialize the fact set for a model that must cite it.
|
|
81
|
+
*
|
|
82
|
+
* This is deliberately NOT `renderDeterministicAnalyticalNarrative`: it carries
|
|
83
|
+
* fact ids so `validateAnalyticalNarrativeClaims` can resolve every citation,
|
|
84
|
+
* and it never joins values into prose. The model reads facts and writes
|
|
85
|
+
* sentences; it does not get to invent numbers, because any numeric token that
|
|
86
|
+
* is not present in a cited fact is rejected as `UNSUPPORTED_NUMBER`.
|
|
87
|
+
*/
|
|
88
|
+
export declare function renderAnalyticalFactBrief(input: {
|
|
89
|
+
frame: AnalyticalQuestionFrameV2;
|
|
90
|
+
factSet: AnalyticalResultFactSetV1;
|
|
91
|
+
maxFacts?: number;
|
|
92
|
+
}): string;
|
|
93
|
+
/**
|
|
94
|
+
* Parse the model's claim payload. Prose without explicit `factIds` cannot be
|
|
95
|
+
* verified — the validator resolves every id against the fact map — so a strict
|
|
96
|
+
* JSON contract is the only shape that can be checked rather than trusted.
|
|
97
|
+
*/
|
|
98
|
+
export declare function parseAnalyticalNarrativeClaims(raw: string): AnalyticalNarrativeClaimV1[] | undefined;
|
|
99
|
+
export interface ComposedAnalyticalNarrative {
|
|
100
|
+
narrative: AnalyticalNarrativeV1;
|
|
101
|
+
source: 'llm' | 'deterministic';
|
|
102
|
+
/** Validation codes that forced the deterministic floor, newest last. */
|
|
103
|
+
validationFailures: string[];
|
|
104
|
+
attempts: number;
|
|
105
|
+
}
|
|
106
|
+
export interface AnalyticalNarrativeCompletion {
|
|
107
|
+
(input: {
|
|
108
|
+
system: string;
|
|
109
|
+
user: string;
|
|
110
|
+
}): Promise<string>;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Compose the answer prose for an analytical result: the model drafts, the fact
|
|
114
|
+
* set verifies, and the deterministic render is the floor.
|
|
115
|
+
*
|
|
116
|
+
* The deterministic join used to BE the answer, which is why an ordinary Ask
|
|
117
|
+
* returned `label: value label: value`. It is still the guaranteed fallback, but
|
|
118
|
+
* it is now the last resort rather than the default, and a fallback caused by a
|
|
119
|
+
* failed verification is labelled so it is never silently mistaken for prose.
|
|
120
|
+
*
|
|
121
|
+
* With no `complete`, behaviour is byte-identical to the old deterministic path,
|
|
122
|
+
* which is what keeps every non-Ask consumer unchanged.
|
|
123
|
+
*/
|
|
124
|
+
export declare function composeVerifiedAnalyticalNarrative(input: {
|
|
125
|
+
frame: AnalyticalQuestionFrameV2;
|
|
126
|
+
factSet: AnalyticalResultFactSetV1;
|
|
127
|
+
question: string;
|
|
128
|
+
complete?: AnalyticalNarrativeCompletion;
|
|
129
|
+
maxAttempts?: number;
|
|
130
|
+
maxRows?: number;
|
|
131
|
+
}): Promise<ComposedAnalyticalNarrative>;
|
|
79
132
|
//# sourceMappingURL=analytical-result-facts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytical-result-facts.d.ts","sourceRoot":"","sources":["../src/analytical-result-facts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EACV,0BAA0B,EAC1B,4BAA4B,EAC7B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,wBAAwB,GAChC,OAAO,GACP,cAAc,GACd,OAAO,GACP,eAAe,GACf,MAAM,GACN,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,EACD,wBAAwB,GACxB,wBAAwB,GACxB,0BAA0B,GAC1B,6BAA6B,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,sBAAsB,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,gCAAgC,GACxC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,yBAAyB,CAAA;CAAE,GACvD;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,kBAAkB,GAAG,0BAA0B,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAED,MAAM,MAAM,mCAAmC,GAC3C;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAC3C;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,cAAc,GAAG,oBAAoB,GAAG,cAAc,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"analytical-result-facts.d.ts","sourceRoot":"","sources":["../src/analytical-result-facts.ts"],"names":[],"mappings":"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"}
|