fix: seal restored workbench terminal turns
This commit is contained in:
@@ -5,7 +5,7 @@ import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
|
||||
import type { AgentChatResultResponse, ChatMessage } from "../src/types/index.ts";
|
||||
import { clearRunnerTraceTransientDiagnostics, mergeTerminalResultTrace, messageStatusPatchForTerminalMerge, messageTimingPatchForMerge, nonBlockingProjection, normalizeAgentError, projectionFromResult, shouldClearCompletedTurnDiagnostics, terminalMessageTimingPatchForNormalize } from "../src/stores/workbench-message-projection-runtime.ts";
|
||||
import { clearRunnerTraceTransientDiagnostics, mergeTerminalResultTrace, messageStatusPatchForTerminalMerge, messageTimingPatchForMerge, nonBlockingProjection, normalizeAgentError, projectionFromResult, shouldClearCompletedTurnDiagnostics, terminalMessagePatchFromTurnResult, terminalMessageTimingPatchForNormalize } from "../src/stores/workbench-message-projection-runtime.ts";
|
||||
|
||||
test("terminal result merge preserves runner trace evidence and timing", () => {
|
||||
const previous: ChatMessage["runnerTrace"] = {
|
||||
@@ -82,3 +82,39 @@ test("message timing and terminal status patches stay independent from store sta
|
||||
const terminalPatch = terminalMessageTimingPatchForNormalize(result);
|
||||
assert.equal(terminalPatch.durationMs, 3500);
|
||||
});
|
||||
|
||||
test("terminal seal blocks stale running snapshots after session restore", () => {
|
||||
const sealed = {
|
||||
role: "agent",
|
||||
status: "failed",
|
||||
text: "provider stream disconnected",
|
||||
traceAutoLifecycle: "terminal",
|
||||
runnerTrace: { traceId: "trc_1", status: "failed" },
|
||||
timing: { startedAt: "2026-01-01T00:00:00.000Z", finishedAt: "2026-01-01T00:00:05.000Z", durationMs: 5000, valuesRedacted: true }
|
||||
} as ChatMessage;
|
||||
|
||||
assert.deepEqual(messageStatusPatchForTerminalMerge(sealed, "running", false), { status: "failed", traceAutoLifecycle: "terminal" });
|
||||
|
||||
const restored = {
|
||||
role: "agent",
|
||||
status: "running",
|
||||
traceAutoLifecycle: "running",
|
||||
traceId: "trc_1",
|
||||
runnerTrace: { traceId: "trc_1", status: "running" },
|
||||
timing: { startedAt: "2026-01-01T00:00:00.000Z", valuesRedacted: true }
|
||||
} as ChatMessage;
|
||||
const terminal = terminalMessagePatchFromTurnResult(restored, {
|
||||
traceId: "trc_1",
|
||||
status: "failed",
|
||||
terminal: true,
|
||||
startedAt: "2026-01-01T00:00:00.000Z",
|
||||
finishedAt: "2026-01-01T00:00:04.000Z",
|
||||
durationMs: 4000,
|
||||
error: { message: "provider stream disconnected" }
|
||||
} as AgentChatResultResponse);
|
||||
|
||||
assert.equal(terminal?.status, "failed");
|
||||
assert.equal(terminal?.traceAutoLifecycle, "terminal");
|
||||
assert.equal(terminal?.durationMs, 4000);
|
||||
assert.equal(terminal?.error?.message, "provider stream disconnected");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user