summaryrefslogtreecommitdiffhomepage
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
commitaf90ddec7e57fc89eb4db36c003dbb97d44d9f0f (patch)
tree76f08262bf5058b9fda59f0b3f1c4f88976e978f
parent5066aad92282068dfd3ce5e1bf87164264618cfe (diff)
downloaddispatch-web-af90ddec7e57fc89eb4db36c003dbb97d44d9f0f.tar.gz
dispatch-web-af90ddec7e57fc89eb4db36c003dbb97d44d9f0f.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.
-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 }));