diff --git a/scripts/src/hwlab-node-web-observe-runner-source.ts b/scripts/src/hwlab-node-web-observe-runner-source.ts index 9371f668..6ebe8564 100644 --- a/scripts/src/hwlab-node-web-observe-runner-source.ts +++ b/scripts/src/hwlab-node-web-observe-runner-source.ts @@ -3241,7 +3241,9 @@ function buildTurnTimingTable(samples, timeline) { lastPromptIndex: metric.promptIndex ?? null, traceId: metric.traceId ?? null, messageId: metric.messageId ?? null, - domIndex: metric.domIndex ?? null + domIndex: metric.domIndex ?? null, + pageRole: metric.pageRole ?? sample.pageRole ?? null, + pageId: metric.pageId ?? sample.pageId ?? null }; registry.set(metric.key, column); columns.push(column); @@ -3258,6 +3260,9 @@ function buildTurnTimingTable(samples, timeline) { status: metric.status ?? null, promptIndex: metric.promptIndex ?? null, source: metric.source, + pageRole: metric.pageRole ?? sample.pageRole ?? null, + pageId: metric.pageId ?? sample.pageId ?? null, + sampleGroupSeq: sample.sampleGroupSeq ?? null, traceId: metric.traceId ?? null, messageId: metric.messageId ?? null, textHash: metric.textHash ?? null @@ -3266,6 +3271,9 @@ function buildTurnTimingTable(samples, timeline) { rows.push({ ts: sample.ts ?? null, seq: sample.seq ?? null, + sampleGroupSeq: sample.sampleGroupSeq ?? null, + pageRole: sample.pageRole ?? null, + pageId: sample.pageId ?? null, promptIndex: timelineItem.promptIndex ?? 0, routeSessionId: sample.routeSessionId ?? null, activeSessionId: sample.activeSessionId ?? null, @@ -3322,6 +3330,8 @@ function detectTurnTimingNonMonotonic(columns, rows) { messageId: cell.messageId ?? column.messageId ?? null, promptIndex: cell.promptIndex ?? row.promptIndex ?? null, source: cell.source ?? column.source ?? null, + pageRole: cell.pageRole ?? column.pageRole ?? null, + pageId: cell.pageId ?? column.pageId ?? null, valuesRedacted: true }; anomalies.push(event); @@ -3352,6 +3362,8 @@ function detectTurnTimingNonMonotonic(columns, rows) { messageId: cell.messageId ?? column.messageId ?? null, promptIndex: cell.promptIndex ?? row.promptIndex ?? null, source: cell.source ?? column.source ?? null, + pageRole: cell.pageRole ?? column.pageRole ?? null, + pageId: cell.pageId ?? column.pageId ?? null, valuesRedacted: true }); } @@ -3377,6 +3389,8 @@ function detectTurnTimingNonMonotonic(columns, rows) { messageId: cell.messageId ?? column.messageId ?? null, promptIndex: cell.promptIndex ?? row.promptIndex ?? null, source: cell.source ?? column.source ?? null, + pageRole: cell.pageRole ?? column.pageRole ?? null, + pageId: cell.pageId ?? column.pageId ?? null, valuesRedacted: true }); } @@ -3408,6 +3422,8 @@ function detectTurnTimingNonMonotonic(columns, rows) { messageId: cell.messageId ?? column.messageId ?? null, promptIndex: cell.promptIndex ?? row.promptIndex ?? null, source: cell.source ?? column.source ?? null, + pageRole: cell.pageRole ?? column.pageRole ?? null, + pageId: cell.pageId ?? column.pageId ?? null, valuesRedacted: true }); if (increase < 0) { @@ -3428,6 +3444,8 @@ function detectTurnTimingNonMonotonic(columns, rows) { messageId: cell.messageId ?? column.messageId ?? null, promptIndex: cell.promptIndex ?? row.promptIndex ?? null, source: cell.source ?? column.source ?? null, + pageRole: cell.pageRole ?? column.pageRole ?? null, + pageId: cell.pageId ?? column.pageId ?? null, valuesRedacted: true }); } @@ -3452,6 +3470,8 @@ function detectTurnTimingNonMonotonic(columns, rows) { messageId: cell.messageId ?? column.messageId ?? null, promptIndex: cell.promptIndex ?? row.promptIndex ?? null, source: cell.source ?? column.source ?? null, + pageRole: cell.pageRole ?? column.pageRole ?? null, + pageId: cell.pageId ?? column.pageId ?? null, valuesRedacted: true }); } @@ -3484,7 +3504,9 @@ function isTerminalTurnStatus(value) { function turnMetricItems(sample, timelineItem) { const promptIndex = timelineItem.promptIndex ?? 0; - const sessionKey = sample?.routeSessionId || sample?.activeSessionId || "unknown-session"; + const pageRole = sample?.pageRole || "control"; + const pageId = sample?.pageId || "unknown-page"; + const sessionKey = pageRole + ":" + pageId + ":" + (sample?.routeSessionId || sample?.activeSessionId || "unknown-session"); const roundKey = String(promptIndex); const items = []; if (Array.isArray(sample?.turns) && sample.turns.length > 0) { @@ -3503,6 +3525,8 @@ function turnMetricItems(sample, timelineItem) { items.push({ key, source: "turn", + pageRole, + pageId, promptIndex, traceId, messageId, @@ -3531,6 +3555,8 @@ function turnMetricItems(sample, timelineItem) { ? "message:" + sessionKey + ":id-" + stableId : "message:" + sessionKey + ":round-" + roundKey + ":dom-index-" + String(domIndex), source: "message", + pageRole, + pageId, promptIndex, traceId, messageId, @@ -3548,6 +3574,8 @@ function turnMetricItems(sample, timelineItem) { return [{ key: "aggregate:" + sessionKey + ":round-" + roundKey, source: "aggregate", + pageRole, + pageId, promptIndex, traceId: null, messageId: null,