fix(workbench): remove implicit completed fallback (#2053)
This commit is contained in:
@@ -994,7 +994,7 @@ function nonBlockingProjection(projection: ProjectionDiagnostic | null): Project
|
||||
updatedAt: new Date().toISOString()
|
||||
} as NonNullable<ChatMessage["runnerTrace"]>;
|
||||
const resultStatus = normalizedStatusText(result.status) ?? null;
|
||||
const terminal = result.terminal === true || isTerminalMessageStatus(resultStatus) || traceResultHasTerminalEvidence(result);
|
||||
const terminal = result.terminal === true || isTerminalMessageStatus(resultStatus);
|
||||
const resultError = normalizeAgentError(result.error ?? null);
|
||||
const resultProjection = projectionFromResult(result);
|
||||
const mergedRunnerTrace = mergeRunnerTrace(message.runnerTrace, nextTrace);
|
||||
@@ -1656,7 +1656,7 @@ function normalizeChatMessage(message: ChatMessage): ChatMessage {
|
||||
const baseText = firstNonEmptyString(message.text, messageText((message as Record<string, unknown>).content), messageText((message as Record<string, unknown>).message));
|
||||
const finalText = finalResponseText((message as Record<string, unknown>).finalResponse);
|
||||
const errorText = agentErrorDisplayText(error);
|
||||
const status = normalizeAgentMessageStatusFromEvidence(role, rawStatus, message, runnerTrace, finalText);
|
||||
const status = normalizeAgentMessageStatusFromEvidence(role, rawStatus, runnerTrace);
|
||||
const text = role === "agent"
|
||||
? isTerminalMessageStatus(status)
|
||||
? projectedAgentMessageText({ status, finalText, errorText, baseText })
|
||||
@@ -1666,12 +1666,11 @@ function normalizeChatMessage(message: ChatMessage): ChatMessage {
|
||||
return { ...message, ...messageTimingPatch(message), role, text, id: messageId, messageId, title: normalizeWorkbenchMessageTitle(role, message.title), createdAt: message.createdAt ?? new Date().toISOString(), status, runnerTrace, error: error ?? message.error ?? null, projection, projectionStatus: projection?.projectionStatus ?? null, projectionHealth: projection?.projectionHealth ?? null, blocker: projection?.blocker ?? null, agentRun: agentRun ?? undefined };
|
||||
}
|
||||
|
||||
function normalizeAgentMessageStatusFromEvidence(role: ChatMessage["role"], status: ChatMessage["status"], message: ChatMessage, runnerTrace: ChatMessage["runnerTrace"], finalText: string | null): ChatMessage["status"] {
|
||||
function normalizeAgentMessageStatusFromEvidence(role: ChatMessage["role"], status: ChatMessage["status"], runnerTrace: ChatMessage["runnerTrace"]): ChatMessage["status"] {
|
||||
if (role !== "agent") return status;
|
||||
const traceStatus = normalizedStatusText(runnerTrace?.status);
|
||||
if (isTerminalMessageStatus(traceStatus)) return traceStatus as ChatMessage["status"];
|
||||
if (isTerminalMessageStatus(status)) return status;
|
||||
if (finalText || traceSnapshotHasTerminalEvidence(message) || traceSnapshotHasTerminalEvidence(runnerTrace)) return "completed" as ChatMessage["status"];
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -1840,7 +1839,7 @@ function messageTimingPatchForMerge(message: ChatMessage, value: unknown): Parti
|
||||
const currentTiming = current.timing ?? null;
|
||||
const record = recordValue(value);
|
||||
const incomingStatus = normalizedStatusText(firstNonEmptyString(record?.status));
|
||||
const incomingTerminal = isTerminalMessageStatus(incomingStatus) || traceResultHasTerminalEvidence(value);
|
||||
const incomingTerminal = record?.terminal === true || isTerminalMessageStatus(incomingStatus);
|
||||
if (!incomingTerminal || isTerminalMessageStatus(message.status) || currentTiming?.finishedAt || currentTiming?.durationMs != null) return current;
|
||||
const incoming = normalizeTimingProjection(value);
|
||||
const terminalTiming = incoming ?? ({} as Partial<WorkbenchTurnTimingProjection>);
|
||||
@@ -1857,7 +1856,7 @@ function messageTimingPatchForMerge(message: ChatMessage, value: unknown): Parti
|
||||
function messageStatusPatchForTerminalMerge(message: ChatMessage, resultStatus: string | null, terminal: boolean): Partial<ChatMessage> {
|
||||
if (!terminal || isTerminalMessageStatus(message.status)) return {};
|
||||
if (resultStatus && isTerminalMessageStatus(resultStatus)) return { status: resultStatus as ChatMessage["status"] };
|
||||
return { status: "completed" };
|
||||
return {};
|
||||
}
|
||||
|
||||
function inferFinishedAtFromDuration(startedAt: unknown, durationMs: number | null): string | null {
|
||||
|
||||
Reference in New Issue
Block a user