Improve replayed run status handling
This commit is contained in:
@@ -39,6 +39,7 @@ type ClawStoredMessage = {
|
||||
stop_reason?: string;
|
||||
metadata?: {
|
||||
elapsed_ms?: unknown;
|
||||
kind?: unknown;
|
||||
placeholder?: unknown;
|
||||
phase?: unknown;
|
||||
status?: unknown;
|
||||
@@ -523,8 +524,11 @@ function getReplayMessages(
|
||||
messages: readonly ClawStoredMessage[],
|
||||
runStatus?: ClawRunStatus | null,
|
||||
) {
|
||||
if (isActiveRunStatus(runStatus)) return [...messages];
|
||||
return trimIncompleteReplayTail(messages);
|
||||
const visibleMessages = isActiveRunStatus(runStatus)
|
||||
? messages.filter((message) => !isRunStatusMessage(message))
|
||||
: [...messages];
|
||||
if (isActiveRunStatus(runStatus)) return visibleMessages;
|
||||
return trimIncompleteReplayTail(visibleMessages);
|
||||
}
|
||||
|
||||
function shouldShowInterruptedNotice(
|
||||
@@ -532,6 +536,7 @@ function shouldShowInterruptedNotice(
|
||||
runStatus?: ClawRunStatus | null,
|
||||
) {
|
||||
if (isActiveRunStatus(runStatus)) return false;
|
||||
if (hasRunStatusMessage(messages, runStatus?.status)) return false;
|
||||
return (
|
||||
runStatus?.status === "interrupted" ||
|
||||
runStatus?.status === "cancelled" ||
|
||||
@@ -574,6 +579,21 @@ function hasTrailingAssistantToolCall(message?: ClawStoredMessage) {
|
||||
return message?.role === "assistant" && Boolean(message.tool_calls?.length);
|
||||
}
|
||||
|
||||
function hasRunStatusMessage(
|
||||
messages: readonly ClawStoredMessage[],
|
||||
status?: string,
|
||||
) {
|
||||
return messages.some(
|
||||
(message) =>
|
||||
isRunStatusMessage(message) &&
|
||||
(!status || message.metadata?.status === status),
|
||||
);
|
||||
}
|
||||
|
||||
function isRunStatusMessage(message?: ClawStoredMessage) {
|
||||
return message?.metadata?.kind === "run_status";
|
||||
}
|
||||
|
||||
function normalizeRunTimestampMs(value: unknown) {
|
||||
if (typeof value !== "number" || !Number.isFinite(value)) return undefined;
|
||||
return value < 10_000_000_000 ? Math.round(value * 1000) : Math.round(value);
|
||||
|
||||
Reference in New Issue
Block a user