fix: keep exact assistant idempotency locked

This commit is contained in:
Shakker
2026-05-25 22:10:08 +01:00
committed by Shakker
parent 5d64ebe1de
commit d241a996de
2 changed files with 40 additions and 1 deletions
+40
View File
@@ -736,6 +736,46 @@ describe("appendAssistantMessageToSessionTranscript", () => {
}
});
it("dedupes concurrent exact assistant appends by idempotency key", async () => {
writeTranscriptStore();
const idempotencyKey = "mirror:concurrent-assistant";
const results = await Promise.all(
Array.from({ length: 8 }, () =>
appendExactAssistantMessageToSessionTranscript({
sessionKey,
storePath: fixture.storePath(),
idempotencyKey,
updateMode: "none",
message: createExactAssistantMessage({
text: "Mirrored reply",
provider: "openclaw",
model: "delivery-mirror",
}),
}),
),
);
expect(results.every((result) => result.ok)).toBe(true);
const messageIds = results.map((result) => (result.ok ? result.messageId : ""));
expect(new Set(messageIds).size).toBe(1);
const firstOk = results.find((result) => result.ok);
if (!firstOk?.ok) {
throw new Error("expected exact assistant append to succeed");
}
const records = fs
.readFileSync(firstOk.sessionFile, "utf-8")
.trim()
.split("\n")
.map((line) => JSON.parse(line) as { message?: { role?: string; idempotencyKey?: string } })
.filter(
(record) =>
record.message?.role === "assistant" && record.message.idempotencyKey === idempotencyKey,
);
expect(records).toHaveLength(1);
});
it("can emit file-only transcript refresh events for exact assistant appends", async () => {
writeTranscriptStore();
const emitSpy = vi.spyOn(transcriptEvents, "emitSessionTranscriptUpdate");
-1
View File
@@ -353,7 +353,6 @@ export async function appendExactAssistantMessageToSessionTranscript(params: {
return await appendSessionTranscriptMessage({
transcriptPath: sessionFile,
message,
idempotencyLookup: explicitIdempotencyKey ? "caller-checked" : "scan",
config: params.config,
});
},