@duckcodeailabs/dql-agent 1.14.1 → 1.14.3-rc.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 +71 -2
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +1048 -31
- package/dist/agent-run-engine.js.map +1 -1
- package/dist/agent-run-gates.d.ts.map +1 -1
- package/dist/agent-run-gates.js +12 -0
- package/dist/agent-run-gates.js.map +1 -1
- package/dist/agent-run-planner.d.ts +6 -0
- package/dist/agent-run-planner.d.ts.map +1 -1
- package/dist/agent-run-planner.js +2 -0
- package/dist/agent-run-planner.js.map +1 -1
- package/dist/agent-run-store.d.ts.map +1 -1
- package/dist/agent-run-store.js +48 -3
- package/dist/agent-run-store.js.map +1 -1
- package/dist/agentic/analyst-loop.d.ts +7 -1
- package/dist/agentic/analyst-loop.d.ts.map +1 -1
- package/dist/agentic/analyst-loop.js +211 -28
- package/dist/agentic/analyst-loop.js.map +1 -1
- package/dist/agentic/assumptions.d.ts +1 -1
- package/dist/agentic/assumptions.d.ts.map +1 -1
- package/dist/agentic/assumptions.js.map +1 -1
- package/dist/agentic/research/synthesis.d.ts +4 -0
- package/dist/agentic/research/synthesis.d.ts.map +1 -1
- package/dist/agentic/research/synthesis.js +23 -8
- package/dist/agentic/research/synthesis.js.map +1 -1
- package/dist/agentic/research-agent.d.ts.map +1 -1
- package/dist/agentic/research-agent.js +13 -3
- package/dist/agentic/research-agent.js.map +1 -1
- package/dist/agentic/sql-authorization.d.ts +8 -0
- package/dist/agentic/sql-authorization.d.ts.map +1 -1
- package/dist/agentic/sql-authorization.js +233 -2
- package/dist/agentic/sql-authorization.js.map +1 -1
- package/dist/analytical-compatibility.d.ts.map +1 -1
- package/dist/analytical-compatibility.js +8 -1
- package/dist/analytical-compatibility.js.map +1 -1
- package/dist/analytical-failure-repair.d.ts.map +1 -1
- package/dist/analytical-failure-repair.js +6 -2
- package/dist/analytical-failure-repair.js.map +1 -1
- package/dist/analytical-frame.d.ts +23 -1
- package/dist/analytical-frame.d.ts.map +1 -1
- package/dist/analytical-frame.js +332 -17
- package/dist/analytical-frame.js.map +1 -1
- package/dist/analytical-orchestration.d.ts +613 -0
- package/dist/analytical-orchestration.d.ts.map +1 -1
- package/dist/analytical-orchestration.js +1007 -0
- package/dist/analytical-orchestration.js.map +1 -1
- package/dist/answer-loop.d.ts +110 -6
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +1180 -125
- package/dist/answer-loop.js.map +1 -1
- package/dist/answer-shape.d.ts +32 -1
- package/dist/answer-shape.d.ts.map +1 -1
- package/dist/answer-shape.js +49 -3
- package/dist/answer-shape.js.map +1 -1
- package/dist/ask-observability/index.d.ts +11 -0
- package/dist/ask-observability/index.d.ts.map +1 -0
- package/dist/ask-observability/index.js +7 -0
- package/dist/ask-observability/index.js.map +1 -0
- package/dist/ask-observability/instrumentation.d.ts +35 -0
- package/dist/ask-observability/instrumentation.d.ts.map +1 -0
- package/dist/ask-observability/instrumentation.js +472 -0
- package/dist/ask-observability/instrumentation.js.map +1 -0
- package/dist/ask-observability/observer.d.ts +62 -0
- package/dist/ask-observability/observer.d.ts.map +1 -0
- package/dist/ask-observability/observer.js +537 -0
- package/dist/ask-observability/observer.js.map +1 -0
- package/dist/ask-observability/portable.d.ts +98 -0
- package/dist/ask-observability/portable.d.ts.map +1 -0
- package/dist/ask-observability/portable.js +527 -0
- package/dist/ask-observability/portable.js.map +1 -0
- package/dist/ask-observability/store.d.ts +130 -0
- package/dist/ask-observability/store.d.ts.map +1 -0
- package/dist/ask-observability/store.js +1114 -0
- package/dist/ask-observability/store.js.map +1 -0
- package/dist/ask-observability/types.d.ts +357 -0
- package/dist/ask-observability/types.d.ts.map +1 -0
- package/dist/ask-observability/types.js +2 -0
- package/dist/ask-observability/types.js.map +1 -0
- package/dist/ask-observability/utils.d.ts +21 -0
- package/dist/ask-observability/utils.d.ts.map +1 -0
- package/dist/ask-observability/utils.js +102 -0
- package/dist/ask-observability/utils.js.map +1 -0
- package/dist/conversation/snapshot.d.ts +20 -0
- package/dist/conversation/snapshot.d.ts.map +1 -1
- package/dist/conversation/snapshot.js +30 -1
- package/dist/conversation/snapshot.js.map +1 -1
- package/dist/fixtures/ask-ai-office-shaped.d.ts +153 -0
- package/dist/fixtures/ask-ai-office-shaped.d.ts.map +1 -0
- package/dist/fixtures/ask-ai-office-shaped.js +94 -0
- package/dist/fixtures/ask-ai-office-shaped.js.map +1 -0
- package/dist/generated-analytical-proposal.d.ts +37 -1
- package/dist/generated-analytical-proposal.d.ts.map +1 -1
- package/dist/generated-analytical-proposal.js +211 -3
- package/dist/generated-analytical-proposal.js.map +1 -1
- package/dist/governed-relational-compiler.d.ts +15 -0
- package/dist/governed-relational-compiler.d.ts.map +1 -1
- package/dist/governed-relational-compiler.js +99 -1
- package/dist/governed-relational-compiler.js.map +1 -1
- package/dist/index.d.ts +11 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/intent-controller.d.ts +38 -0
- package/dist/intent-controller.d.ts.map +1 -1
- package/dist/intent-controller.js +31 -1
- package/dist/intent-controller.js.map +1 -1
- package/dist/meaning-resolution.d.ts +141 -2
- package/dist/meaning-resolution.d.ts.map +1 -1
- package/dist/meaning-resolution.js +444 -30
- package/dist/meaning-resolution.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts.map +1 -1
- package/dist/metadata/analysis-planner.js +144 -7
- package/dist/metadata/analysis-planner.js.map +1 -1
- package/dist/metadata/block-fit.d.ts +18 -0
- package/dist/metadata/block-fit.d.ts.map +1 -1
- package/dist/metadata/block-fit.js +250 -38
- package/dist/metadata/block-fit.js.map +1 -1
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +58 -12
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/meaning-evidence.d.ts +19 -3
- package/dist/metadata/meaning-evidence.d.ts.map +1 -1
- package/dist/metadata/meaning-evidence.js +518 -54
- package/dist/metadata/meaning-evidence.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 +93 -13
- package/dist/plan-execution-adapter.js.map +1 -1
- package/dist/provider-egress.d.ts +24 -10
- package/dist/provider-egress.d.ts.map +1 -1
- package/dist/provider-egress.js +22 -17
- package/dist/provider-egress.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +10 -9
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/dispatch.d.ts +27 -1
- package/dist/providers/dispatch.d.ts.map +1 -1
- package/dist/providers/dispatch.js +63 -1
- package/dist/providers/dispatch.js.map +1 -1
- package/dist/providers/gemini.js +10 -10
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama.js +15 -15
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.js +22 -22
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +52 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/relationship-proof.d.ts +81 -0
- package/dist/relationship-proof.d.ts.map +1 -1
- package/dist/relationship-proof.js +228 -4
- package/dist/relationship-proof.js.map +1 -1
- package/dist/research-loop.d.ts.map +1 -1
- package/dist/research-loop.js +23 -1
- package/dist/research-loop.js.map +1 -1
- package/dist/resolved-analytical-plan.d.ts +22 -1
- package/dist/resolved-analytical-plan.d.ts.map +1 -1
- package/dist/resolved-analytical-plan.js +773 -49
- package/dist/resolved-analytical-plan.js.map +1 -1
- package/dist/router.d.ts +14 -4
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +3668 -425
- package/dist/router.js.map +1 -1
- package/dist/semantic-bridge/compose.d.ts.map +1 -1
- package/dist/semantic-bridge/compose.js +23 -4
- package/dist/semantic-bridge/compose.js.map +1 -1
- package/dist/semantic-bridge/member-select.d.ts.map +1 -1
- package/dist/semantic-bridge/member-select.js +39 -21
- package/dist/semantic-bridge/member-select.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
import { ASK_TRACE_SCHEMA_VERSION } from './types.js';
|
|
2
|
+
import { durationMs, fingerprint, isoNow, mintHexId } from './utils.js';
|
|
3
|
+
export const ASK_TRACE_OBSERVER_V1 = Symbol('dql.askTraceObserver.v1');
|
|
4
|
+
/**
|
|
5
|
+
* Explicit no-op is the universal failure mode. Callers must not need a
|
|
6
|
+
* conditional and an observability failure cannot influence the answer path.
|
|
7
|
+
*/
|
|
8
|
+
export const noOpAskTraceObserverV1 = Object.freeze({
|
|
9
|
+
recordingStatus: 'unavailable',
|
|
10
|
+
enabled: false,
|
|
11
|
+
startSpan: () => undefined,
|
|
12
|
+
finishSpan: () => { },
|
|
13
|
+
recordCandidateDecision: () => { },
|
|
14
|
+
recordLink: () => { },
|
|
15
|
+
finalize: () => undefined,
|
|
16
|
+
markPartial: () => { },
|
|
17
|
+
reference: () => undefined,
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* A skipped span normally documents an expected branch, rather than a failure.
|
|
21
|
+
* Only an explicit terminal/failure reason may make it the trace's first
|
|
22
|
+
* issue. This prevents an expected skipped meaning stage from eclipsing the
|
|
23
|
+
* authoritative cascade clarification or gap that follows it.
|
|
24
|
+
*/
|
|
25
|
+
const ISSUE_ELIGIBLE_SKIPPED_REASONS = new Set([
|
|
26
|
+
'meaning_rejected',
|
|
27
|
+
'snapshot_unavailable',
|
|
28
|
+
'source_stale',
|
|
29
|
+
'source_unavailable',
|
|
30
|
+
'cascade_ambiguous',
|
|
31
|
+
'cascade_unavailable',
|
|
32
|
+
'cascade_denied',
|
|
33
|
+
'post_freeze_failure',
|
|
34
|
+
'provider_failure',
|
|
35
|
+
'tool_failure',
|
|
36
|
+
'sql_denied',
|
|
37
|
+
'sql_failure',
|
|
38
|
+
'cancelled',
|
|
39
|
+
'interrupted',
|
|
40
|
+
'recording_failure',
|
|
41
|
+
'cap_reached',
|
|
42
|
+
]);
|
|
43
|
+
/** Exported for focused contract tests; never used as routing authority. */
|
|
44
|
+
export function isAskTraceIssueSpanV1(input) {
|
|
45
|
+
if (input.outcome === 'error' || input.outcome === 'denied' || input.outcome === 'unavailable' || input.outcome === 'interrupted' || input.outcome === 'cancelled')
|
|
46
|
+
return true;
|
|
47
|
+
return input.outcome === 'skipped' && ISSUE_ELIGIBLE_SKIPPED_REASONS.has(input.reasonCode);
|
|
48
|
+
}
|
|
49
|
+
function isFinishedAskTraceSpanV1(input) {
|
|
50
|
+
if (!input || typeof input !== 'object')
|
|
51
|
+
return false;
|
|
52
|
+
const record = input;
|
|
53
|
+
return typeof record.reasonCode === 'string'
|
|
54
|
+
&& (record.outcome === 'ok'
|
|
55
|
+
|| record.outcome === 'error'
|
|
56
|
+
|| record.outcome === 'denied'
|
|
57
|
+
|| record.outcome === 'cancelled'
|
|
58
|
+
|| record.outcome === 'skipped'
|
|
59
|
+
|| record.outcome === 'unavailable'
|
|
60
|
+
|| record.outcome === 'interrupted');
|
|
61
|
+
}
|
|
62
|
+
class BufferedAskTraceObserverV1 {
|
|
63
|
+
store;
|
|
64
|
+
traceId;
|
|
65
|
+
rootSpanId;
|
|
66
|
+
enabled = true;
|
|
67
|
+
envelope;
|
|
68
|
+
spans = new Map();
|
|
69
|
+
sequence = 0;
|
|
70
|
+
/** One random root seed yields collision-resistant unique child IDs per trace. */
|
|
71
|
+
spanSeed = 0n;
|
|
72
|
+
spanIdSequence = 0n;
|
|
73
|
+
candidateSequence = 0;
|
|
74
|
+
dropped = 0;
|
|
75
|
+
partial = false;
|
|
76
|
+
/** True only after the envelope itself is safely persisted. */
|
|
77
|
+
started = false;
|
|
78
|
+
finalized = false;
|
|
79
|
+
constructor(store, input) {
|
|
80
|
+
this.store = store;
|
|
81
|
+
const startedAtDate = input.now ? input.now() : new Date();
|
|
82
|
+
const now = startedAtDate.toISOString();
|
|
83
|
+
this.traceId = mintHexId(16);
|
|
84
|
+
this.rootSpanId = mintHexId(8);
|
|
85
|
+
this.spanSeed = BigInt(`0x${this.rootSpanId}`);
|
|
86
|
+
this.envelope = {
|
|
87
|
+
version: 1,
|
|
88
|
+
traceId: this.traceId,
|
|
89
|
+
rootSpanId: this.rootSpanId,
|
|
90
|
+
runId: input.runId,
|
|
91
|
+
surface: input.surface,
|
|
92
|
+
mode: input.mode,
|
|
93
|
+
...(input.threadId ? { threadId: fingerprint(input.threadId) } : {}),
|
|
94
|
+
...(input.snapshotId ? { snapshotId: input.snapshotId } : {}),
|
|
95
|
+
questionFingerprint: input.questionFingerprint,
|
|
96
|
+
status: 'running',
|
|
97
|
+
recordingStatus: 'recording',
|
|
98
|
+
startedAt: now,
|
|
99
|
+
spanCount: 1,
|
|
100
|
+
candidateDecisionCount: 0,
|
|
101
|
+
droppedRecordCount: 0,
|
|
102
|
+
...(input.parentTraceId ? { parentTraceId: input.parentTraceId } : {}),
|
|
103
|
+
...(input.parentRunId ? { parentRunId: input.parentRunId } : {}),
|
|
104
|
+
};
|
|
105
|
+
const begin = this.store.begin(this.envelope);
|
|
106
|
+
if (!begin.accepted) {
|
|
107
|
+
// Do not hand a caller an apparently-live observer when no envelope
|
|
108
|
+
// exists. The factory converts this exact start failure into the shared
|
|
109
|
+
// explicit no-op, preserving Ask's normal path and transport shape.
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
this.started = true;
|
|
113
|
+
const root = {
|
|
114
|
+
version: 1,
|
|
115
|
+
traceId: this.traceId,
|
|
116
|
+
spanId: this.rootSpanId,
|
|
117
|
+
ordinal: this.sequence++,
|
|
118
|
+
name: input.mode === 'research' ? 'research.run' : 'ask.run',
|
|
119
|
+
stage: 'request',
|
|
120
|
+
startedAt: now,
|
|
121
|
+
outcome: 'ok',
|
|
122
|
+
reasonCode: 'started',
|
|
123
|
+
payload: { kind: 'stage', requestedMode: input.mode, fingerprint: input.questionFingerprint },
|
|
124
|
+
startedAtMs: startedAtDate.getTime(),
|
|
125
|
+
};
|
|
126
|
+
this.spans.set(this.rootSpanId, root);
|
|
127
|
+
const rootResult = this.store.appendSpan(root);
|
|
128
|
+
if (!rootResult.accepted)
|
|
129
|
+
this.markPartial('recording_failure', storeAlreadyRecordedDrop(rootResult.dropped));
|
|
130
|
+
}
|
|
131
|
+
get recordingStatus() {
|
|
132
|
+
return this.finalized ? this.envelope.recordingStatus : this.partial ? 'partial' : 'recording';
|
|
133
|
+
}
|
|
134
|
+
get initialized() {
|
|
135
|
+
return this.started;
|
|
136
|
+
}
|
|
137
|
+
startSpan(input) {
|
|
138
|
+
if (this.finalized)
|
|
139
|
+
return undefined;
|
|
140
|
+
try {
|
|
141
|
+
const spanId = this.mintChildSpanId();
|
|
142
|
+
const started = input.startedAt ? undefined : new Date();
|
|
143
|
+
const startedAt = input.startedAt ?? started.toISOString();
|
|
144
|
+
const span = {
|
|
145
|
+
version: 1,
|
|
146
|
+
traceId: this.traceId,
|
|
147
|
+
spanId,
|
|
148
|
+
parentSpanId: input.parentSpanId ?? this.rootSpanId,
|
|
149
|
+
ordinal: this.sequence++,
|
|
150
|
+
name: input.name,
|
|
151
|
+
stage: input.stage,
|
|
152
|
+
startedAt,
|
|
153
|
+
startedAtMs: input.startedAt ? Date.parse(input.startedAt) : started.getTime(),
|
|
154
|
+
outcome: 'ok',
|
|
155
|
+
reasonCode: input.reasonCode ?? 'started',
|
|
156
|
+
payload: input.payload,
|
|
157
|
+
};
|
|
158
|
+
this.spans.set(spanId, span);
|
|
159
|
+
// Most logical stages complete synchronously in the same call stack. A
|
|
160
|
+
// start record followed immediately by its finish was previously pushed
|
|
161
|
+
// through the producer twice only to be coalesced before SQLite. Retain
|
|
162
|
+
// the authoritative start timestamp in memory and persist one completed
|
|
163
|
+
// span at the physical completion boundary. The root span is still
|
|
164
|
+
// admitted at run start, so a process restart continues to expose an
|
|
165
|
+
// interrupted run even when no child stage could complete.
|
|
166
|
+
return spanId;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
this.markPartial('recording_failure');
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
finishSpan(spanId, input = {}) {
|
|
174
|
+
if (!spanId || this.finalized)
|
|
175
|
+
return;
|
|
176
|
+
const previous = this.spans.get(spanId);
|
|
177
|
+
if (!previous)
|
|
178
|
+
return;
|
|
179
|
+
try {
|
|
180
|
+
const completed = input.completedAt ? undefined : new Date();
|
|
181
|
+
const completedAt = input.completedAt ?? completed.toISOString();
|
|
182
|
+
const completedAtMs = input.completedAt ? Date.parse(input.completedAt) : completed.getTime();
|
|
183
|
+
const outcome = input.outcome ?? 'ok';
|
|
184
|
+
const reasonCode = input.reasonCode ?? (outcome === 'ok' ? 'completed' : outcome === 'cancelled' ? 'cancelled' : 'unknown');
|
|
185
|
+
const next = {
|
|
186
|
+
version: 1,
|
|
187
|
+
traceId: this.traceId,
|
|
188
|
+
spanId,
|
|
189
|
+
...(previous.parentSpanId ? { parentSpanId: previous.parentSpanId } : {}),
|
|
190
|
+
ordinal: previous.ordinal,
|
|
191
|
+
name: previous.name,
|
|
192
|
+
stage: previous.stage,
|
|
193
|
+
startedAt: previous.startedAt,
|
|
194
|
+
startedAtMs: previous.startedAtMs,
|
|
195
|
+
completedAt,
|
|
196
|
+
durationMs: elapsedDurationMs(previous.startedAtMs, completedAtMs, previous.startedAt, completedAt),
|
|
197
|
+
outcome,
|
|
198
|
+
reasonCode,
|
|
199
|
+
payload: input.payload ?? previous.payload,
|
|
200
|
+
};
|
|
201
|
+
this.spans.set(spanId, next);
|
|
202
|
+
const result = this.store.appendSpan(next);
|
|
203
|
+
if (!result.accepted)
|
|
204
|
+
this.markPartial(result.dropped === 'detail_cap' ? 'cap_reached' : 'recording_failure', storeAlreadyRecordedDrop(result.dropped));
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
this.markPartial('recording_failure');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
recordCandidateDecision(input) {
|
|
211
|
+
if (this.finalized)
|
|
212
|
+
return;
|
|
213
|
+
try {
|
|
214
|
+
const result = this.store.appendCandidate({ version: 1, traceId: this.traceId, sequence: this.candidateSequence++, ...input });
|
|
215
|
+
if (!result.accepted)
|
|
216
|
+
this.markPartial(result.dropped === 'candidate_cap' || result.dropped === 'detail_cap' ? 'cap_reached' : 'recording_failure', storeAlreadyRecordedDrop(result.dropped));
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
this.markPartial('recording_failure');
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
recordLink(input) {
|
|
223
|
+
if (this.finalized)
|
|
224
|
+
return;
|
|
225
|
+
try {
|
|
226
|
+
const result = this.store.appendLink({
|
|
227
|
+
version: 1,
|
|
228
|
+
sourceTraceId: this.traceId,
|
|
229
|
+
sourceRunId: this.envelope.runId,
|
|
230
|
+
createdAt: isoNow(),
|
|
231
|
+
...input,
|
|
232
|
+
});
|
|
233
|
+
if (!result.accepted)
|
|
234
|
+
this.markPartial('recording_failure', storeAlreadyRecordedDrop(result.dropped));
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
this.markPartial('recording_failure');
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
finalize(input) {
|
|
241
|
+
if (this.finalized)
|
|
242
|
+
return this.reference();
|
|
243
|
+
this.finalized = true;
|
|
244
|
+
const droppedReader = this.store.droppedRecordCount;
|
|
245
|
+
const storeDropped = typeof droppedReader === 'function' ? droppedReader.call(this.store, this.traceId) : 0;
|
|
246
|
+
if (storeDropped > this.dropped) {
|
|
247
|
+
this.dropped = storeDropped;
|
|
248
|
+
this.partial = true;
|
|
249
|
+
}
|
|
250
|
+
const completed = input.completedAt ? undefined : new Date();
|
|
251
|
+
const completedAt = input.completedAt ?? completed.toISOString();
|
|
252
|
+
const completedAtMs = input.completedAt ? Date.parse(input.completedAt) : completed.getTime();
|
|
253
|
+
// The root is intentionally left open until all server-owned stages have
|
|
254
|
+
// completed. Derive its terminal reason from the recorded typed issue
|
|
255
|
+
// before closing it so a real analytical coverage gap is not presented as
|
|
256
|
+
// the generic `unknown` incident merely because the root has no direct
|
|
257
|
+
// executor callback.
|
|
258
|
+
const rootTerminalReason = terminalRootReasonCodeV1(this.spans.values(), input.status);
|
|
259
|
+
for (const [spanId, span] of this.spans) {
|
|
260
|
+
// Do not reopen a root that happened to be updated as an ordinary span.
|
|
261
|
+
if (!('completedAt' in span) || !span.completedAt) {
|
|
262
|
+
this.finishBeforeFinalize(spanId, span, completedAt, completedAtMs, input.status, rootTerminalReason);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Older callers may still provide a provisional first issue. Keep it only
|
|
266
|
+
// when it wins the same authoritative priority calculation; this prevents
|
|
267
|
+
// a stale pre-freeze pointer from masking a terminal post-freeze failure.
|
|
268
|
+
// This calculation needs the full trace to distinguish a recoverable
|
|
269
|
+
// pre-freeze cascade attempt from a later physical failure. Computing it
|
|
270
|
+
// once at finalization preserves the same result while avoiding an O(n²)
|
|
271
|
+
// scan over the growing span map on every producer completion.
|
|
272
|
+
const firstIssueSpanId = selectAskTraceIssueSpanIdV1(this.spans.values(), input.firstIssueSpanId);
|
|
273
|
+
const traceFingerprint = fingerprint({
|
|
274
|
+
traceId: this.traceId,
|
|
275
|
+
runId: this.envelope.runId,
|
|
276
|
+
status: input.status,
|
|
277
|
+
terminalOutcome: input.terminalOutcome,
|
|
278
|
+
selectedTier: input.selectedTier,
|
|
279
|
+
spanCount: this.sequence,
|
|
280
|
+
candidateDecisionCount: this.candidateSequence,
|
|
281
|
+
dropped: this.dropped,
|
|
282
|
+
});
|
|
283
|
+
this.envelope = {
|
|
284
|
+
...this.envelope,
|
|
285
|
+
status: input.status,
|
|
286
|
+
...(input.terminalOutcome ? { terminalOutcome: input.terminalOutcome } : {}),
|
|
287
|
+
recordingStatus: this.partial ? 'partial' : 'complete',
|
|
288
|
+
...(input.trustState ? { trustState: input.trustState } : {}),
|
|
289
|
+
...(input.selectedTier ? { selectedTier: input.selectedTier } : {}),
|
|
290
|
+
completedAt,
|
|
291
|
+
durationMs: durationMs(this.envelope.startedAt, completedAt),
|
|
292
|
+
...(firstIssueSpanId ? { firstIssueSpanId } : {}),
|
|
293
|
+
traceFingerprint,
|
|
294
|
+
spanCount: this.sequence,
|
|
295
|
+
candidateDecisionCount: this.candidateSequence,
|
|
296
|
+
droppedRecordCount: this.dropped,
|
|
297
|
+
};
|
|
298
|
+
const persisted = this.store.finalize(this.envelope);
|
|
299
|
+
if (!persisted.accepted) {
|
|
300
|
+
this.envelope = { ...this.envelope, recordingStatus: 'unavailable' };
|
|
301
|
+
}
|
|
302
|
+
return this.reference();
|
|
303
|
+
}
|
|
304
|
+
markPartial(_reason = 'recording_failure', alreadyRecorded = false) {
|
|
305
|
+
this.partial = true;
|
|
306
|
+
if (!alreadyRecorded) {
|
|
307
|
+
this.dropped += 1;
|
|
308
|
+
try {
|
|
309
|
+
this.store.markPartial(this.traceId);
|
|
310
|
+
}
|
|
311
|
+
catch { /* fail open */ }
|
|
312
|
+
}
|
|
313
|
+
const storeDropped = this.store.droppedRecordCount?.(this.traceId) ?? 0;
|
|
314
|
+
this.dropped = Math.max(this.dropped, storeDropped);
|
|
315
|
+
}
|
|
316
|
+
reference() {
|
|
317
|
+
return {
|
|
318
|
+
version: 1,
|
|
319
|
+
traceId: this.traceId,
|
|
320
|
+
recordingStatus: this.recordingStatus,
|
|
321
|
+
storeSchemaVersion: ASK_TRACE_SCHEMA_VERSION,
|
|
322
|
+
...(this.envelope.traceFingerprint ? { traceFingerprint: this.envelope.traceFingerprint } : {}),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
finishBeforeFinalize(spanId, span, completedAt, completedAtMs, status, rootTerminalReason) {
|
|
326
|
+
const outcome = status === 'cancelled' ? 'cancelled' : status === 'interrupted' ? 'interrupted' : status === 'failed' || status === 'blocked' ? 'error' : 'ok';
|
|
327
|
+
const next = {
|
|
328
|
+
version: 1,
|
|
329
|
+
traceId: this.traceId,
|
|
330
|
+
spanId,
|
|
331
|
+
...(span.parentSpanId ? { parentSpanId: span.parentSpanId } : {}),
|
|
332
|
+
ordinal: span.ordinal,
|
|
333
|
+
name: span.name,
|
|
334
|
+
stage: span.stage,
|
|
335
|
+
startedAt: span.startedAt,
|
|
336
|
+
startedAtMs: span.startedAtMs,
|
|
337
|
+
completedAt,
|
|
338
|
+
durationMs: elapsedDurationMs(span.startedAtMs, completedAtMs, span.startedAt, completedAt),
|
|
339
|
+
outcome,
|
|
340
|
+
reasonCode: outcome === 'ok'
|
|
341
|
+
? 'completed'
|
|
342
|
+
: outcome === 'cancelled'
|
|
343
|
+
? 'cancelled'
|
|
344
|
+
: outcome === 'interrupted'
|
|
345
|
+
? 'interrupted'
|
|
346
|
+
: (span.name === 'ask.run' || span.name === 'research.run') && rootTerminalReason
|
|
347
|
+
? rootTerminalReason
|
|
348
|
+
: 'unknown',
|
|
349
|
+
payload: span.payload,
|
|
350
|
+
};
|
|
351
|
+
this.spans.set(spanId, next);
|
|
352
|
+
const result = this.store.appendSpan(next);
|
|
353
|
+
if (!result.accepted)
|
|
354
|
+
this.markPartial('recording_failure', storeAlreadyRecordedDrop(result.dropped));
|
|
355
|
+
}
|
|
356
|
+
mintChildSpanId() {
|
|
357
|
+
const mask = 0xffffffffffffffffn;
|
|
358
|
+
let value = (this.spanSeed + (++this.spanIdSequence)) & mask;
|
|
359
|
+
// W3C IDs may not be all-zero. A wrap can only happen at the boundary,
|
|
360
|
+
// but preserve the invariant without consuming a second random byte draw.
|
|
361
|
+
if (value === 0n)
|
|
362
|
+
value = (this.spanSeed + (++this.spanIdSequence)) & mask;
|
|
363
|
+
return value.toString(16).padStart(16, '0');
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Root spans have no independent route authority. They may, however, reflect
|
|
368
|
+
* the terminal typed stage already persisted in the same trace. This keeps a
|
|
369
|
+
* coverage gap, provider failure, or SQL refusal actionable without deriving
|
|
370
|
+
* an incident from user-facing prose.
|
|
371
|
+
*/
|
|
372
|
+
function terminalRootReasonCodeV1(values, status) {
|
|
373
|
+
if (status !== 'blocked' && status !== 'failed')
|
|
374
|
+
return undefined;
|
|
375
|
+
const spans = [...values].filter(isFinishedTraceIssueSpanV1);
|
|
376
|
+
const cascade = spans.find((span) => {
|
|
377
|
+
const decision = safeCascadeDecisionRecordV1(span);
|
|
378
|
+
return decision?.stopReason === 'coverage_gap';
|
|
379
|
+
});
|
|
380
|
+
if (cascade)
|
|
381
|
+
return 'cascade_unavailable';
|
|
382
|
+
if (spans.some((span) => span.reasonCode === 'cascade_denied'))
|
|
383
|
+
return 'cascade_denied';
|
|
384
|
+
if (spans.some((span) => span.reasonCode === 'cascade_ambiguous'))
|
|
385
|
+
return 'cascade_ambiguous';
|
|
386
|
+
if (spans.some((span) => span.reasonCode === 'run_deadline'))
|
|
387
|
+
return 'run_deadline';
|
|
388
|
+
if (spans.some((span) => span.reasonCode === 'research_branch_timeout'))
|
|
389
|
+
return 'research_branch_timeout';
|
|
390
|
+
if (spans.some((span) => span.reasonCode === 'execution_failed'))
|
|
391
|
+
return 'execution_failed';
|
|
392
|
+
if (spans.some((span) => span.reasonCode === 'provider_failure'))
|
|
393
|
+
return 'provider_failure';
|
|
394
|
+
if (spans.some((span) => span.reasonCode === 'sql_denied'))
|
|
395
|
+
return 'sql_denied';
|
|
396
|
+
if (spans.some((span) => span.reasonCode === 'sql_failure'))
|
|
397
|
+
return 'sql_failure';
|
|
398
|
+
if (spans.some((span) => span.reasonCode === 'post_freeze_failure'))
|
|
399
|
+
return 'post_freeze_failure';
|
|
400
|
+
return undefined;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Select the incident that a local operator can act on. This deliberately
|
|
404
|
+
* differs from `isAskTraceIssueSpanV1`: that exported predicate remains a
|
|
405
|
+
* small compatibility check for one span, while the selection needs the
|
|
406
|
+
* cascade and freeze context carried by the full trace.
|
|
407
|
+
*/
|
|
408
|
+
function selectAskTraceIssueSpanIdV1(values, _explicitIssueSpanId) {
|
|
409
|
+
const spans = [...values].filter(isFinishedTraceIssueSpanV1);
|
|
410
|
+
const candidates = spans
|
|
411
|
+
.map((span) => ({ span, priority: askTraceIssuePriorityV1(span, spans) }))
|
|
412
|
+
.filter((entry) => entry.priority > 0)
|
|
413
|
+
.sort((left, right) => right.priority - left.priority || right.span.ordinal - left.span.ordinal);
|
|
414
|
+
return candidates[0]?.span.spanId;
|
|
415
|
+
}
|
|
416
|
+
function isFinishedTraceIssueSpanV1(value) {
|
|
417
|
+
if (!isFinishedAskTraceSpanV1(value) || !value || typeof value !== 'object')
|
|
418
|
+
return false;
|
|
419
|
+
const span = value;
|
|
420
|
+
return typeof span.spanId === 'string'
|
|
421
|
+
&& typeof span.ordinal === 'number'
|
|
422
|
+
&& typeof span.name === 'string'
|
|
423
|
+
&& typeof span.stage === 'string'
|
|
424
|
+
&& Boolean(span.payload && typeof span.payload === 'object');
|
|
425
|
+
}
|
|
426
|
+
function askTraceIssuePriorityV1(span, allSpans) {
|
|
427
|
+
if (!isAskTraceIssueSpanV1(span))
|
|
428
|
+
return 0;
|
|
429
|
+
if (isRecoverableCascadeAttemptV1(span))
|
|
430
|
+
return 0;
|
|
431
|
+
if (isPostFreezePhysicalFailureV1(span, allSpans))
|
|
432
|
+
return 40;
|
|
433
|
+
if (isTerminalCascadeIssueV1(span))
|
|
434
|
+
return 30;
|
|
435
|
+
if (span.outcome === 'denied')
|
|
436
|
+
return 20;
|
|
437
|
+
return 10;
|
|
438
|
+
}
|
|
439
|
+
function isRecoverableCascadeAttemptV1(span) {
|
|
440
|
+
if (span.stage !== 'cascade' || !span.name.startsWith('cascade.') || span.name === 'cascade.evaluate' || span.name === 'cascade.clarify_or_gap')
|
|
441
|
+
return false;
|
|
442
|
+
if (span.outcome !== 'unavailable' && !(span.outcome === 'skipped' && span.reasonCode === 'cascade_ineligible'))
|
|
443
|
+
return false;
|
|
444
|
+
const decision = safeCascadeDecisionRecordV1(span);
|
|
445
|
+
if (!decision || decision.stopReason !== 'selected' || !decision.selectedTier || decision.selectedTier === tierForCascadeSpanV1(span.name))
|
|
446
|
+
return false;
|
|
447
|
+
const attempt = Array.isArray(decision.attempts) ? decision.attempts[0] : undefined;
|
|
448
|
+
return Boolean(attempt && typeof attempt === 'object'
|
|
449
|
+
&& (attempt.outcome === 'unavailable' || attempt.outcome === 'ineligible'));
|
|
450
|
+
}
|
|
451
|
+
function isTerminalCascadeIssueV1(span) {
|
|
452
|
+
if (span.stage !== 'cascade')
|
|
453
|
+
return false;
|
|
454
|
+
const decision = safeCascadeDecisionRecordV1(span);
|
|
455
|
+
if (!decision)
|
|
456
|
+
return false;
|
|
457
|
+
if (decision.stopReason === 'post_freeze_failure')
|
|
458
|
+
return true;
|
|
459
|
+
if (span.name === 'cascade.clarify_or_gap') {
|
|
460
|
+
return decision.stopReason === 'ambiguous' || decision.stopReason === 'coverage_gap' || decision.stopReason === 'denied';
|
|
461
|
+
}
|
|
462
|
+
return span.name === 'cascade.evaluate' && (decision.stopReason === 'denied' || decision.stopReason === 'coverage_gap');
|
|
463
|
+
}
|
|
464
|
+
function isPostFreezePhysicalFailureV1(span, allSpans) {
|
|
465
|
+
if (span.reasonCode === 'post_freeze_failure')
|
|
466
|
+
return true;
|
|
467
|
+
if (span.stage !== 'provider' && span.stage !== 'tool' && span.stage !== 'sql' && span.stage !== 'result')
|
|
468
|
+
return false;
|
|
469
|
+
return allSpans.some((candidate) => candidate.name === 'plan.freeze'
|
|
470
|
+
&& candidate.outcome === 'ok'
|
|
471
|
+
&& candidate.ordinal < span.ordinal);
|
|
472
|
+
}
|
|
473
|
+
function safeCascadeDecisionRecordV1(span) {
|
|
474
|
+
if (span.payload.kind !== 'cascade')
|
|
475
|
+
return undefined;
|
|
476
|
+
const payload = span.payload;
|
|
477
|
+
const nested = payload.decision;
|
|
478
|
+
return nested && typeof nested === 'object' && !Array.isArray(nested)
|
|
479
|
+
? nested
|
|
480
|
+
: undefined;
|
|
481
|
+
}
|
|
482
|
+
function tierForCascadeSpanV1(name) {
|
|
483
|
+
const tiers = {
|
|
484
|
+
'cascade.certified': 'certified',
|
|
485
|
+
'cascade.semantic': 'semantic',
|
|
486
|
+
'cascade.governed_relational': 'governed_relational',
|
|
487
|
+
'cascade.exploratory_sql': 'exploratory_sql',
|
|
488
|
+
'cascade.clarify_or_gap': 'clarify_or_gap',
|
|
489
|
+
};
|
|
490
|
+
return tiers[name];
|
|
491
|
+
}
|
|
492
|
+
function elapsedDurationMs(startedAtMs, completedAtMs, startedAt, completedAt) {
|
|
493
|
+
if (Number.isFinite(startedAtMs) && Number.isFinite(completedAtMs))
|
|
494
|
+
return Math.max(0, completedAtMs - startedAtMs);
|
|
495
|
+
return durationMs(startedAt, completedAt);
|
|
496
|
+
}
|
|
497
|
+
function storeAlreadyRecordedDrop(dropped) {
|
|
498
|
+
return dropped === 'span_cap'
|
|
499
|
+
|| dropped === 'candidate_cap'
|
|
500
|
+
|| dropped === 'detail_cap'
|
|
501
|
+
|| dropped === 'store_cap'
|
|
502
|
+
|| dropped === 'queue_cap';
|
|
503
|
+
}
|
|
504
|
+
export function createAskTraceObserverV1(input) {
|
|
505
|
+
if (!input.store || !input.store.status().recordingEnabled || process.env.DQL_ASK_OBSERVABILITY === 'off') {
|
|
506
|
+
return noOpAskTraceObserverV1;
|
|
507
|
+
}
|
|
508
|
+
try {
|
|
509
|
+
const observer = new BufferedAskTraceObserverV1(input.store, input);
|
|
510
|
+
return observer.initialized ? observer : noOpAskTraceObserverV1;
|
|
511
|
+
}
|
|
512
|
+
catch {
|
|
513
|
+
return noOpAskTraceObserverV1;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
/** The observer deliberately does not enumerate into HTTP/client payloads. */
|
|
517
|
+
export function attachAskTraceObserverV1(target, observer) {
|
|
518
|
+
try {
|
|
519
|
+
Object.defineProperty(target, ASK_TRACE_OBSERVER_V1, {
|
|
520
|
+
value: observer,
|
|
521
|
+
enumerable: false,
|
|
522
|
+
configurable: true,
|
|
523
|
+
writable: false,
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
catch {
|
|
527
|
+
// Frozen caller input remains executable without observability.
|
|
528
|
+
}
|
|
529
|
+
return target;
|
|
530
|
+
}
|
|
531
|
+
export function askTraceObserverForV1(value) {
|
|
532
|
+
if (!value || (typeof value !== 'object' && typeof value !== 'function'))
|
|
533
|
+
return noOpAskTraceObserverV1;
|
|
534
|
+
return value[ASK_TRACE_OBSERVER_V1]
|
|
535
|
+
?? noOpAskTraceObserverV1;
|
|
536
|
+
}
|
|
537
|
+
//# sourceMappingURL=observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../../src/ask-observability/observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { AskTraceDataV1, AskTraceExportReceiptV1 } from './types.js';
|
|
2
|
+
export type AskTraceExportProfileV1 = 'strict' | 'support';
|
|
3
|
+
export interface AskTraceExportOptionsV1 {
|
|
4
|
+
profile: AskTraceExportProfileV1;
|
|
5
|
+
outputDirectory: string;
|
|
6
|
+
/** Support exports require an explicit human confirmation from the CLI/API. */
|
|
7
|
+
confirmReviewedIdentifiers?: boolean;
|
|
8
|
+
/** Never sourced from a stored run: support prose is opt-in reviewed input. */
|
|
9
|
+
reviewedQuestion?: string;
|
|
10
|
+
runReceipt?: unknown;
|
|
11
|
+
provenance?: 'live' | 'recorded' | 'synthetic' | 'migrated' | 'unknown';
|
|
12
|
+
}
|
|
13
|
+
export type AskTracePortableBundleOptionsV1 = Omit<AskTraceExportOptionsV1, 'outputDirectory'>;
|
|
14
|
+
/** A redacted in-memory bundle for the local runtime download endpoint. */
|
|
15
|
+
export interface AskTracePortableBundleV1 {
|
|
16
|
+
manifest: AskTraceBundleManifestV1;
|
|
17
|
+
trace: AskTraceDataV1;
|
|
18
|
+
runReceipt: Record<string, unknown>;
|
|
19
|
+
redactionReceipt: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export interface AskTraceBundleValidationV1 {
|
|
22
|
+
valid: boolean;
|
|
23
|
+
errors: string[];
|
|
24
|
+
manifest?: AskTraceBundleManifestV1;
|
|
25
|
+
}
|
|
26
|
+
export interface AskTraceBundleManifestV1 {
|
|
27
|
+
version: 1;
|
|
28
|
+
schema: 'dql.ask-trace-bundle.v1';
|
|
29
|
+
profile: AskTraceExportProfileV1;
|
|
30
|
+
createdAt: string;
|
|
31
|
+
provenance: 'live' | 'recorded' | 'synthetic' | 'migrated' | 'unknown';
|
|
32
|
+
bundleFingerprint: string;
|
|
33
|
+
checksums: Record<'trace.json' | 'run-receipt.json' | 'redaction-receipt.json', string>;
|
|
34
|
+
traceFingerprint?: string;
|
|
35
|
+
traceId: string;
|
|
36
|
+
}
|
|
37
|
+
export interface AskTraceCompareResultV1 {
|
|
38
|
+
compatibleIdentity: boolean;
|
|
39
|
+
leftTraceId: string;
|
|
40
|
+
rightTraceId: string;
|
|
41
|
+
selectedTier: {
|
|
42
|
+
left?: string;
|
|
43
|
+
right?: string;
|
|
44
|
+
matches: boolean;
|
|
45
|
+
};
|
|
46
|
+
recordingStatus: {
|
|
47
|
+
left: string;
|
|
48
|
+
right: string;
|
|
49
|
+
matches: boolean;
|
|
50
|
+
};
|
|
51
|
+
sourceCoverageChanges: Array<{
|
|
52
|
+
source: string;
|
|
53
|
+
left?: string;
|
|
54
|
+
right?: string;
|
|
55
|
+
}>;
|
|
56
|
+
candidateReasonChanges: Array<{
|
|
57
|
+
role: string;
|
|
58
|
+
reason: string;
|
|
59
|
+
left: number;
|
|
60
|
+
right: number;
|
|
61
|
+
}>;
|
|
62
|
+
attempts: {
|
|
63
|
+
left: number;
|
|
64
|
+
right: number;
|
|
65
|
+
};
|
|
66
|
+
providerAttempts: {
|
|
67
|
+
left: number;
|
|
68
|
+
right: number;
|
|
69
|
+
};
|
|
70
|
+
toolCalls: {
|
|
71
|
+
left: number;
|
|
72
|
+
right: number;
|
|
73
|
+
};
|
|
74
|
+
sqlAttempts: {
|
|
75
|
+
left: number;
|
|
76
|
+
right: number;
|
|
77
|
+
};
|
|
78
|
+
trustState: {
|
|
79
|
+
left?: string;
|
|
80
|
+
right?: string;
|
|
81
|
+
matches: boolean;
|
|
82
|
+
};
|
|
83
|
+
durationDeltaMs?: number;
|
|
84
|
+
notes: string[];
|
|
85
|
+
}
|
|
86
|
+
export declare function createAskTracePortableBundleV1(trace: AskTraceDataV1, options: AskTracePortableBundleOptionsV1): AskTracePortableBundleV1;
|
|
87
|
+
export declare function exportAskTraceBundleV1(trace: AskTraceDataV1, options: AskTraceExportOptionsV1): AskTraceExportReceiptV1;
|
|
88
|
+
export declare function validateAskTraceBundleV1(directory: string): AskTraceBundleValidationV1;
|
|
89
|
+
/** Offline-only receipt replay. It validates; it never imports providers/tools/connectors. */
|
|
90
|
+
export declare function replayAskTraceReceiptV1(directory: string): {
|
|
91
|
+
valid: boolean;
|
|
92
|
+
errors: string[];
|
|
93
|
+
trace?: AskTraceDataV1;
|
|
94
|
+
};
|
|
95
|
+
export declare function compareAskTracesV1(left: AskTraceDataV1, right: AskTraceDataV1): AskTraceCompareResultV1;
|
|
96
|
+
/** Portable, local JSON mapper — intentionally no OTLP network exporter. */
|
|
97
|
+
export declare function toOtlpOpenInferenceJsonV1(trace: AskTraceDataV1): Record<string, unknown>;
|
|
98
|
+
//# sourceMappingURL=portable.d.ts.map
|