@opensearch-project/agent-health 0.5.2 → 0.6.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/README.md +1 -0
- package/cli/dist/index.js +1592 -620
- package/dist/assets/index-BfxtxmKc.css +1 -0
- package/dist/assets/index-CrjAfDHu.js +243 -0
- package/dist/index.html +2 -2
- package/docs/CLI.md +45 -2
- package/docs/CONFIGURATION.md +1 -1
- package/docs/INSTRUMENT_WITH_OTEL.md +7 -0
- package/docs/SDK.md +52 -3
- package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -0
- package/docs/skills/AGENT_HEALTH.md +55 -1
- package/examples/eval-files/demo.eval.js +1 -1
- package/examples/eval-files/ops-rca-classification.eval.js +71 -0
- package/examples/eval-files/ops-rca-evaluator.json +15 -0
- package/examples/eval-files/sdk-demo.eval.js +72 -0
- package/examples/eval-files/sdk-describe-demo.eval.js +50 -0
- package/examples/eval-files/sdk-hooks-demo.eval.js +1 -1
- package/lib/dist/lib/bedrockCompat.d.ts +27 -0
- package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
- package/lib/dist/lib/bedrockCompat.js +83 -0
- package/lib/dist/lib/bedrockCompat.js.map +1 -0
- package/lib/dist/lib/benchmarkImage.d.ts +52 -0
- package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkImage.js +113 -0
- package/lib/dist/lib/benchmarkImage.js.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts +13 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -1
- package/lib/dist/lib/benchmarkVersionUtils.js +21 -0
- package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -1
- package/lib/dist/lib/chunkedFetch.d.ts +18 -0
- package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
- package/lib/dist/lib/chunkedFetch.js +40 -0
- package/lib/dist/lib/chunkedFetch.js.map +1 -0
- package/lib/dist/lib/comparisonInsights.d.ts +104 -0
- package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
- package/lib/dist/lib/comparisonInsights.js +212 -0
- package/lib/dist/lib/comparisonInsights.js.map +1 -0
- package/lib/dist/lib/config/loader.d.ts.map +1 -1
- package/lib/dist/lib/config/loader.js +5 -0
- package/lib/dist/lib/config/loader.js.map +1 -1
- package/lib/dist/lib/config/types.d.ts +14 -0
- package/lib/dist/lib/config/types.d.ts.map +1 -1
- package/lib/dist/lib/constants.d.ts +11 -0
- package/lib/dist/lib/constants.d.ts.map +1 -1
- package/lib/dist/lib/constants.js +10 -1
- package/lib/dist/lib/constants.js.map +1 -1
- package/lib/dist/lib/contextFormat.d.ts +26 -0
- package/lib/dist/lib/contextFormat.d.ts.map +1 -0
- package/lib/dist/lib/contextFormat.js +28 -0
- package/lib/dist/lib/contextFormat.js.map +1 -0
- package/lib/dist/lib/envCompat.d.ts.map +1 -1
- package/lib/dist/lib/envCompat.js +14 -5
- package/lib/dist/lib/envCompat.js.map +1 -1
- package/lib/dist/lib/evaluationRerun.d.ts +63 -0
- package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
- package/lib/dist/lib/evaluationRerun.js +85 -0
- package/lib/dist/lib/evaluationRerun.js.map +1 -0
- package/lib/dist/lib/matchers/traces.d.ts +17 -2
- package/lib/dist/lib/matchers/traces.d.ts.map +1 -1
- package/lib/dist/lib/matchers/traces.js +136 -16
- package/lib/dist/lib/matchers/traces.js.map +1 -1
- package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
- package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
- package/lib/dist/lib/matchers/tracesPricing.js +64 -0
- package/lib/dist/lib/matchers/tracesPricing.js.map +1 -0
- package/lib/dist/lib/runStats.d.ts +24 -0
- package/lib/dist/lib/runStats.d.ts.map +1 -1
- package/lib/dist/lib/runStats.js +32 -0
- package/lib/dist/lib/runStats.js.map +1 -1
- package/lib/dist/lib/testCases/loader.d.ts +11 -1
- package/lib/dist/lib/testCases/loader.d.ts.map +1 -1
- package/lib/dist/lib/testCases/loader.js +35 -5
- package/lib/dist/lib/testCases/loader.js.map +1 -1
- package/lib/dist/lib/utils.d.ts +15 -0
- package/lib/dist/lib/utils.d.ts.map +1 -1
- package/lib/dist/lib/utils.js +22 -0
- package/lib/dist/lib/utils.js.map +1 -1
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +10 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -1
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +17 -3
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -1
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -1
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +8 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -1
- package/lib/dist/services/evaluation/bedrockJudge.d.ts +7 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -1
- package/lib/dist/services/evaluation/bedrockJudge.js +2 -0
- package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -1
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +1 -1
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -1
- package/lib/dist/services/storage/asyncBenchmarkStorage.js +14 -3
- package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -1
- package/lib/dist/services/storage/asyncRunStorage.d.ts +9 -1
- package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -1
- package/lib/dist/services/storage/asyncRunStorage.js +77 -1
- package/lib/dist/services/storage/asyncRunStorage.js.map +1 -1
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +18 -4
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -1
- package/lib/dist/services/storage/asyncTestCaseStorage.js +20 -4
- package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -1
- package/lib/dist/services/storage/opensearchClient.d.ts +35 -12
- package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -1
- package/lib/dist/services/storage/opensearchClient.js +12 -5
- package/lib/dist/services/storage/opensearchClient.js.map +1 -1
- package/lib/dist/services/traces/browserRecovery.d.ts +12 -1
- package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -1
- package/lib/dist/services/traces/browserRecovery.js +32 -5
- package/lib/dist/services/traces/browserRecovery.js.map +1 -1
- package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -1
- package/lib/dist/services/traces/messageExtraction.js +95 -33
- package/lib/dist/services/traces/messageExtraction.js.map +1 -1
- package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -1
- package/lib/dist/services/traces/spansToTrajectory.js +47 -9
- package/lib/dist/services/traces/spansToTrajectory.js.map +1 -1
- package/lib/dist/services/traces/tracePoller.d.ts +27 -3
- package/lib/dist/services/traces/tracePoller.d.ts.map +1 -1
- package/lib/dist/services/traces/tracePoller.js +199 -33
- package/lib/dist/services/traces/tracePoller.js.map +1 -1
- package/lib/dist/types/index.d.ts +55 -1
- package/lib/dist/types/index.d.ts.map +1 -1
- package/lib/dist/types/index.js.map +1 -1
- package/package.json +3 -1
- package/server/dist/app.js +2238 -777
- package/server/dist/index.js +2238 -777
- package/dist/assets/index-CCQRDlO0.js +0 -243
- package/dist/assets/index-CNHQVbcj.css +0 -1
|
@@ -78,6 +78,10 @@ function claudeNativeTrajectory(spans) {
|
|
|
78
78
|
const sorted = sortByStart(spans);
|
|
79
79
|
const toolNames = toolNamesById(sorted);
|
|
80
80
|
const steps = [];
|
|
81
|
+
// tool_use_ids that already got a tool_result from a `tool` span's own
|
|
82
|
+
// `tool.output` event, so the sibling `tool.execution` span (processed
|
|
83
|
+
// later, since it starts after the call) doesn't emit a duplicate result.
|
|
84
|
+
const resultEmittedForToolUseId = new Set();
|
|
81
85
|
for (const s of sorted) {
|
|
82
86
|
const a = s.attributes || {};
|
|
83
87
|
const ts = new Date(s.startTime).getTime() || Date.now();
|
|
@@ -105,7 +109,7 @@ function claudeNativeTrajectory(spans) {
|
|
|
105
109
|
}
|
|
106
110
|
else if (t === 'tool') {
|
|
107
111
|
const name = a['tool_name'] || a['gen_ai.tool.name'];
|
|
108
|
-
const input = a['tool_input'] || a['gen_ai.tool.input'];
|
|
112
|
+
const input = a['tool_input'] || a['gen_ai.tool.input'] || a['full_command'];
|
|
109
113
|
let toolArgs;
|
|
110
114
|
if (input) {
|
|
111
115
|
try {
|
|
@@ -120,20 +124,54 @@ function claudeNativeTrajectory(spans) {
|
|
|
120
124
|
toolName: name ? String(name) : undefined,
|
|
121
125
|
toolArgs,
|
|
122
126
|
});
|
|
127
|
+
// Some Claude Code tool spans carry the result inline as a `tool.output`
|
|
128
|
+
// span event instead of a separate `tool.execution` span — surface it as
|
|
129
|
+
// a tool_result so it isn't silently dropped from the trajectory. Guard
|
|
130
|
+
// against the (unusual, but possible under clock skew) case where the
|
|
131
|
+
// sibling `tool.execution` span was already PROCESSED first (i.e. it
|
|
132
|
+
// sorted before this `tool` span) and already emitted a result for the
|
|
133
|
+
// same tool_use_id — the dedup Set is checked/marked symmetrically by
|
|
134
|
+
// both branches so whichever one runs first "wins" and the other skips.
|
|
135
|
+
const toolOutputEvent = (s.events || []).find(e => e.name === 'tool.output');
|
|
136
|
+
const eventOutput = toolOutputEvent?.attributes?.['output'] || toolOutputEvent?.attributes?.['result'];
|
|
137
|
+
const toolUseId = a['tool_use_id'] || a['gen_ai.tool.call.id'];
|
|
138
|
+
const alreadyEmittedForThisId = toolUseId != null && resultEmittedForToolUseId.has(String(toolUseId));
|
|
139
|
+
if (eventOutput && !alreadyEmittedForThisId) {
|
|
140
|
+
if (toolUseId != null)
|
|
141
|
+
resultEmittedForToolUseId.add(String(toolUseId));
|
|
142
|
+
const eventTs = toolOutputEvent?.time ? new Date(toolOutputEvent.time).getTime() : NaN;
|
|
143
|
+
steps.push({
|
|
144
|
+
...base,
|
|
145
|
+
id: `${s.spanId}-output`,
|
|
146
|
+
timestamp: !isNaN(eventTs) ? eventTs : ts,
|
|
147
|
+
type: 'tool_result',
|
|
148
|
+
content: String(eventOutput),
|
|
149
|
+
toolName: name ? String(name) : undefined,
|
|
150
|
+
toolOutput: eventOutput,
|
|
151
|
+
status: s.status === 'ERROR' ? ToolCallStatus.FAILURE : ToolCallStatus.SUCCESS,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
123
154
|
}
|
|
124
155
|
else if (t === 'tool.execution') {
|
|
125
156
|
const success = a['success'];
|
|
126
157
|
const id = a['tool_use_id'] || a['gen_ai.tool.call.id'];
|
|
127
158
|
const name = (id && toolNames.get(String(id))) || a['tool_name'];
|
|
128
159
|
const output = a['gen_ai.tool.output'] || a['tool.output'];
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
160
|
+
if (id && resultEmittedForToolUseId.has(String(id))) {
|
|
161
|
+
// Already emitted from the sibling `tool` span's tool.output event — skip duplicate.
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
if (id)
|
|
165
|
+
resultEmittedForToolUseId.add(String(id));
|
|
166
|
+
steps.push({
|
|
167
|
+
...base,
|
|
168
|
+
type: 'tool_result',
|
|
169
|
+
content: output != null ? String(output) : (success === false ? 'tool failed' : 'tool succeeded'),
|
|
170
|
+
toolName: name ? String(name) : undefined,
|
|
171
|
+
toolOutput: output,
|
|
172
|
+
status: success === false ? ToolCallStatus.FAILURE : ToolCallStatus.SUCCESS,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
137
175
|
}
|
|
138
176
|
else if (t === 'tool.blocked_on_user') {
|
|
139
177
|
const decision = String(a['decision'] ?? '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spansToTrajectory.js","sourceRoot":"","sources":["../../../../services/traces/spansToTrajectory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAwB,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAU/D,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AACzH,mDAAmD;AACnD,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChH,oEAAoE;AACpE,MAAM,iBAAiB,GAAG;IACxB,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,iCAAiC;IAC/E,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,gCAAgC;CACjG,CAAC;AAEF,SAAS,YAAY,CAAC,IAAwB;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9D,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAG,GAAG,GAAG;IACpC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,iFAAiF;AACjF,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACpB,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,KAAK,SAAS,CAChF,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,SAAS,QAAQ,CAAC,CAAO;IACvB,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,CAAC,GAAG,KAAK,CAAC;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,gEAAgE;AAChE,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,CAAC,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,EAAE,IAAI,IAAI;YAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,gFAAgF;AAEhF,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChG,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,MAAM,KAAK,YAAY,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,IAAI;gBACP,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,QAAQ;oBACf,CAAC,CAAC,qEAAqE,CAAC,CAAC,oBAAoB,CAAC,IAAI,GAAG,SAAS;oBAC9G,CAAC,CAAC,SAAS,MAAM,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;YAC5D,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,IAAI;gBACP,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;aACjG,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;YACxD,IAAI,QAAyC,CAAC;YAC9C,IAAI,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAC5G,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,IAAI;gBACP,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACjG,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBACzC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,IAAI;gBACP,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBACjG,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBACzC,UAAU,EAAE,MAAM;gBAClB,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO;aAC5E,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,KAAK,sBAAsB,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,QAAQ,mBAAmB,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9G,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,4FAA4F;IAC5F,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACnC,QAAQ,CAAC,CAAC,CAAC,KAAK,sBAAsB,IAAI,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,QAAQ;WAC1F,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,KAAK,SAAS,CAC9C,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,iDAAiD;YACxD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzH,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,+EAA+E;IAC/E,8EAA8E;IAC9E,2CAA2C;IAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAAC,YAAY,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QACrG,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,iDAAiD;YACxD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,SAAS,CAAC,MAAM;YACvB,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,wFAAwF;IACxF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,OAAO,GAAG,CAAC,CAAC;IAAC,IAAI,aAAa,GAAG,EAAE,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,CAAC,CAAC,KAAK,gBAAgB,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,KAAK;YAAE,SAAS;QACvE,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC,CAClF,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YAAC,OAAO,EAAE,CAAC;YAAC,IAAI,CAAC,aAAa;gBAAE,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IACjF,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,kBAAkB;YACtB,KAAK,EAAE,uEAAuE;YAC9E,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,+EAA+E;IAC/E,6EAA6E;IAC7E,kDAAkD;IAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM;YAAE,SAAS;QACrC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;YACvC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACzE,CAAC,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,qBAAqB;YACzB,KAAK,EAAE,0EAA0E;YACjF,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACxD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrF,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IACvE,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,sEAAsE;YAC7E,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,gBAAgB,SAAS,CAAC,UAAU,CAAC,EAAE;SAClD,CAAC,CAAC;IACL,CAAC;IAED,oCAAoC;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;IAC9E,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,iBAAiB,YAAY,oDAAoD;YACxF,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,GAAG,YAAY,kBAAkB,SAAS,CAAC,MAAM,aAAa;SACzE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF,SAAS,iBAAiB,CAAC,KAAa,EAAE,WAAoB;IAC5D,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;QAC5E,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,WAAW;gBACd,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAAC,MAAM;YACxE,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,IAAI,QAAyC,CAAC;gBAC9C,IAAI,CAAC;oBAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;gBACrF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAAC,MAAM;YAC/G,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnF,KAAK,CAAC,IAAI,CAAC;oBACT,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ;oBAChF,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO;iBACzF,CAAC,CAAC;gBAAC,MAAM;YACZ,CAAC;YACD,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAAC,MAAM;YAClF;gBACE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,WAAoB;IACzD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9D,0EAA0E;IAC1E,+DAA+D;IAC/D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,YAAY,GAAG,IAAI,CAAC;aACjG,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,YAAY,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5H,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,mDAAmD,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7M,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAE/D,IAAI,OAAO,GAAG,CAAC,CAAC;IAAC,IAAI,aAAa,GAAG,EAAE,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QACzC,sEAAsE;QACtE,0DAA0D;QAC1D,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B,CAAC,CAAC,0CAA0C,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACpC,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;YACrG,OAAO,EAAE,CAAC;YAAC,IAAI,CAAC,aAAa;gBAAE,aAAa,GAAG,GAAG,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1F,CAAC;IACH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,uEAAuE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IACtL,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,IAAI,GAAG,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,0EAA0E,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IACrS,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACvF,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,KAAK,6CAA6C,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,0BAA0B,SAAS,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;IAC7N,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,OAAO,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,MAAM,CAAC,CAAC;IAC/F,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,aAAa,GAAG,YAAY,CAAC,EAAE,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,sEAAsE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAgB,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACvO,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF,qEAAqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,WAAoB;IACnE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACvG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,WAAoB;IACpE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACjG,CAAC"}
|
|
1
|
+
{"version":3,"file":"spansToTrajectory.js","sourceRoot":"","sources":["../../../../services/traces/spansToTrajectory.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,12 @@
|
|
|
7
7
|
import { Span, EvaluationReport, AgentConfig } from '../../types/index.js';
|
|
8
8
|
export interface PollState {
|
|
9
9
|
reportId: string;
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Connector runId (Strategy B). OPTIONAL — REST-connector reports never
|
|
12
|
+
* get one; correlation then relies on the sessionId/service-window hints
|
|
13
|
+
* derived from the report (Strategies C/D).
|
|
14
|
+
*/
|
|
15
|
+
runId?: string;
|
|
11
16
|
attempts: number;
|
|
12
17
|
maxAttempts: number;
|
|
13
18
|
intervalMs: number;
|
|
@@ -20,6 +25,13 @@ export interface PollCallbacks {
|
|
|
20
25
|
onTracesFound: (spans: Span[], report: EvaluationReport) => Promise<void>;
|
|
21
26
|
onAttempt?: (attempt: number, maxAttempts: number) => void;
|
|
22
27
|
onError: (error: Error) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Fired when polling stops WITHOUT a verdict from this poller — e.g. the
|
|
30
|
+
* report reached a terminal metricsStatus through another path (eager
|
|
31
|
+
* judge, sibling server). Callers that wrap `startPolling` in a promise
|
|
32
|
+
* (evaluationRunner.waitForTracesAndJudge) MUST resolve here or they hang.
|
|
33
|
+
*/
|
|
34
|
+
onStopped?: () => void;
|
|
23
35
|
}
|
|
24
36
|
/**
|
|
25
37
|
* Trace Polling Manager
|
|
@@ -38,7 +50,7 @@ declare class TracePollingManager {
|
|
|
38
50
|
/**
|
|
39
51
|
* Start polling for traces for a specific report
|
|
40
52
|
*/
|
|
41
|
-
startPolling(reportId: string, runId: string, callbacks: PollCallbacks, options?: {
|
|
53
|
+
startPolling(reportId: string, runId: string | undefined, callbacks: PollCallbacks, options?: {
|
|
42
54
|
intervalMs?: number;
|
|
43
55
|
maxAttempts?: number;
|
|
44
56
|
agentConfig?: AgentConfig;
|
|
@@ -65,11 +77,23 @@ declare class TracePollingManager {
|
|
|
65
77
|
* If polling is already active for this reportId, returns the existing
|
|
66
78
|
* completion promise (no duplicate poll started).
|
|
67
79
|
*/
|
|
68
|
-
startPollingAsync(reportId: string, runId: string, callbacks: PollCallbacks, options?: {
|
|
80
|
+
startPollingAsync(reportId: string, runId: string | undefined, callbacks: PollCallbacks, options?: {
|
|
69
81
|
intervalMs?: number;
|
|
70
82
|
maxAttempts?: number;
|
|
71
83
|
agentConfig?: AgentConfig;
|
|
72
84
|
}): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Fetch a report defensively: storage failures and missing docs both
|
|
87
|
+
* resolve to null (callers treat null as "unknown — proceed").
|
|
88
|
+
*/
|
|
89
|
+
private safeGetReport;
|
|
90
|
+
/**
|
|
91
|
+
* Write an evaluator-error patch ONLY if the report is still pending /
|
|
92
|
+
* calculating. A report judged through another path (eager judge, another
|
|
93
|
+
* server's poller) must never have its verdict clobbered by this poller's
|
|
94
|
+
* timeout/error bookkeeping.
|
|
95
|
+
*/
|
|
96
|
+
private patchErrorIfStillPending;
|
|
73
97
|
/**
|
|
74
98
|
* Execute a single poll attempt
|
|
75
99
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracePoller.d.ts","sourceRoot":"","sources":["../../../../services/traces/tracePoller.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAA0B,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"tracePoller.d.ts","sourceRoot":"","sources":["../../../../services/traces/tracePoller.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAA0B,MAAM,SAAS,CAAC;AAgCtF,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,cAAM,mBAAmB;IACvB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,kBAAkB,CAAiF;IAE3G;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,aAAa,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GACjF,IAAI;IAgCP;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAmBnC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIjD;;OAEG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAU3C;;;;;;;OAOG;IACH,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,aAAa,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GACjF,OAAO,CAAC,IAAI,CAAC;IAyChB;;;OAGG;YACW,aAAa;IAQ3B;;;;;OAKG;YACW,wBAAwB;IAgBtC;;OAEG;YACW,IAAI;IA0PlB;;OAEG;YACW,eAAe;CA6C9B;AAGD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { debug } from '../../lib/debug.js';
|
|
6
|
-
import {
|
|
6
|
+
import { fetchTracesForRun } from './index.js';
|
|
7
|
+
import { buildJudgeAgentsHints } from './judgeAgentsHints.js';
|
|
7
8
|
import { asyncRunStorage } from '../storage/asyncRunStorage.js';
|
|
8
9
|
import { executeBuildTrajectoryHook } from '../../lib/hooks.js';
|
|
9
10
|
import { buildEvaluatorErrorPatch } from '../../services/evaluation/evaluatorError.js';
|
|
11
|
+
import { spansToTrajectory } from './spansToTrajectory.js';
|
|
10
12
|
// Polling configuration. Defaults are overridable via env vars so that
|
|
11
13
|
// CI / E2E runs without a real OpenSearch trace backend can fail fast
|
|
12
14
|
// instead of waiting the full ~10 min before the poller gives up.
|
|
@@ -24,7 +26,11 @@ const envInt = (name, fallback) => {
|
|
|
24
26
|
};
|
|
25
27
|
const DEFAULT_POLL_INTERVAL_MS = envInt('TRACE_POLL_INTERVAL_MS', 10000); // 10 seconds
|
|
26
28
|
const DEFAULT_MAX_ATTEMPTS = envInt('TRACE_POLL_MAX_ATTEMPTS', 60); // 10 minutes total at default interval
|
|
27
|
-
|
|
29
|
+
// Hard ceiling: never exceed this many attempts regardless of agent config or
|
|
30
|
+
// env override. Raised 60 → 240 (40 min at the default interval): the old
|
|
31
|
+
// ceiling silently clamped explicit agent `tracePolling.maxAttempts` overrides
|
|
32
|
+
// (e.g. 180 for slow OTLP→API-Gateway→cluster ingestion) back down to 10 min.
|
|
33
|
+
const MAX_POLL_CEILING = 240;
|
|
28
34
|
/**
|
|
29
35
|
* Trace Polling Manager
|
|
30
36
|
*
|
|
@@ -50,12 +56,19 @@ class TracePollingManager {
|
|
|
50
56
|
debug('TracePoller', `Already polling for report ${reportId}`);
|
|
51
57
|
return;
|
|
52
58
|
}
|
|
59
|
+
// Explicit options win; otherwise fall back to the agent's configured
|
|
60
|
+
// tracePolling budget (callers like evaluationRunner pass agentConfig but
|
|
61
|
+
// not the numbers — per-agent overrides were silently ignored there).
|
|
62
|
+
const cfgPolling = options?.agentConfig?.tracePolling;
|
|
63
|
+
const requestedMax = Number.isFinite(options?.maxAttempts)
|
|
64
|
+
? options.maxAttempts
|
|
65
|
+
: Number.isFinite(cfgPolling?.maxAttempts) ? cfgPolling.maxAttempts : DEFAULT_MAX_ATTEMPTS;
|
|
53
66
|
const state = {
|
|
54
67
|
reportId,
|
|
55
68
|
runId,
|
|
56
69
|
attempts: 0,
|
|
57
|
-
maxAttempts: Math.min(
|
|
58
|
-
intervalMs: options?.intervalMs ?? DEFAULT_POLL_INTERVAL_MS,
|
|
70
|
+
maxAttempts: Math.min(requestedMax, MAX_POLL_CEILING),
|
|
71
|
+
intervalMs: options?.intervalMs ?? cfgPolling?.intervalMs ?? DEFAULT_POLL_INTERVAL_MS,
|
|
59
72
|
lastAttempt: null,
|
|
60
73
|
running: true,
|
|
61
74
|
agentConfig: options?.agentConfig,
|
|
@@ -153,6 +166,40 @@ class TracePollingManager {
|
|
|
153
166
|
this.startPolling(reportId, runId, wrappedCallbacks, options);
|
|
154
167
|
});
|
|
155
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Fetch a report defensively: storage failures and missing docs both
|
|
171
|
+
* resolve to null (callers treat null as "unknown — proceed").
|
|
172
|
+
*/
|
|
173
|
+
async safeGetReport(reportId) {
|
|
174
|
+
try {
|
|
175
|
+
return (await asyncRunStorage.getReportById(reportId)) ?? null;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Write an evaluator-error patch ONLY if the report is still pending /
|
|
183
|
+
* calculating. A report judged through another path (eager judge, another
|
|
184
|
+
* server's poller) must never have its verdict clobbered by this poller's
|
|
185
|
+
* timeout/error bookkeeping.
|
|
186
|
+
*/
|
|
187
|
+
async patchErrorIfStillPending(reportId, patch) {
|
|
188
|
+
try {
|
|
189
|
+
const fresh = await this.safeGetReport(reportId);
|
|
190
|
+
if (fresh && (fresh.metricsStatus === 'ready' || fresh.metricsStatus === 'error')) {
|
|
191
|
+
// 'ready': a real verdict landed — never overwrite it.
|
|
192
|
+
// 'error': another path already wrote a (likely more specific) error
|
|
193
|
+
// cause — don't stomp it with a generic timeout.
|
|
194
|
+
debug('TracePoller', `Skipping error patch for ${reportId} — already '${fresh.metricsStatus}'`);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
await asyncRunStorage.updateReport(reportId, patch);
|
|
198
|
+
}
|
|
199
|
+
catch (updateErr) {
|
|
200
|
+
console.error(`[TracePoller] CRITICAL: Failed to update report ${reportId} error status. Report may be stuck in pending state.`, updateErr);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
156
203
|
/**
|
|
157
204
|
* Execute a single poll attempt
|
|
158
205
|
*/
|
|
@@ -178,25 +225,111 @@ class TracePollingManager {
|
|
|
178
225
|
console.warn(`[TracePoller] Failed to update attempt count:`, err);
|
|
179
226
|
}
|
|
180
227
|
try {
|
|
181
|
-
//
|
|
182
|
-
|
|
183
|
-
|
|
228
|
+
// Fetch the current report FIRST. Two reasons:
|
|
229
|
+
// 1. Clobber guard: if the report was already judged (eager path — a
|
|
230
|
+
// browser fan-out can start polls for transiently-pending eager
|
|
231
|
+
// reports), STOP instead of racing the verdict. A trace_timeout
|
|
232
|
+
// patch 10 minutes later must never overwrite a real judgment
|
|
233
|
+
// (2026-08-25: run-inspector fan-out clobbered a full run's early
|
|
234
|
+
// verdicts this way).
|
|
235
|
+
// 2. Correlation hints: the report carries sessionId / timestamp /
|
|
236
|
+
// connectorProtocol, from which we derive the service-window +
|
|
237
|
+
// sessionId hints (Strategies C/D). Claude Code spans carry only
|
|
238
|
+
// `session.id` (no runId tag), pi/REST spans carry neither —
|
|
239
|
+
// runId-only polling (Strategy B) can never find them.
|
|
240
|
+
const currentReport = await this.safeGetReport(reportId);
|
|
241
|
+
if (currentReport && (currentReport.metricsStatus === 'ready' || currentReport.metricsStatus === 'error')) {
|
|
242
|
+
debug('TracePoller', `Report ${reportId} is already '${currentReport.metricsStatus}' — stopping poll (no clobber)`);
|
|
243
|
+
state.running = false;
|
|
244
|
+
this.callbacks.delete(reportId);
|
|
245
|
+
this.polls.delete(reportId);
|
|
246
|
+
// Resolve (not reject) any completion promise — the report reached a
|
|
247
|
+
// terminal state through another path; nothing is owed here. Plain
|
|
248
|
+
// startPolling callers are notified via onStopped (promise wrappers
|
|
249
|
+
// like waitForTracesAndJudge resolve there — otherwise they'd hang).
|
|
250
|
+
this.completionPromises.get(reportId)?.resolve();
|
|
251
|
+
this.completionPromises.delete(reportId);
|
|
252
|
+
try {
|
|
253
|
+
callbacks?.onStopped?.();
|
|
254
|
+
}
|
|
255
|
+
catch { /* notification only */ }
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const windowAgents = currentReport
|
|
259
|
+
? buildJudgeAgentsHints(currentReport, state.agentConfig?.traceServiceName)
|
|
260
|
+
: [];
|
|
261
|
+
const sessionId = currentReport?.sessionId;
|
|
262
|
+
// The run's own OTel traceId (test_case eval span) — stamped by the
|
|
263
|
+
// runners at case start. Agents that adopt the propagated traceparent
|
|
264
|
+
// (REST via header, pi via TRACEPARENT env — both verified) emit their
|
|
265
|
+
// spans under this exact traceId (Strategy A).
|
|
266
|
+
const evalTraceId = currentReport?.traceId;
|
|
267
|
+
if (!state.runId && !sessionId && !evalTraceId && windowAgents.length === 0) {
|
|
268
|
+
// No correlator at all this attempt (report fetch may have failed
|
|
269
|
+
// transiently, or the report carries no correlation fields yet).
|
|
270
|
+
// An unfiltered query would be rejected by the traces API anyway —
|
|
271
|
+
// skip the fetch and let the attempt budget advance.
|
|
272
|
+
debug('TracePoller', `No correlator available for report ${reportId} (attempt ${state.attempts}) — skipping fetch`);
|
|
273
|
+
if (state.attempts >= state.maxAttempts) {
|
|
274
|
+
state.running = false;
|
|
275
|
+
callbacks?.onError(new Error(`Traces not available after ${state.maxAttempts} attempts (no correlation keys on report)`));
|
|
276
|
+
await this.patchErrorIfStillPending(reportId, buildEvaluatorErrorPatch('trace_timeout', `no correlation keys (runId/sessionId/traceId/service-window) available after ${state.maxAttempts} attempts`));
|
|
277
|
+
this.callbacks.delete(reportId);
|
|
278
|
+
this.polls.delete(reportId);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
state.timerId = setTimeout(() => this.poll(reportId), state.intervalMs);
|
|
282
|
+
}
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
// Try to fetch traces — union of Strategy A (eval traceId), B (runId),
|
|
286
|
+
// C (service.name + time window) and D (session.id inside the window hint).
|
|
287
|
+
const result = await fetchTracesForRun({
|
|
288
|
+
runId: state.runId,
|
|
289
|
+
evalTraceId,
|
|
290
|
+
windowAgents,
|
|
291
|
+
includeWindowFallback: windowAgents.length > 0,
|
|
292
|
+
});
|
|
293
|
+
// EXACT-MATCH FILTER (fail-closed): the window clause (Strategy C) is a
|
|
294
|
+
// discovery fallback and can return spans from CONCURRENT runs of the
|
|
295
|
+
// same agent — or from unrelated emitters sharing the service name
|
|
296
|
+
// (observed live: a pi-web session's spans were fetched for a pi eval
|
|
297
|
+
// run). When the report carries a precise correlator, judge ONLY spans
|
|
298
|
+
// matching it — and if none match yet, treat the attempt as "traces
|
|
299
|
+
// not available" and keep polling rather than judging foreign spans:
|
|
300
|
+
// session.id (Claude Code) > eval traceId (traceparent adopters).
|
|
301
|
+
let spans = result.spans || [];
|
|
302
|
+
if (spans.length > 0) {
|
|
303
|
+
if (sessionId) {
|
|
304
|
+
spans = spans.filter(sp => sp.attributes?.['session.id'] === sessionId);
|
|
305
|
+
if (spans.length === 0)
|
|
306
|
+
debug('TracePoller', `Fetched ${result.spans.length} spans but none match session ${sessionId} — waiting`);
|
|
307
|
+
}
|
|
308
|
+
else if (evalTraceId) {
|
|
309
|
+
spans = spans.filter(sp => sp.traceId === evalTraceId);
|
|
310
|
+
if (spans.length === 0)
|
|
311
|
+
debug('TracePoller', `Fetched ${result.spans.length} spans but none match eval traceId ${evalTraceId} — waiting`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
const filteredResult = { ...result, spans };
|
|
315
|
+
if (filteredResult.spans && filteredResult.spans.length > 0) {
|
|
184
316
|
// Traces found!
|
|
185
|
-
debug('TracePoller', `Found ${
|
|
186
|
-
// Get the current report
|
|
187
|
-
|
|
317
|
+
debug('TracePoller', `Found ${filteredResult.spans.length} spans for report ${reportId} (fetched ${result.spans?.length ?? 0})`);
|
|
318
|
+
// Get the current report (reuse the top-of-poll fetch when it
|
|
319
|
+
// succeeded — one storage read per attempt).
|
|
320
|
+
const report = currentReport ?? await asyncRunStorage.getReportById(reportId);
|
|
188
321
|
if (!report) {
|
|
189
322
|
throw new Error(`Report ${reportId} not found`);
|
|
190
323
|
}
|
|
191
324
|
// Build trajectory from trace spans
|
|
192
|
-
const { trajectory, shouldContinuePolling } = await this.buildTrajectory(
|
|
325
|
+
const { trajectory, shouldContinuePolling, fromHook } = await this.buildTrajectory(filteredResult.spans, state);
|
|
193
326
|
// Check if we should continue polling
|
|
194
327
|
if (shouldContinuePolling) {
|
|
195
328
|
if (state.attempts >= state.maxAttempts) {
|
|
196
329
|
console.log(`[TracePoller] Max attempts reached with incomplete trace`);
|
|
197
330
|
state.running = false;
|
|
198
331
|
callbacks?.onError(new Error(`Trace incomplete after ${state.maxAttempts} attempts`));
|
|
199
|
-
await
|
|
332
|
+
await this.patchErrorIfStillPending(reportId, buildEvaluatorErrorPatch('trace_incomplete', `found ${filteredResult.spans.length} spans but no root span after ${state.maxAttempts} attempts`));
|
|
200
333
|
this.callbacks.delete(reportId);
|
|
201
334
|
this.polls.delete(reportId);
|
|
202
335
|
}
|
|
@@ -206,14 +339,43 @@ class TracePollingManager {
|
|
|
206
339
|
}
|
|
207
340
|
return;
|
|
208
341
|
}
|
|
209
|
-
// Trajectory
|
|
342
|
+
// Trajectory replacement policy:
|
|
343
|
+
// - an agent's explicit buildTrajectory HOOK is intentional — its
|
|
344
|
+
// output always wins (issue #320);
|
|
345
|
+
// - the DEFAULT span→trajectory conversion replaces the connector
|
|
346
|
+
// trajectory so tool calls are visible to the judge (#320) — BUT
|
|
347
|
+
// if the span-built steps carry no response content (e.g. Claude
|
|
348
|
+
// Code tool spans: prompts/responses live in OTel LOGS, not span
|
|
349
|
+
// attributes), the connector trajectory's response steps are
|
|
350
|
+
// appended so the judge still sees the agent's actual answer.
|
|
351
|
+
// Replacing wholesale with content-less span stubs made the judge
|
|
352
|
+
// fail every case of a live benchmark.
|
|
210
353
|
if (trajectory.length > 0) {
|
|
211
|
-
|
|
354
|
+
if (fromHook) {
|
|
355
|
+
report.trajectory = trajectory;
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
const hasResponseContent = trajectory.some((st) => st?.type === 'response' && typeof st.content === 'string' && st.content.trim().length > 0);
|
|
359
|
+
const originalResponses = (report.trajectory || []).filter((st) => (st?.type === 'response' || st?.type === 'assistant') &&
|
|
360
|
+
typeof st.content === 'string' && st.content.trim().length > 0);
|
|
361
|
+
report.trajectory = !hasResponseContent && originalResponses.length > 0
|
|
362
|
+
? [...trajectory, ...originalResponses]
|
|
363
|
+
: trajectory;
|
|
364
|
+
}
|
|
212
365
|
}
|
|
213
366
|
// Stop polling and notify success
|
|
214
367
|
state.running = false;
|
|
368
|
+
// Claim the report before judging (pending -> calculating). Not an
|
|
369
|
+
// atomic lease — the storage layer has no CAS — but it makes the
|
|
370
|
+
// browser recovery's "someone else is judging" guard effective and
|
|
371
|
+
// narrows the double-judge window between sibling pollers to the
|
|
372
|
+
// fetch-to-claim gap.
|
|
215
373
|
try {
|
|
216
|
-
await
|
|
374
|
+
await asyncRunStorage.updateReport(reportId, { metricsStatus: 'calculating' });
|
|
375
|
+
}
|
|
376
|
+
catch { /* best-effort claim — proceed to judge regardless */ }
|
|
377
|
+
try {
|
|
378
|
+
await callbacks?.onTracesFound(filteredResult.spans, report);
|
|
217
379
|
}
|
|
218
380
|
catch (callbackErr) {
|
|
219
381
|
// onTracesFound failed (e.g., judge + error recovery both failed).
|
|
@@ -237,12 +399,7 @@ class TracePollingManager {
|
|
|
237
399
|
state.running = false;
|
|
238
400
|
callbacks?.onError(new Error(`Traces not available after ${state.maxAttempts} attempts`));
|
|
239
401
|
// Update report with error status - critical as report will remain stuck otherwise
|
|
240
|
-
|
|
241
|
-
await asyncRunStorage.updateReport(reportId, buildEvaluatorErrorPatch('trace_timeout', `traces not available after ${state.maxAttempts} attempts (${state.maxAttempts * state.intervalMs / 60000} minutes)`));
|
|
242
|
-
}
|
|
243
|
-
catch (updateErr) {
|
|
244
|
-
console.error(`[TracePoller] CRITICAL: Failed to update report ${reportId} error status. Report may be stuck in pending state.`, updateErr);
|
|
245
|
-
}
|
|
402
|
+
await this.patchErrorIfStillPending(reportId, buildEvaluatorErrorPatch('trace_timeout', `traces not available after ${state.maxAttempts} attempts (${state.maxAttempts * state.intervalMs / 60000} minutes)`));
|
|
246
403
|
this.callbacks.delete(reportId);
|
|
247
404
|
this.polls.delete(reportId);
|
|
248
405
|
}
|
|
@@ -258,12 +415,7 @@ class TracePollingManager {
|
|
|
258
415
|
state.running = false;
|
|
259
416
|
callbacks?.onError(error);
|
|
260
417
|
// Update report with error status - critical as report will remain stuck otherwise
|
|
261
|
-
|
|
262
|
-
await asyncRunStorage.updateReport(reportId, buildEvaluatorErrorPatch('trace_fetch_failed', error));
|
|
263
|
-
}
|
|
264
|
-
catch (updateErr) {
|
|
265
|
-
console.error(`[TracePoller] CRITICAL: Failed to update report ${reportId} error status. Report may be stuck in pending state.`, updateErr);
|
|
266
|
-
}
|
|
418
|
+
await this.patchErrorIfStillPending(reportId, buildEvaluatorErrorPatch('trace_fetch_failed', error));
|
|
267
419
|
this.callbacks.delete(reportId);
|
|
268
420
|
this.polls.delete(reportId);
|
|
269
421
|
}
|
|
@@ -280,27 +432,41 @@ class TracePollingManager {
|
|
|
280
432
|
const traceId = spans[0]?.traceId;
|
|
281
433
|
if (!traceId) {
|
|
282
434
|
console.warn(`[TracePoller] No traceId found in spans`);
|
|
283
|
-
return { trajectory: [], shouldContinuePolling: false };
|
|
435
|
+
return { trajectory: [], shouldContinuePolling: false, fromHook: false };
|
|
284
436
|
}
|
|
285
|
-
//
|
|
437
|
+
// No buildTrajectory hook: fall back to the generic span→trajectory
|
|
438
|
+
// conversion so the judge grades what the traces actually show (tool
|
|
439
|
+
// calls included) instead of the tool-call-less AG-UI trajectory.
|
|
440
|
+
// Previously this returned [] and trace-only agents could not be judged
|
|
441
|
+
// from their traces without a custom hook (issue #320, root cause 2).
|
|
286
442
|
if (!state.agentConfig?.hooks?.buildTrajectory) {
|
|
287
|
-
|
|
443
|
+
try {
|
|
444
|
+
const converted = spansToTrajectory(spans, state.agentConfig?.traceServiceName);
|
|
445
|
+
if (converted.length > 0) {
|
|
446
|
+
debug('TracePoller', `Default span→trajectory conversion produced ${converted.length} steps for trace ${traceId}`);
|
|
447
|
+
}
|
|
448
|
+
return { trajectory: converted, shouldContinuePolling: false, fromHook: false };
|
|
449
|
+
}
|
|
450
|
+
catch (err) {
|
|
451
|
+
console.error(`[TracePoller] Default span→trajectory conversion failed for ${traceId}:`, err);
|
|
452
|
+
return { trajectory: [], shouldContinuePolling: false, fromHook: false };
|
|
453
|
+
}
|
|
288
454
|
}
|
|
289
455
|
try {
|
|
290
456
|
console.log(`[TracePoller] Building trajectory from hook for trace ${traceId}`);
|
|
291
457
|
const hookResult = await executeBuildTrajectoryHook(state.agentConfig.hooks, { spans, runId: state.runId }, state.agentConfig.key);
|
|
292
458
|
if (hookResult !== null) {
|
|
293
459
|
console.log(`[TracePoller] Hook returned ${hookResult.length} trajectory steps`);
|
|
294
|
-
return { trajectory: hookResult, shouldContinuePolling: false };
|
|
460
|
+
return { trajectory: hookResult, shouldContinuePolling: false, fromHook: true };
|
|
295
461
|
}
|
|
296
462
|
else {
|
|
297
463
|
console.log(`[TracePoller] Hook returned null - trace not ready yet`);
|
|
298
|
-
return { trajectory: [], shouldContinuePolling: true };
|
|
464
|
+
return { trajectory: [], shouldContinuePolling: true, fromHook: true };
|
|
299
465
|
}
|
|
300
466
|
}
|
|
301
467
|
catch (err) {
|
|
302
468
|
console.error(`[TracePoller] Failed to build trajectory for ${traceId}:`, err);
|
|
303
|
-
return { trajectory: [], shouldContinuePolling: false };
|
|
469
|
+
return { trajectory: [], shouldContinuePolling: false, fromHook: true };
|
|
304
470
|
}
|
|
305
471
|
}
|
|
306
472
|
}
|