fix(workbench): persist admitted turn messages (#1983)

Co-authored-by: root <root@lyon.remote>
This commit is contained in:
Lyon
2026-06-23 19:43:21 +08:00
committed by GitHub
parent 7ef77d8ed4
commit 4f7b53f36f
+43 -1
View File
@@ -280,7 +280,7 @@ function buildWorkbenchProjectionFacts({ traceId = null, ownerUserId = null, own
const timing = projectionTimingForStatus(projection.timing, terminal);
const diagnostic = projectionDiagnostics({ traceId: safeId, result: payload, trace: payload?.runnerTrace ?? null, projection });
const finalText = finalResponseTextValue(projection.finalResponse, payload?.finalResponse, session?.finalResponse, payload?.assistantText);
const messages = normalizeMessages(session?.messages, {
const messages = normalizeMessages(workbenchProjectionInputMessages({ session, payload, params, traceId: safeId, timestamp, terminal, terminalStatus, finalText }), {
traceId: safeId,
sessionId: resolvedSessionId,
conversationId: resolvedConversationId,
@@ -377,6 +377,48 @@ function buildWorkbenchProjectionFacts({ traceId = null, ownerUserId = null, own
};
}
function workbenchProjectionInputMessages({ session = {}, payload = {}, params = {}, traceId = null, timestamp = null, terminal = false, terminalStatus = "completed", finalText = null } = {}) {
if (Array.isArray(session?.messages) && session.messages.length > 0) return session.messages;
if (Array.isArray(payload?.messages) && payload.messages.length > 0) return payload.messages;
if (!traceId) return [];
const turnId = textValue(payload?.turnId) || traceId;
const userText = textValue(params?.message ?? params?.prompt ?? payload?.prompt ?? payload?.message);
const userMessageId = textValue(payload?.userMessageId ?? payload?.userMessage?.messageId) || stableFactId("msg", { traceId, role: "user" });
const assistantMessageId = textValue(payload?.assistantMessageId ?? payload?.messageId ?? payload?.assistantMessage?.messageId) || stableFactId("msg", { traceId, role: "agent" });
const createdAt = timestampValue(timestamp ?? payload?.createdAt ?? payload?.updatedAt);
const messages = [];
if (userText) {
messages.push({
messageId: userMessageId,
role: "user",
status: "sent",
text: userText,
traceId,
turnId,
createdAt,
updatedAt: createdAt,
valuesPrinted: false
});
}
messages.push({
messageId: assistantMessageId,
role: "agent",
status: terminal ? terminalStatus : "running",
text: terminal && finalText ? finalText : "",
traceId,
turnId,
timing: payload?.timing,
startedAt: payload?.startedAt,
lastEventAt: payload?.lastEventAt,
finishedAt: payload?.finishedAt,
durationMs: payload?.durationMs,
createdAt,
updatedAt: createdAt,
valuesPrinted: false
});
return messages;
}
function normalizeMessages(messages, context) {
const normalized = Array.isArray(messages) ? messages.map((message, index) => normalizeMessageFact(message, index, context)).filter(Boolean) : [];
if (context?.terminal && context?.finalText && context?.traceId && !normalized.some((message) => message.role !== "user" && message.traceId === context.traceId)) {