@duckcodeailabs/dql-agent 1.9.5 → 1.10.1
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 +13 -0
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +65 -2
- package/dist/agent-run-engine.js.map +1 -1
- package/dist/analytical-compatibility.d.ts +61 -0
- package/dist/analytical-compatibility.d.ts.map +1 -0
- package/dist/analytical-compatibility.js +515 -0
- package/dist/analytical-compatibility.js.map +1 -0
- package/dist/analytical-execution-graph.d.ts +174 -0
- package/dist/analytical-execution-graph.d.ts.map +1 -0
- package/dist/analytical-execution-graph.js +599 -0
- package/dist/analytical-execution-graph.js.map +1 -0
- package/dist/analytical-failure-repair.d.ts +91 -0
- package/dist/analytical-failure-repair.d.ts.map +1 -0
- package/dist/analytical-failure-repair.js +325 -0
- package/dist/analytical-failure-repair.js.map +1 -0
- package/dist/analytical-frame.d.ts +19 -0
- package/dist/analytical-frame.d.ts.map +1 -0
- package/dist/analytical-frame.js +299 -0
- package/dist/analytical-frame.js.map +1 -0
- package/dist/analytical-period-resolution.d.ts +53 -0
- package/dist/analytical-period-resolution.d.ts.map +1 -0
- package/dist/analytical-period-resolution.js +218 -0
- package/dist/analytical-period-resolution.js.map +1 -0
- package/dist/analytical-readiness.d.ts +17 -0
- package/dist/analytical-readiness.d.ts.map +1 -0
- package/dist/analytical-readiness.js +95 -0
- package/dist/analytical-readiness.js.map +1 -0
- package/dist/analytical-result-facts.d.ts +79 -0
- package/dist/analytical-result-facts.d.ts.map +1 -0
- package/dist/analytical-result-facts.js +301 -0
- package/dist/analytical-result-facts.js.map +1 -0
- package/dist/answer-loop.d.ts +82 -2
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +1129 -38
- package/dist/answer-loop.js.map +1 -1
- package/dist/embeddings/provider.d.ts +1 -1
- package/dist/embeddings/provider.d.ts.map +1 -1
- package/dist/embeddings/provider.js.map +1 -1
- package/dist/governed-relational-compiler.d.ts +189 -0
- package/dist/governed-relational-compiler.d.ts.map +1 -0
- package/dist/governed-relational-compiler.js +458 -0
- package/dist/governed-relational-compiler.js.map +1 -0
- package/dist/index.d.ts +25 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/intent-controller.d.ts +5 -0
- package/dist/intent-controller.d.ts.map +1 -1
- package/dist/intent-controller.js.map +1 -1
- package/dist/kg/build.d.ts +2 -2
- package/dist/kg/build.d.ts.map +1 -1
- package/dist/kg/build.js +329 -9
- package/dist/kg/build.js.map +1 -1
- package/dist/meaning-resolution.d.ts +17 -0
- package/dist/meaning-resolution.d.ts.map +1 -1
- package/dist/meaning-resolution.js +83 -4
- package/dist/meaning-resolution.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts.map +1 -1
- package/dist/metadata/analysis-planner.js +37 -7
- package/dist/metadata/analysis-planner.js.map +1 -1
- package/dist/metadata/catalog.d.ts +86 -3
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +607 -36
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/meaning-evidence.d.ts +18 -2
- package/dist/metadata/meaning-evidence.d.ts.map +1 -1
- package/dist/metadata/meaning-evidence.js +182 -7
- package/dist/metadata/meaning-evidence.js.map +1 -1
- package/dist/plan-execution-adapter.d.ts +131 -0
- package/dist/plan-execution-adapter.d.ts.map +1 -0
- package/dist/plan-execution-adapter.js +447 -0
- package/dist/plan-execution-adapter.js.map +1 -0
- package/dist/research-governance.d.ts +56 -0
- package/dist/research-governance.d.ts.map +1 -0
- package/dist/research-governance.js +68 -0
- package/dist/research-governance.js.map +1 -0
- package/dist/research-loop.d.ts +14 -0
- package/dist/research-loop.d.ts.map +1 -1
- package/dist/research-loop.js +77 -23
- package/dist/research-loop.js.map +1 -1
- package/dist/resolved-analytical-plan.d.ts +123 -0
- package/dist/resolved-analytical-plan.d.ts.map +1 -0
- package/dist/resolved-analytical-plan.js +400 -0
- package/dist/resolved-analytical-plan.js.map +1 -0
- package/dist/router.d.ts +3 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +195 -25
- package/dist/router.js.map +1 -1
- package/dist/skills/loader.d.ts +17 -0
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +62 -4
- package/dist/skills/loader.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type AnalyticalFailureCode, type AnalyticalFailurePhase, type AnalyticalFailureV1, type AnalyticalRepairChange, type AnalyticalRepairTrustTransition, type AnalyticalTrustState } from '@duckcodeailabs/dql-core';
|
|
2
|
+
/**
|
|
3
|
+
* Stable diagnostics and immutable repair derivations for RFC 0005.
|
|
4
|
+
* Acceptance: API-007, SEC-004.
|
|
5
|
+
*/
|
|
6
|
+
export interface AnalyticalFailedBindingInput {
|
|
7
|
+
qualifiedId?: string;
|
|
8
|
+
role?: string;
|
|
9
|
+
reasonCode?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CreateAnalyticalFailureInput {
|
|
12
|
+
error?: unknown;
|
|
13
|
+
code?: AnalyticalFailureCode;
|
|
14
|
+
phase: AnalyticalFailurePhase;
|
|
15
|
+
snapshotId: string;
|
|
16
|
+
runId?: string;
|
|
17
|
+
planFingerprint?: string;
|
|
18
|
+
dqlSource?: string;
|
|
19
|
+
dqlFingerprint?: string;
|
|
20
|
+
compiledSql?: string;
|
|
21
|
+
sqlFingerprint?: string;
|
|
22
|
+
failedBindings?: AnalyticalFailedBindingInput[];
|
|
23
|
+
}
|
|
24
|
+
export type AnalyticalRepairAction = 'retry_same_plan' | 'parameter_rerun' | 'refresh_snapshot' | 'edit_dql' | 'open_sql_notebook' | 'change_authorized_connection' | 'request_access' | 'save_draft_block';
|
|
25
|
+
export interface AnalyticalFailedRunV1 {
|
|
26
|
+
version: 1;
|
|
27
|
+
runId: string;
|
|
28
|
+
snapshotId: string;
|
|
29
|
+
route: 'certified' | 'semantic' | 'governed_sql' | 'generated_sql';
|
|
30
|
+
trustState: AnalyticalTrustState;
|
|
31
|
+
planFingerprint: string;
|
|
32
|
+
dqlSource?: string;
|
|
33
|
+
dqlFingerprint?: string;
|
|
34
|
+
compiledSql?: string;
|
|
35
|
+
sqlFingerprint?: string;
|
|
36
|
+
failure: AnalyticalFailureV1;
|
|
37
|
+
}
|
|
38
|
+
export interface AnalyticalRepairRequestV1 {
|
|
39
|
+
version: 1;
|
|
40
|
+
action: AnalyticalRepairAction;
|
|
41
|
+
parameterValues?: Record<string, unknown>;
|
|
42
|
+
dqlSource?: string;
|
|
43
|
+
sqlText?: string;
|
|
44
|
+
refreshedSnapshotId?: string;
|
|
45
|
+
authorizedConnectionFingerprint?: string;
|
|
46
|
+
governedValidationPassed?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface AnalyticalRepairDerivationV1 {
|
|
49
|
+
version: 1;
|
|
50
|
+
derivationId: string;
|
|
51
|
+
sourceRunId: string;
|
|
52
|
+
derivedRunId: string;
|
|
53
|
+
action: AnalyticalRepairAction;
|
|
54
|
+
change: AnalyticalRepairChange;
|
|
55
|
+
snapshotId: string;
|
|
56
|
+
planFingerprint: string;
|
|
57
|
+
sourceFailureId: string;
|
|
58
|
+
sourceDqlFingerprint?: string;
|
|
59
|
+
sourceSqlFingerprint?: string;
|
|
60
|
+
derivedDqlSource?: string;
|
|
61
|
+
derivedDqlFingerprint?: string;
|
|
62
|
+
notebookSqlText?: string;
|
|
63
|
+
derivedSqlFingerprint?: string;
|
|
64
|
+
parameterFingerprint?: string;
|
|
65
|
+
authorizedConnectionFingerprint?: string;
|
|
66
|
+
trustTransition: AnalyticalRepairTrustTransition;
|
|
67
|
+
requiresRecompile: boolean;
|
|
68
|
+
requiresExecution: boolean;
|
|
69
|
+
routeLocked: true;
|
|
70
|
+
permissionsExpanded: false;
|
|
71
|
+
}
|
|
72
|
+
export type AnalyticalRepairDerivationResult = {
|
|
73
|
+
status: 'ready';
|
|
74
|
+
derivation: AnalyticalRepairDerivationV1;
|
|
75
|
+
} | {
|
|
76
|
+
status: 'blocked';
|
|
77
|
+
code: 'ACTION_NOT_ALLOWED' | 'PERMISSION_FAILURE_TERMINAL' | 'REPAIR_INPUT_REQUIRED' | 'SOURCE_FINGERPRINT_MISMATCH';
|
|
78
|
+
reason: string;
|
|
79
|
+
};
|
|
80
|
+
/** Classify an adapter/compiler error without exposing its raw text. */
|
|
81
|
+
export declare function classifyAnalyticalFailure(error: unknown, fallback?: AnalyticalFailureCode): AnalyticalFailureCode;
|
|
82
|
+
/** Create the one redacted failure envelope returned by every analytical surface. */
|
|
83
|
+
export declare function createAnalyticalFailure(input: CreateAnalyticalFailureInput): AnalyticalFailureV1;
|
|
84
|
+
/**
|
|
85
|
+
* Derive a repair from an immutable failed run. This function never retrieves,
|
|
86
|
+
* reroutes, executes, mutates the source run, or expands permissions.
|
|
87
|
+
*/
|
|
88
|
+
export declare function deriveAnalyticalRepair(source: AnalyticalFailedRunV1, request: AnalyticalRepairRequestV1): AnalyticalRepairDerivationResult;
|
|
89
|
+
/** Redact untrusted diagnostics before logs or traces display them. */
|
|
90
|
+
export declare function redactAnalyticalDiagnostic(value: unknown): string;
|
|
91
|
+
//# sourceMappingURL=analytical-failure-repair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytical-failure-repair.d.ts","sourceRoot":"","sources":["../src/analytical-failure-repair.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { analyticalRepairTrustTransition, } from '@duckcodeailabs/dql-core';
|
|
3
|
+
const ERROR_CODE_ALIASES = {
|
|
4
|
+
'42P01': 'RELATION_NOT_FOUND',
|
|
5
|
+
'42P10': 'AMBIGUOUS_COLUMN',
|
|
6
|
+
'42702': 'AMBIGUOUS_COLUMN',
|
|
7
|
+
'42703': 'COLUMN_NOT_FOUND',
|
|
8
|
+
'42501': 'PERMISSION_DENIED',
|
|
9
|
+
EACCES: 'PERMISSION_DENIED',
|
|
10
|
+
ER_ACCESS_DENIED_ERROR: 'PERMISSION_DENIED',
|
|
11
|
+
COLUMN_NOT_FOUND: 'COLUMN_NOT_FOUND',
|
|
12
|
+
RELATION_NOT_FOUND: 'RELATION_NOT_FOUND',
|
|
13
|
+
TABLE_NOT_FOUND: 'RELATION_NOT_FOUND',
|
|
14
|
+
PERMISSION_DENIED: 'PERMISSION_DENIED',
|
|
15
|
+
ACCESS_DENIED: 'PERMISSION_DENIED',
|
|
16
|
+
AMBIGUOUS_COLUMN: 'AMBIGUOUS_COLUMN',
|
|
17
|
+
DIALECT_ERROR: 'DIALECT_ERROR',
|
|
18
|
+
SYNTAX_ERROR: 'DIALECT_ERROR',
|
|
19
|
+
SNAPSHOT_DRIFT: 'SNAPSHOT_DRIFT',
|
|
20
|
+
SOURCE_CHANGED: 'SNAPSHOT_DRIFT',
|
|
21
|
+
TIMEOUT: 'TIMEOUT',
|
|
22
|
+
ETIMEDOUT: 'TIMEOUT',
|
|
23
|
+
RESULT_CONTRACT_MISMATCH: 'RESULT_CONTRACT_MISMATCH',
|
|
24
|
+
COMPILATION_FAILED: 'COMPILATION_FAILED',
|
|
25
|
+
POLICY_DENIED: 'POLICY_DENIED',
|
|
26
|
+
};
|
|
27
|
+
const SAFE_FAILURES = {
|
|
28
|
+
COLUMN_NOT_FOUND: {
|
|
29
|
+
message: 'A governed column required by the selected plan is unavailable.',
|
|
30
|
+
recoverability: 'refresh_snapshot',
|
|
31
|
+
safeActions: ['refresh_snapshot', 'edit_dql', 'open_sql_notebook'],
|
|
32
|
+
},
|
|
33
|
+
RELATION_NOT_FOUND: {
|
|
34
|
+
message: 'A governed relation required by the selected plan is unavailable.',
|
|
35
|
+
recoverability: 'refresh_snapshot',
|
|
36
|
+
safeActions: ['refresh_snapshot', 'edit_dql', 'open_sql_notebook'],
|
|
37
|
+
},
|
|
38
|
+
PERMISSION_DENIED: {
|
|
39
|
+
message: 'The selected governed route was denied by the active warehouse permissions.',
|
|
40
|
+
recoverability: 'request_access',
|
|
41
|
+
safeActions: ['request_access', 'change_authorized_connection'],
|
|
42
|
+
},
|
|
43
|
+
AMBIGUOUS_COLUMN: {
|
|
44
|
+
message: 'The compiled statement contains a column reference the warehouse cannot resolve uniquely.',
|
|
45
|
+
recoverability: 'edit_dql',
|
|
46
|
+
safeActions: ['edit_dql', 'open_sql_notebook'],
|
|
47
|
+
},
|
|
48
|
+
DIALECT_ERROR: {
|
|
49
|
+
message: 'The selected route could not compile or execute in the configured warehouse dialect.',
|
|
50
|
+
recoverability: 'edit_dql',
|
|
51
|
+
safeActions: ['edit_dql', 'open_sql_notebook'],
|
|
52
|
+
},
|
|
53
|
+
SNAPSHOT_DRIFT: {
|
|
54
|
+
message: 'The executable plan no longer matches the active project snapshot.',
|
|
55
|
+
recoverability: 'refresh_snapshot',
|
|
56
|
+
safeActions: ['refresh_snapshot'],
|
|
57
|
+
},
|
|
58
|
+
TIMEOUT: {
|
|
59
|
+
message: 'The selected route exceeded its bounded execution time.',
|
|
60
|
+
recoverability: 'retry_same',
|
|
61
|
+
safeActions: ['retry_same_plan'],
|
|
62
|
+
},
|
|
63
|
+
RESULT_CONTRACT_MISMATCH: {
|
|
64
|
+
message: 'The result did not satisfy the selected plan output contract.',
|
|
65
|
+
recoverability: 'edit_dql',
|
|
66
|
+
safeActions: ['edit_dql', 'open_sql_notebook'],
|
|
67
|
+
},
|
|
68
|
+
COMPILATION_FAILED: {
|
|
69
|
+
message: 'The selected route could not compile its immutable analytical plan.',
|
|
70
|
+
recoverability: 'edit_dql',
|
|
71
|
+
safeActions: ['edit_dql', 'open_sql_notebook'],
|
|
72
|
+
},
|
|
73
|
+
POLICY_DENIED: {
|
|
74
|
+
message: 'Workspace policy does not authorize this analytical operation.',
|
|
75
|
+
recoverability: 'none',
|
|
76
|
+
safeActions: [],
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
const ACTION_TO_CHANGE = {
|
|
80
|
+
retry_same_plan: 'parameter_only',
|
|
81
|
+
parameter_rerun: 'parameter_only',
|
|
82
|
+
refresh_snapshot: 'snapshot_refresh',
|
|
83
|
+
edit_dql: 'dql_source',
|
|
84
|
+
open_sql_notebook: 'sql_text',
|
|
85
|
+
change_authorized_connection: 'connection_change',
|
|
86
|
+
request_access: 'connection_change',
|
|
87
|
+
save_draft_block: 'reviewed_draft_promotion',
|
|
88
|
+
};
|
|
89
|
+
/** Classify an adapter/compiler error without exposing its raw text. */
|
|
90
|
+
export function classifyAnalyticalFailure(error, fallback = 'COMPILATION_FAILED') {
|
|
91
|
+
const record = objectRecord(error);
|
|
92
|
+
const structured = [record?.code, record?.sqlState, record?.sqlstate, record?.name]
|
|
93
|
+
.find((candidate) => typeof candidate === 'string');
|
|
94
|
+
if (structured) {
|
|
95
|
+
const code = ERROR_CODE_ALIASES[structured.trim().toUpperCase()];
|
|
96
|
+
if (code)
|
|
97
|
+
return code;
|
|
98
|
+
}
|
|
99
|
+
const text = errorText(error).toLowerCase();
|
|
100
|
+
if (/permission denied|access denied|not authorized|insufficient privilege|forbidden/.test(text))
|
|
101
|
+
return 'PERMISSION_DENIED';
|
|
102
|
+
if (/ambiguous (column|field)|column reference .* ambiguous/.test(text))
|
|
103
|
+
return 'AMBIGUOUS_COLUMN';
|
|
104
|
+
if (/column .* (does not exist|not found|unknown)|unknown column|invalid identifier/.test(text))
|
|
105
|
+
return 'COLUMN_NOT_FOUND';
|
|
106
|
+
if (/(relation|table|view) .* (does not exist|not found|unknown)|unknown table/.test(text))
|
|
107
|
+
return 'RELATION_NOT_FOUND';
|
|
108
|
+
if (/snapshot .* (changed|stale|mismatch)|source changed|schema drift/.test(text))
|
|
109
|
+
return 'SNAPSHOT_DRIFT';
|
|
110
|
+
if (/timed? ?out|deadline exceeded|query timeout/.test(text))
|
|
111
|
+
return 'TIMEOUT';
|
|
112
|
+
if (/result contract|missing output|unexpected output|row bound|decimal value required/.test(text))
|
|
113
|
+
return 'RESULT_CONTRACT_MISMATCH';
|
|
114
|
+
if (/syntax error|parse error|parser error|unsupported dialect|dialect/.test(text))
|
|
115
|
+
return 'DIALECT_ERROR';
|
|
116
|
+
if (/policy denied|policy violation|blocked by policy/.test(text))
|
|
117
|
+
return 'POLICY_DENIED';
|
|
118
|
+
return fallback;
|
|
119
|
+
}
|
|
120
|
+
/** Create the one redacted failure envelope returned by every analytical surface. */
|
|
121
|
+
export function createAnalyticalFailure(input) {
|
|
122
|
+
const code = input.code ?? classifyAnalyticalFailure(input.error, fallbackCodeForPhase(input.phase));
|
|
123
|
+
const safe = SAFE_FAILURES[code];
|
|
124
|
+
const planFingerprint = cleanFingerprint(input.planFingerprint);
|
|
125
|
+
const dqlFingerprint = cleanFingerprint(input.dqlFingerprint) ?? fingerprintText(input.dqlSource);
|
|
126
|
+
const sqlFingerprint = cleanFingerprint(input.sqlFingerprint) ?? fingerprintText(input.compiledSql);
|
|
127
|
+
const snapshotId = input.snapshotId.trim() || 'snapshot-unavailable';
|
|
128
|
+
const failedBindings = normalizeFailedBindings(input.failedBindings, code);
|
|
129
|
+
const runId = input.runId?.trim() || stableId('analytical-run', {
|
|
130
|
+
snapshotId,
|
|
131
|
+
planFingerprint,
|
|
132
|
+
dqlFingerprint,
|
|
133
|
+
sqlFingerprint,
|
|
134
|
+
});
|
|
135
|
+
const failureId = stableId('analytical-failure', {
|
|
136
|
+
runId,
|
|
137
|
+
code,
|
|
138
|
+
phase: input.phase,
|
|
139
|
+
failedBindings,
|
|
140
|
+
planFingerprint,
|
|
141
|
+
dqlFingerprint,
|
|
142
|
+
sqlFingerprint,
|
|
143
|
+
});
|
|
144
|
+
return {
|
|
145
|
+
version: 1,
|
|
146
|
+
runId,
|
|
147
|
+
failureId,
|
|
148
|
+
code,
|
|
149
|
+
phase: input.phase,
|
|
150
|
+
message: safe.message,
|
|
151
|
+
recoverability: safe.recoverability,
|
|
152
|
+
failedBindings,
|
|
153
|
+
snapshotId,
|
|
154
|
+
...(planFingerprint ? { planFingerprint } : {}),
|
|
155
|
+
...(dqlFingerprint ? { dqlFingerprint } : {}),
|
|
156
|
+
...(sqlFingerprint ? { sqlFingerprint } : {}),
|
|
157
|
+
safeActions: [...safe.safeActions],
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Derive a repair from an immutable failed run. This function never retrieves,
|
|
162
|
+
* reroutes, executes, mutates the source run, or expands permissions.
|
|
163
|
+
*/
|
|
164
|
+
export function deriveAnalyticalRepair(source, request) {
|
|
165
|
+
if (request.version !== 1 || source.version !== 1) {
|
|
166
|
+
return { status: 'blocked', code: 'REPAIR_INPUT_REQUIRED', reason: 'Only v1 analytical repair inputs are supported.' };
|
|
167
|
+
}
|
|
168
|
+
const actionAllowed = source.failure.safeActions.includes(request.action)
|
|
169
|
+
|| (request.action === 'parameter_rerun'
|
|
170
|
+
&& source.route === 'certified'
|
|
171
|
+
&& source.failure.safeActions.includes('retry_same_plan'));
|
|
172
|
+
if (!actionAllowed) {
|
|
173
|
+
return { status: 'blocked', code: 'ACTION_NOT_ALLOWED', reason: 'The requested action is not allowed for this stable failure.' };
|
|
174
|
+
}
|
|
175
|
+
if (source.failure.code === 'PERMISSION_DENIED'
|
|
176
|
+
&& request.action !== 'request_access'
|
|
177
|
+
&& request.action !== 'change_authorized_connection') {
|
|
178
|
+
return {
|
|
179
|
+
status: 'blocked',
|
|
180
|
+
code: 'PERMISSION_FAILURE_TERMINAL',
|
|
181
|
+
reason: 'Permission denial is terminal for the selected route.',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
const change = ACTION_TO_CHANGE[request.action];
|
|
185
|
+
const inputGap = validateRepairInput(source, request);
|
|
186
|
+
if (inputGap)
|
|
187
|
+
return { status: 'blocked', code: 'REPAIR_INPUT_REQUIRED', reason: inputGap };
|
|
188
|
+
if (source.dqlSource && source.dqlFingerprint && fingerprintText(source.dqlSource) !== source.dqlFingerprint) {
|
|
189
|
+
return { status: 'blocked', code: 'SOURCE_FINGERPRINT_MISMATCH', reason: 'The immutable source DQL fingerprint does not match its retained text.' };
|
|
190
|
+
}
|
|
191
|
+
if (source.compiledSql && source.sqlFingerprint && fingerprintText(source.compiledSql) !== source.sqlFingerprint) {
|
|
192
|
+
return { status: 'blocked', code: 'SOURCE_FINGERPRINT_MISMATCH', reason: 'The immutable source SQL fingerprint does not match its retained text.' };
|
|
193
|
+
}
|
|
194
|
+
const snapshotId = request.refreshedSnapshotId?.trim() || source.snapshotId;
|
|
195
|
+
const derivedDqlSource = request.action === 'edit_dql' ? request.dqlSource.trim() : source.dqlSource;
|
|
196
|
+
const notebookSqlText = request.action === 'open_sql_notebook'
|
|
197
|
+
? (request.sqlText ?? source.compiledSql).trim()
|
|
198
|
+
: undefined;
|
|
199
|
+
const derivedDqlFingerprint = fingerprintText(derivedDqlSource);
|
|
200
|
+
const derivedSqlFingerprint = fingerprintText(notebookSqlText);
|
|
201
|
+
const parameterFingerprint = request.parameterValues ? fingerprintValue(request.parameterValues) : undefined;
|
|
202
|
+
const authorizedConnectionFingerprint = cleanFingerprint(request.authorizedConnectionFingerprint);
|
|
203
|
+
const trustTransition = analyticalRepairTrustTransition({
|
|
204
|
+
previous: source.trustState,
|
|
205
|
+
change,
|
|
206
|
+
governedValidationPassed: request.governedValidationPassed,
|
|
207
|
+
});
|
|
208
|
+
const derivationIdentity = {
|
|
209
|
+
sourceRunId: source.runId,
|
|
210
|
+
sourceFailureId: source.failure.failureId,
|
|
211
|
+
action: request.action,
|
|
212
|
+
snapshotId,
|
|
213
|
+
planFingerprint: source.planFingerprint,
|
|
214
|
+
derivedDqlFingerprint,
|
|
215
|
+
derivedSqlFingerprint,
|
|
216
|
+
parameterFingerprint,
|
|
217
|
+
authorizedConnectionFingerprint,
|
|
218
|
+
trustTransition,
|
|
219
|
+
};
|
|
220
|
+
const derivationId = stableId('analytical-derivation', derivationIdentity);
|
|
221
|
+
return {
|
|
222
|
+
status: 'ready',
|
|
223
|
+
derivation: {
|
|
224
|
+
version: 1,
|
|
225
|
+
derivationId,
|
|
226
|
+
sourceRunId: source.runId,
|
|
227
|
+
derivedRunId: stableId('analytical-run', derivationIdentity),
|
|
228
|
+
action: request.action,
|
|
229
|
+
change,
|
|
230
|
+
snapshotId,
|
|
231
|
+
planFingerprint: source.planFingerprint,
|
|
232
|
+
sourceFailureId: source.failure.failureId,
|
|
233
|
+
...(source.dqlFingerprint ? { sourceDqlFingerprint: source.dqlFingerprint } : {}),
|
|
234
|
+
...(source.sqlFingerprint ? { sourceSqlFingerprint: source.sqlFingerprint } : {}),
|
|
235
|
+
...(derivedDqlSource ? { derivedDqlSource } : {}),
|
|
236
|
+
...(derivedDqlFingerprint ? { derivedDqlFingerprint } : {}),
|
|
237
|
+
...(notebookSqlText ? { notebookSqlText } : {}),
|
|
238
|
+
...(derivedSqlFingerprint ? { derivedSqlFingerprint } : {}),
|
|
239
|
+
...(parameterFingerprint ? { parameterFingerprint } : {}),
|
|
240
|
+
...(authorizedConnectionFingerprint ? { authorizedConnectionFingerprint } : {}),
|
|
241
|
+
trustTransition,
|
|
242
|
+
requiresRecompile: request.action === 'edit_dql' || request.action === 'refresh_snapshot',
|
|
243
|
+
requiresExecution: request.action !== 'request_access' && request.action !== 'open_sql_notebook' && request.action !== 'save_draft_block',
|
|
244
|
+
routeLocked: true,
|
|
245
|
+
permissionsExpanded: false,
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/** Redact untrusted diagnostics before logs or traces display them. */
|
|
250
|
+
export function redactAnalyticalDiagnostic(value) {
|
|
251
|
+
return errorText(value)
|
|
252
|
+
.replace(/\b(?:postgres(?:ql)?|mysql|mariadb|sqlserver):\/\/[^\s]+/gi, '[REDACTED_CONNECTION]')
|
|
253
|
+
.replace(/\b(?:bearer\s+)?[A-Za-z0-9_-]{24,}\.[A-Za-z0-9_-]{12,}(?:\.[A-Za-z0-9_-]{12,})?/gi, '[REDACTED_TOKEN]')
|
|
254
|
+
.replace(/\b(password|passwd|pwd|token|api[_-]?key|secret)\s*[:=]\s*([^\s,;]+)/gi, '$1=[REDACTED]')
|
|
255
|
+
.replace(/'(?:''|[^'])*'/g, "'[REDACTED_VALUE]'")
|
|
256
|
+
.slice(0, 512);
|
|
257
|
+
}
|
|
258
|
+
function validateRepairInput(source, request) {
|
|
259
|
+
if (request.action === 'parameter_rerun' && !request.parameterValues)
|
|
260
|
+
return 'A parameter rerun requires explicit parameter values.';
|
|
261
|
+
if (request.action === 'edit_dql' && !request.dqlSource?.trim())
|
|
262
|
+
return 'A DQL repair requires derived DQL source.';
|
|
263
|
+
if (request.action === 'open_sql_notebook' && !request.sqlText?.trim() && !source.compiledSql?.trim()) {
|
|
264
|
+
return 'Opening SQL in Notebook requires retained or explicit SQL text.';
|
|
265
|
+
}
|
|
266
|
+
if (request.action === 'refresh_snapshot' && !request.refreshedSnapshotId?.trim())
|
|
267
|
+
return 'Snapshot repair requires the refreshed snapshot identity.';
|
|
268
|
+
if (request.action === 'change_authorized_connection' && !cleanFingerprint(request.authorizedConnectionFingerprint)) {
|
|
269
|
+
return 'Connection repair requires a redacted authorized connection fingerprint.';
|
|
270
|
+
}
|
|
271
|
+
return undefined;
|
|
272
|
+
}
|
|
273
|
+
function normalizeFailedBindings(bindings, code) {
|
|
274
|
+
const normalized = (bindings ?? []).map((binding) => ({
|
|
275
|
+
...(binding.qualifiedId?.trim() ? { qualifiedId: binding.qualifiedId.trim() } : {}),
|
|
276
|
+
...(binding.role?.trim() ? { role: binding.role.trim() } : {}),
|
|
277
|
+
reasonCode: binding.reasonCode?.trim() || code,
|
|
278
|
+
}));
|
|
279
|
+
return normalized.sort((left, right) => stableSerialize(left).localeCompare(stableSerialize(right)));
|
|
280
|
+
}
|
|
281
|
+
function fallbackCodeForPhase(phase) {
|
|
282
|
+
if (phase === 'result_validation')
|
|
283
|
+
return 'RESULT_CONTRACT_MISMATCH';
|
|
284
|
+
return 'COMPILATION_FAILED';
|
|
285
|
+
}
|
|
286
|
+
function errorText(error) {
|
|
287
|
+
if (error instanceof Error)
|
|
288
|
+
return `${error.name}: ${error.message}`;
|
|
289
|
+
if (typeof error === 'string')
|
|
290
|
+
return error;
|
|
291
|
+
const record = objectRecord(error);
|
|
292
|
+
if (typeof record?.message === 'string')
|
|
293
|
+
return record.message;
|
|
294
|
+
return 'Analytical operation failed.';
|
|
295
|
+
}
|
|
296
|
+
function objectRecord(value) {
|
|
297
|
+
return value !== null && typeof value === 'object' ? value : undefined;
|
|
298
|
+
}
|
|
299
|
+
function cleanFingerprint(value) {
|
|
300
|
+
const clean = value?.trim().toLowerCase();
|
|
301
|
+
return clean && /^[a-f0-9]{64}$/.test(clean) ? clean : undefined;
|
|
302
|
+
}
|
|
303
|
+
function fingerprintText(value) {
|
|
304
|
+
const clean = value?.trim();
|
|
305
|
+
return clean ? createHash('sha256').update(clean).digest('hex') : undefined;
|
|
306
|
+
}
|
|
307
|
+
function fingerprintValue(value) {
|
|
308
|
+
return createHash('sha256').update(stableSerialize(value)).digest('hex');
|
|
309
|
+
}
|
|
310
|
+
function stableId(prefix, value) {
|
|
311
|
+
return `${prefix}-${fingerprintValue(value).slice(0, 24)}`;
|
|
312
|
+
}
|
|
313
|
+
function stableSerialize(value) {
|
|
314
|
+
if (value === undefined || value === null)
|
|
315
|
+
return 'null';
|
|
316
|
+
if (typeof value === 'bigint')
|
|
317
|
+
return JSON.stringify(value.toString());
|
|
318
|
+
if (typeof value !== 'object')
|
|
319
|
+
return JSON.stringify(value);
|
|
320
|
+
if (Array.isArray(value))
|
|
321
|
+
return `[${value.map(stableSerialize).join(',')}]`;
|
|
322
|
+
const record = value;
|
|
323
|
+
return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${stableSerialize(record[key])}`).join(',')}}`;
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=analytical-failure-repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytical-failure-repair.js","sourceRoot":"","sources":["../src/analytical-failure-repair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,+BAA+B,GAQhC,MAAM,0BAA0B,CAAC;AAmGlC,MAAM,kBAAkB,GAA0C;IAChE,OAAO,EAAE,oBAAoB;IAC7B,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,mBAAmB;IAC5B,MAAM,EAAE,mBAAmB;IAC3B,sBAAsB,EAAE,mBAAmB;IAC3C,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,eAAe,EAAE,oBAAoB;IACrC,iBAAiB,EAAE,mBAAmB;IACtC,aAAa,EAAE,mBAAmB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,eAAe;IAC7B,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,wBAAwB,EAAE,0BAA0B;IACpD,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,eAAe;CAC/B,CAAC;AAEF,MAAM,aAAa,GAId;IACH,gBAAgB,EAAE;QAChB,OAAO,EAAE,iEAAiE;QAC1E,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,CAAC,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,CAAC;KACnE;IACD,kBAAkB,EAAE;QAClB,OAAO,EAAE,mEAAmE;QAC5E,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,CAAC,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,CAAC;KACnE;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,6EAA6E;QACtF,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;KAChE;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,2FAA2F;QACpG,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC;KAC/C;IACD,aAAa,EAAE;QACb,OAAO,EAAE,sFAAsF;QAC/F,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC;KAC/C;IACD,cAAc,EAAE;QACd,OAAO,EAAE,oEAAoE;QAC7E,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,CAAC,kBAAkB,CAAC;KAClC;IACD,OAAO,EAAE;QACP,OAAO,EAAE,yDAAyD;QAClE,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,CAAC,iBAAiB,CAAC;KACjC;IACD,wBAAwB,EAAE;QACxB,OAAO,EAAE,+DAA+D;QACxE,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC;KAC/C;IACD,kBAAkB,EAAE;QAClB,OAAO,EAAE,qEAAqE;QAC9E,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC;KAC/C;IACD,aAAa,EAAE;QACb,OAAO,EAAE,gEAAgE;QACzE,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,EAAE;KAChB;CACF,CAAC;AAEF,MAAM,gBAAgB,GAA2D;IAC/E,eAAe,EAAE,gBAAgB;IACjC,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,YAAY;IACtB,iBAAiB,EAAE,UAAU;IAC7B,4BAA4B,EAAE,mBAAmB;IACjD,cAAc,EAAE,mBAAmB;IACnC,gBAAgB,EAAE,0BAA0B;CAC7C,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,WAAkC,oBAAoB;IAC9G,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;SAChF,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAuB,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,iFAAiF,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,mBAAmB,CAAC;IAC7H,IAAI,wDAAwD,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACnG,IAAI,gFAAgF,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC3H,IAAI,2EAA2E,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACxH,IAAI,kEAAkE,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC3G,IAAI,6CAA6C,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/E,IAAI,mFAAmF,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,0BAA0B,CAAC;IACtI,IAAI,mEAAmE,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC;IAC3G,IAAI,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC;IAC1F,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,uBAAuB,CAAC,KAAmC;IACzE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACrG,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpG,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,sBAAsB,CAAC;IACrE,MAAM,cAAc,GAAG,uBAAuB,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,gBAAgB,EAAE;QAC9D,UAAU;QACV,eAAe;QACf,cAAc;QACd,cAAc;KACf,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,QAAQ,CAAC,oBAAoB,EAAE;QAC/C,KAAK;QACL,IAAI;QACJ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,cAAc;QACd,eAAe;QACf,cAAc;QACd,cAAc;KACf,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE,CAAC;QACV,KAAK;QACL,SAAS;QACT,IAAI;QACJ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,cAAc;QACd,UAAU;QACV,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAA6B,EAC7B,OAAkC;IAElC,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC;IACzH,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;WACpE,CACD,OAAO,CAAC,MAAM,KAAK,iBAAiB;eACjC,MAAM,CAAC,KAAK,KAAK,WAAW;eAC5B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAC1D,CAAC;IACJ,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,8DAA8D,EAAE,CAAC;IACnI,CAAC;IACD,IACE,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,mBAAmB;WACxC,OAAO,CAAC,MAAM,KAAK,gBAAgB;WACnC,OAAO,CAAC,MAAM,KAAK,8BAA8B,EACpD,CAAC;QACD,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,6BAA6B;YACnC,MAAM,EAAE,uDAAuD;SAChE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC5F,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC;QAC7G,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,6BAA6B,EAAE,MAAM,EAAE,wEAAwE,EAAE,CAAC;IACtJ,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC;QACjH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,6BAA6B,EAAE,MAAM,EAAE,wEAAwE,EAAE,CAAC;IACtJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC;IAC5E,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IACtG,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,KAAK,mBAAmB;QAC5D,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,CAAE,CAAC,IAAI,EAAE;QACjD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,qBAAqB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,MAAM,+BAA+B,GAAG,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAClG,MAAM,eAAe,GAAG,+BAA+B,CAAC;QACtD,QAAQ,EAAE,MAAM,CAAC,UAAU;QAC3B,MAAM;QACN,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;KAC3D,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG;QACzB,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;QACzC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU;QACV,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,qBAAqB;QACrB,qBAAqB;QACrB,oBAAoB;QACpB,+BAA+B;QAC/B,eAAe;KAChB,CAAC;IACF,MAAM,YAAY,GAAG,QAAQ,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;IAC3E,OAAO;QACL,MAAM,EAAE,OAAO;QACf,UAAU,EAAE;YACV,OAAO,EAAE,CAAC;YACV,YAAY;YACZ,WAAW,EAAE,MAAM,CAAC,KAAK;YACzB,YAAY,EAAE,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;YAC5D,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM;YACN,UAAU;YACV,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;YACzC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,+BAA+B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,eAAe;YACf,iBAAiB,EAAE,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB;YACzF,iBAAiB,EAAE,OAAO,CAAC,MAAM,KAAK,gBAAgB,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB;YACzI,WAAW,EAAE,IAAI;YACjB,mBAAmB,EAAE,KAAK;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,OAAO,SAAS,CAAC,KAAK,CAAC;SACpB,OAAO,CAAC,4DAA4D,EAAE,uBAAuB,CAAC;SAC9F,OAAO,CAAC,mFAAmF,EAAE,kBAAkB,CAAC;SAChH,OAAO,CAAC,wEAAwE,EAAE,eAAe,CAAC;SAClG,OAAO,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SAChD,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA6B,EAAE,OAAkC;IAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,IAAI,CAAC,OAAO,CAAC,eAAe;QAAE,OAAO,uDAAuD,CAAC;IACrI,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE;QAAE,OAAO,2CAA2C,CAAC;IACpH,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QACtG,OAAO,iEAAiE,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE;QAAE,OAAO,2DAA2D,CAAC;IACtJ,IAAI,OAAO,CAAC,MAAM,KAAK,8BAA8B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACpH,OAAO,0EAA0E,CAAC;IACpF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAoD,EAAE,IAA2B;IAChH,MAAM,UAAU,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI;KAC/C,CAAC,CAAC,CAAC;IACJ,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA6B;IACzD,IAAI,KAAK,KAAK,mBAAmB;QAAE,OAAO,0BAA0B,CAAC;IACrE,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC/D,OAAO,8BAA8B,CAAC;AACxC,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB;IACjD,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,OAAO,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5B,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,KAAc;IAC9C,OAAO,GAAG,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC7E,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5H,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero-provider construction of an RFC 0005 analytical frame from an already
|
|
3
|
+
* resolved metric, parsed request hints, retrieved semantic members, and an
|
|
4
|
+
* explicit normalized capability contract.
|
|
5
|
+
*
|
|
6
|
+
* This is intentionally conservative: unresolved roles become ambiguity or no
|
|
7
|
+
* frame instead of name-based execution authority.
|
|
8
|
+
*
|
|
9
|
+
* Acceptance: AGT-017, AGT-018.
|
|
10
|
+
*/
|
|
11
|
+
import { type AnalyticalQuestionFrameV2 } from '@duckcodeailabs/dql-core';
|
|
12
|
+
import { type AgentEvidenceCandidate, type AgentRetrievalEvidence } from './meaning-resolution.js';
|
|
13
|
+
export declare function buildDeterministicAnalyticalFrame(input: {
|
|
14
|
+
question: string;
|
|
15
|
+
evidence: AgentRetrievalEvidence;
|
|
16
|
+
metricCandidate: AgentEvidenceCandidate;
|
|
17
|
+
candidates: AgentEvidenceCandidate[];
|
|
18
|
+
}): AnalyticalQuestionFrameV2 | undefined;
|
|
19
|
+
//# sourceMappingURL=analytical-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytical-frame.d.ts","sourceRoot":"","sources":["../src/analytical-frame.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAwE,KAAK,yBAAyB,EAAiC,MAAM,0BAA0B,CAAC;AAC/K,OAAO,EAAwB,KAAK,sBAAsB,EAAE,KAAK,sBAAsB,EAA2B,MAAM,yBAAyB,CAAC;AAElJ,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,eAAe,EAAE,sBAAsB,CAAC;IACxC,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACtC,GAAG,yBAAyB,GAAG,SAAS,CAyNxC"}
|