Merge pull request #1775 from pikasTech/fix/1770-running-turn-timing-authority

fix: keep running turn timing authoritative
This commit is contained in:
Lyon
2026-06-21 03:30:02 +08:00
committed by GitHub
+7 -5
View File
@@ -510,7 +510,7 @@ function factSessionSummary(session, facts = {}) {
// stale running turn row must not keep the visible timer running after the
// terminal event has already been projected.
const status = normalizeStatus(checkpointStatus ?? traceStatus ?? turnStatus ?? session?.status);
const timingSource = checkpoint ?? (traceId ? null : session);
const timingSource = checkpointStatus ? checkpoint : turn ?? checkpoint ?? (traceId ? null : session);
const timing = factTimingProjection(timingSource, status);
return {
sessionId,
@@ -594,9 +594,11 @@ function factMessageDto(message, parts = [], facts = {}) {
const turn = traceId ? factTurnForTrace(facts, traceId) : null;
const checkpoint = traceId ? factCheckpointForTrace(facts, traceId) : null;
const messageStatus = normalizeStatus(message?.status);
const checkpointStatus = isAssistantLikeRole(role) ? normalizeTerminalStatus(checkpoint?.status) : null;
const status = normalizeStatus(checkpointStatus ?? (isAssistantLikeRole(role) ? turn?.status : null) ?? messageStatus);
const timing = factTimingProjection(isAssistantLikeRole(role) ? checkpoint ?? turn ?? message : message, status);
const assistantLike = isAssistantLikeRole(role);
const checkpointStatus = assistantLike ? normalizeTerminalStatus(checkpoint?.status) : null;
const status = normalizeStatus(checkpointStatus ?? (assistantLike ? turn?.status : null) ?? messageStatus);
const timingSource = assistantLike ? (checkpointStatus ? checkpoint : turn ?? checkpoint ?? message) : message;
const timing = factTimingProjection(timingSource, status);
const text = projectionText(message?.text, message?.content, message?.message, message?.finalResponse);
const normalizedParts = parts.length > 0
? [...parts].sort(compareFactPartsAsc).map((part) => factPartDto(part, messageId, traceId)).filter(Boolean)
@@ -662,7 +664,7 @@ function factTurnSnapshot({ turn = null, session = null, facts = {}, traceId, tu
const traceStatus = normalizeTerminalStatus(trace.status);
const status = normalizeStatus(checkpointStatus ?? traceStatus ?? turn?.status ?? session?.status);
const finalText = projectionText(turn?.finalResponse, turn?.assistantText, turn?.text, assistantMessage?.text);
const timing = factTimingProjection(checkpoint, status);
const timing = factTimingProjection(checkpointStatus ? checkpoint : turn ?? checkpoint, status);
return {
turnId: resolvedTurnId,
traceId: safeTrace,