diff options
| author | Adam Malczewski <[email protected]> | 2026-06-22 13:01:13 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-22 13:01:13 +0900 |
| commit | abed29e2756ce3b13f77df4c1e27398ce5889a29 (patch) | |
| tree | 24b7fcdce20cf713051db84f525249286b333678 /src/core/metrics | |
| parent | 9fd9deb8c8c8b8deb5a8094d27b9b49011a15572 (diff) | |
| download | dispatch-web-abed29e2756ce3b13f77df4c1e27398ce5889a29.tar.gz dispatch-web-abed29e2756ce3b13f77df4c1e27398ce5889a29.zip | |
fix(metrics): show turn/step metrics for compacted conversations
Compacted conversations start with a system summary (role: "system")
instead of a user message (role: "user"). The interleaveTurnMetrics
function only detected segments by role === "user", so compacted
conversations got zero segments and no metrics were emitted.
Fix: when no user messages are found but metrics entries exist, treat
the entire transcript as one segment. This places turn-metrics at the
end and anchors step-metrics to any tool-batch groups by stepId.
686 tests green.
Diffstat (limited to 'src/core/metrics')
| -rw-r--r-- | src/core/metrics/place.ts | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/core/metrics/place.ts b/src/core/metrics/place.ts index 47d3c5f..0048fa0 100644 --- a/src/core/metrics/place.ts +++ b/src/core/metrics/place.ts @@ -64,7 +64,15 @@ export function interleaveTurnMetrics( } } - const T = segmentStarts.length; + let T = segmentStarts.length; + + // No user messages — e.g. a compacted conversation whose history starts + // with a system summary. Treat the entire transcript as one segment so + // turn/step metrics can still be placed. + if (T === 0 && entries.length > 0) { + segmentStarts.push(0); + T = 1; + } if (T === 0) { return groups.map((g) => ({ kind: "group" as const, group: g })); |
