fix in-flight request payload sync (#3940)

Integrated into release/v3.8.26 — keep pendingById in sync with the queue detail (Object.assign in place). Validated alongside #3937: typecheck:core clean, 42/42 request-logger + lifecycle tests, eslint 0 errors, file-size OK.
This commit is contained in:
Randi
2026-06-15 20:03:26 -04:00
committed by GitHub
parent d88ae9c157
commit b250e08d77
2 changed files with 35 additions and 1 deletions

View File

@@ -305,7 +305,7 @@ export function updatePendingRequest(
const details = pendingRequests.details[connectionId]?.[modelKey];
if (!details?.length) return;
const lastIdx = details.length - 1;
details[lastIdx] = { ...details[lastIdx], ...normalizePendingMetadata(metadata) };
Object.assign(details[lastIdx], normalizePendingMetadata(metadata));
}
/**

View File

@@ -87,6 +87,40 @@ test("updatePendingRequestStreamChunks stores stream chunks in the detail", () =
assert.equal(detail.streamChunks.provider[0], 'data: {"a":1}');
});
test("updatePendingRequest keeps pending detail API view in sync", () => {
usageHistory.clearPendingRequests();
const requestId = usageHistory.trackPendingRequest(
"claude-sonnet-4-6",
"cc-test",
"conn-1",
true,
{
clientRequest: { model: "cc-test/claude-sonnet-4-6", reasoning_effort: "xhigh" },
providerRequest: { model: "claude-sonnet-4-6", reasoning_effort: "xhigh" },
}
);
assert.ok(requestId, "trackPendingRequest should return an id");
usageHistory.updatePendingRequest("claude-sonnet-4-6", "cc-test", "conn-1", {
providerRequest: { model: "claude-sonnet-4-6", reasoning_effort: "high" },
stage: "provider_response_started",
});
const modelKey = "claude-sonnet-4-6 (cc-test)";
const detailFromQueue = usageHistory.getPendingRequests().details["conn-1"]?.[modelKey]?.[0];
const detailFromId = usageHistory.getPendingById().get(requestId);
assert.equal(detailFromId, detailFromQueue);
assert.deepEqual(detailFromId?.providerRequest, {
model: "claude-sonnet-4-6",
reasoning_effort: "high",
});
assert.deepEqual(detailFromId?.clientRequest, {
model: "cc-test/claude-sonnet-4-6",
reasoning_effort: "xhigh",
});
});
test("updatePendingRequestStreamChunks stores empty streamChunks object (not null)", () => {
usageHistory.clearPendingRequests();
usageHistory.trackPendingRequest("gpt-4", "openai", "conn-1", true);