summaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-22 13:01:13 +0900
committerAdam Malczewski <[email protected]>2026-06-22 13:01:13 +0900
commitabed29e2756ce3b13f77df4c1e27398ce5889a29 (patch)
tree24b7fcdce20cf713051db84f525249286b333678 /src/core
parent9fd9deb8c8c8b8deb5a8094d27b9b49011a15572 (diff)
downloaddispatch-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')
-rw-r--r--src/core/metrics/place.ts10
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 }));