fix: bind workbench terminal api lag to trace ids

This commit is contained in:
Codex
2026-06-27 08:20:33 +00:00
parent ae95719d45
commit 3c6117b73e
2 changed files with 27 additions and 3 deletions
@@ -3929,6 +3929,7 @@ function shouldSummarizeWorkbenchResponseBody({ method, path, resourceType, stat
function summarizeWorkbenchJsonBody(value, path) {
const traceIds = new Set();
const sessionIds = new Set();
const terminalTraceIds = new Set();
const statusCounts = {};
const counters = {
objectCount: 0,
@@ -3953,10 +3954,14 @@ function summarizeWorkbenchJsonBody(value, path) {
if (isWorkbenchTerminalStatus(normalizedStatus)) counters.terminalStatusCount += 1;
if (isWorkbenchRunningStatus(normalizedStatus)) counters.runningStatusCount += 1;
}
if (isWorkbenchTerminalText(node)) counters.terminalTextCount += 1;
if (isWorkbenchTerminalText(node)) {
counters.terminalTextCount += 1;
for (const traceId of workbenchTraceIdsFromRecord(parent)) terminalTraceIds.add(traceId);
}
if (isLikelyWorkbenchFinalTextField(key, parent, node)) {
counters.finalTextFieldCount += 1;
counters.finalTextByteCount += Buffer.byteLength(node);
for (const traceId of workbenchTraceIdsFromRecord(parent)) terminalTraceIds.add(traceId);
}
return;
}
@@ -3968,6 +3973,7 @@ function summarizeWorkbenchJsonBody(value, path) {
}
counters.objectCount += 1;
const record = node;
const recordTraceIds = workbenchTraceIdsFromRecord(record);
for (const raw of [record.traceId, record.trace_id, record.id, record.turnId, record.messageId]) {
if (typeof raw === "string") collectWorkbenchIdsFromText(raw, traceIds, sessionIds);
}
@@ -3979,7 +3985,10 @@ function summarizeWorkbenchJsonBody(value, path) {
const normalizedStatus = normalizeWorkbenchStatus("status", statusValue);
if (normalizedStatus) {
statusCounts[normalizedStatus] = (statusCounts[normalizedStatus] || 0) + 1;
if (isWorkbenchTerminalStatus(normalizedStatus)) counters.terminalStatusCount += 1;
if (isWorkbenchTerminalStatus(normalizedStatus)) {
counters.terminalStatusCount += 1;
for (const traceId of recordTraceIds) terminalTraceIds.add(traceId);
}
if (isWorkbenchRunningStatus(normalizedStatus)) counters.runningStatusCount += 1;
}
}
@@ -3992,6 +4001,7 @@ function summarizeWorkbenchJsonBody(value, path) {
return {
pathKind: workbenchBodyPathKind(path),
traceIds: Array.from(traceIds).sort().slice(0, 12),
terminalTraceIds: Array.from(terminalTraceIds).sort().slice(0, 12),
sessionIds: Array.from(sessionIds).sort().slice(0, 12),
statusCounts,
...counters,
@@ -4006,6 +4016,17 @@ function collectWorkbenchIdsFromText(value, traceIds, sessionIds) {
for (const match of text.matchAll(/\bses_[A-Za-z0-9_-]+\b/gu)) sessionIds.add(match[0]);
}
function workbenchTraceIdsFromRecord(record) {
if (!record || typeof record !== "object") return [];
const values = [record.traceId, record.trace_id, record.turnId, record.turn_id, record.messageId, record.message_id, record.id];
const ids = new Set();
for (const raw of values) {
if (typeof raw !== "string") continue;
for (const match of raw.matchAll(/\btrc_[A-Za-z0-9_-]+\b/gu)) ids.add(match[0]);
}
return Array.from(ids).sort();
}
function normalizeWorkbenchStatus(key, value) {
if (!/status|state|phase|result|lifecycle/iu.test(String(key || ""))) return null;
const text = String(value || "").toLowerCase().replace(/[^a-z0-9_-]+/gu, "-").replace(/^-+|-+$/gu, "");