From 7f52a4eec1b03d34b49094b5de21cf4ff271045e Mon Sep 17 00:00:00 2001 From: Codex Date: Fri, 26 Jun 2026 21:19:17 +0000 Subject: [PATCH] fix: show workbench session read telemetry --- .../diagnose-code-agent-script.ts | 15 +++++++ .../platform-infra-observability/render.ts | 43 +++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/scripts/src/platform-infra-observability/diagnose-code-agent-script.ts b/scripts/src/platform-infra-observability/diagnose-code-agent-script.ts index a2ada90e..27881b25 100644 --- a/scripts/src/platform-infra-observability/diagnose-code-agent-script.ts +++ b/scripts/src/platform-infra-observability/diagnose-code-agent-script.ts @@ -66,6 +66,11 @@ IMPORTANT_ATTRS = [ "workbench.read_model.route", "workbench.read_model.count", "workbench.read_model.family", "workbench.read_model.status", "workbench.read_model.reason", + "source", "sessionCount", "fallbackTitleCount", "fallbackTitleRatio", + "emptyPreviewCount", "includeSessionId", "sessionIds", "traceIds", + "returnedMessages", "totalMessages", "roleSequencePrefix", + "consecutiveUserPrefix", "adjacentSameRoleCount", "userCount", + "agentCount", "db.system", "db.operation.name", "db.sql.table", "db.query.arg_count", "db.index.expected", "db.pool.max_open", "db.pool.open_connections", "db.pool.in_use", "db.pool.idle", "db.pool.wait_count", @@ -361,6 +366,11 @@ IMPORTANT_ATTRS = [ "workbench.read_model.route", "workbench.read_model.count", "workbench.read_model.family", "workbench.read_model.status", "workbench.read_model.reason", + "source", "sessionCount", "fallbackTitleCount", "fallbackTitleRatio", + "emptyPreviewCount", "includeSessionId", "sessionIds", "traceIds", + "returnedMessages", "totalMessages", "roleSequencePrefix", + "consecutiveUserPrefix", "adjacentSameRoleCount", "userCount", + "agentCount", "http.target", "http.url", "url.path", "db.system", "db.operation.name", "db.sql.table", "db.query.arg_count", "db.index.expected", "db.pool.max_open", "db.pool.open_connections", @@ -790,6 +800,11 @@ IMPORTANT_ATTRS = [ "workbench.read_model.route", "workbench.read_model.count", "workbench.read_model.family", "workbench.read_model.status", "workbench.read_model.reason", + "source", "sessionCount", "fallbackTitleCount", "fallbackTitleRatio", + "emptyPreviewCount", "includeSessionId", "sessionIds", "traceIds", + "returnedMessages", "totalMessages", "roleSequencePrefix", + "consecutiveUserPrefix", "adjacentSameRoleCount", "userCount", + "agentCount", "db.system", "db.operation.name", "db.sql.table", "db.query.arg_count", "db.index.expected", "db.pool.max_open", "db.pool.open_connections", "db.pool.in_use", "db.pool.idle", "db.pool.wait_count", diff --git a/scripts/src/platform-infra-observability/render.ts b/scripts/src/platform-infra-observability/render.ts index b6221f99..207af3e3 100644 --- a/scripts/src/platform-infra-observability/render.ts +++ b/scripts/src/platform-infra-observability/render.ts @@ -235,6 +235,8 @@ export function renderTraceTable(input: { }); const runnerRows = traceRunnerRows(allSpans); const readRows = traceReadWindowRows(allSpans); + const sessionListRows = traceSessionListRows(allSpans); + const sessionMessageRows = traceSessionMessageRows(allSpans); const turnRows = traceTurnStatusRows(allSpans); const projectionRows = traceProjectionRows(allSpans); const countRows = asArray(input.result.spanNameCounts).slice(0, 8).map((item) => { @@ -270,6 +272,12 @@ export function renderTraceTable(input: { "Trace read windows:", formatTable(["TRACE", "SESSION", "SINCE", "LIMIT", "RETURNED", "RANGE", "TOTAL", "MORE", "FULL", "LAST"], readRows.length > 0 ? readRows : [["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"]]), "", + "Session list reads:", + formatTable(["SOURCE", "COUNT", "FALLBACK", "RATIO", "EMPTY_PREVIEW", "INCLUDE", "SESSIONS", "TRACES"], sessionListRows.length > 0 ? sessionListRows : [["-", "-", "-", "-", "-", "-", "-", "-"]]), + "", + "Session message reads:", + formatTable(["SESSION", "RETURNED", "TOTAL", "ROLES", "USER_PREFIX", "ADJ_SAME", "USER", "AGENT", "TRACES"], sessionMessageRows.length > 0 ? sessionMessageRows : [["-", "-", "-", "-", "-", "-", "-", "-", "-"]]), + "", "Turn status reads:", formatTable(["TRACE", "SESSION", "TURN", "STATUS", "PHASE", "ROUTE", "HTTP"], turnRows.length > 0 ? turnRows : [["-", "-", "-", "-", "-", "-", "-"]]), "", @@ -350,6 +358,41 @@ function traceReadWindowRows(spans: Record[]): string[][] { return dedupeRows(rows).slice(0, 12); } +function traceSessionListRows(spans: Record[]): string[][] { + const rows = spans.filter((span) => textValue(span.name) === "session_list_read").map((span) => { + const attrs = asPlainRecord(span.attributes); + return [ + shortenEnd(spanColumnAttr(attrs, ["source"]), 10), + shortenEnd(spanColumnAttr(attrs, ["sessionCount"]), 8), + shortenEnd(spanColumnAttr(attrs, ["fallbackTitleCount"]), 8), + shortenEnd(spanColumnAttr(attrs, ["fallbackTitleRatio"]), 8), + shortenEnd(spanColumnAttr(attrs, ["emptyPreviewCount"]), 8), + shortenMiddle(spanColumnAttr(attrs, ["includeSessionId"]), 18), + shortenMiddle(spanColumnAttr(attrs, ["sessionIds"]), 34), + shortenMiddle(spanColumnAttr(attrs, ["traceIds"]), 34), + ]; + }); + return dedupeRows(rows).slice(0, 12); +} + +function traceSessionMessageRows(spans: Record[]): string[][] { + const rows = spans.filter((span) => textValue(span.name) === "session_messages_read").map((span) => { + const attrs = asPlainRecord(span.attributes); + return [ + shortenMiddle(spanColumnAttr(attrs, ["sessionId"]), 18), + shortenEnd(spanColumnAttr(attrs, ["returnedMessages"]), 8), + shortenEnd(spanColumnAttr(attrs, ["totalMessages"]), 8), + shortenEnd(spanColumnAttr(attrs, ["roleSequencePrefix"]), 32), + shortenEnd(spanColumnAttr(attrs, ["consecutiveUserPrefix"]), 8), + shortenEnd(spanColumnAttr(attrs, ["adjacentSameRoleCount"]), 8), + shortenEnd(spanColumnAttr(attrs, ["userCount"]), 8), + shortenEnd(spanColumnAttr(attrs, ["agentCount"]), 8), + shortenMiddle(spanColumnAttr(attrs, ["traceIds"]), 34), + ]; + }); + return dedupeRows(rows).slice(0, 12); +} + function traceTurnStatusRows(spans: Record[]): string[][] { const rows = spans.filter((span) => textValue(span.name) === "turn_status_read").map((span) => { const attrs = asPlainRecord(span.attributes);