Fix runtime guidance transcript replay

This commit is contained in:
wuyang6
2026-06-12 19:41:26 +08:00
parent 9237d6782a
commit aac6383fe6
2 changed files with 111 additions and 13 deletions
@@ -49,6 +49,7 @@ type ClawSession = {
type ClawStoredMessage = {
role?: string;
content?: string;
message_id?: string;
name?: string;
tool_call_id?: string;
tool_calls?: ClawStoredToolCall[];
@@ -801,7 +802,7 @@ export function toReplayRepository(
: [];
if (!content && !toolParts.length) continue;
if (content.trimStart().startsWith("<system-reminder>")) continue;
const id = `${fallbackSessionId}-${index}`;
const id = replayMessageId(fallbackSessionId, message, index);
const shouldShowAssistantText =
message.role !== "assistant" ||
!toolParts.length ||
@@ -1185,6 +1186,18 @@ function isRunStatusMessage(message?: ClawStoredMessage) {
return message?.metadata?.kind === "run_status";
}
function replayMessageId(
sessionId: string,
message: ClawStoredMessage,
index: number,
) {
const stableId =
typeof message.message_id === "string" && message.message_id.trim()
? message.message_id.trim()
: String(index);
return `${sessionId}-${stableId}`;
}
function resolvePendingPrompt(
messages: readonly ClawStoredMessage[],
runStatus?: ClawRunStatus | null,
@@ -1194,16 +1207,12 @@ function resolvePendingPrompt(
? runStatus.pending_prompt.trim()
: "";
if (!pendingPrompt) return null;
for (let index = messages.length - 1; index >= 0; index -= 1) {
const message = messages[index];
if (!message || message.role === "system" || message.role === "tool")
continue;
for (const message of messages) {
if (!message || message.role !== "user") continue;
const content = cleanStoredContent(message.content ?? "").trim();
if (!content || content.trimStart().startsWith("<system-reminder>"))
continue;
return message.role === "user" && content === pendingPrompt
? null
: pendingPrompt;
if (content === pendingPrompt) return null;
}
return pendingPrompt;
}