Skip to content

Commit e6899d7

Browse files
committed
fix(lifecycle): cancel outbox entries for aborted turns
1 parent d25db96 commit e6899d7

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/infra/message-lifecycle/turns.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,19 @@ export function abortTurnsForSession(sessionKey: string, opts?: { stateDir?: str
560560
WHERE session_key=?
561561
AND status IN ('accepted','running','delivery_pending','failed_retryable')`,
562562
).run(now, now, sessionKey.trim());
563+
// Cancel any pending outbox entries linked to the now-aborted turns so
564+
// recoverPendingDeliveries doesn't replay sends for aborted turns.
565+
db.prepare(
566+
`UPDATE message_outbox
567+
SET status='failed_terminal',
568+
error_class='terminal',
569+
terminal_reason='turn_aborted',
570+
completed_at=?
571+
WHERE turn_id IN (
572+
SELECT id FROM message_turns WHERE session_key=? AND status='aborted'
573+
)
574+
AND status IN ('queued','failed_retryable')`,
575+
).run(now, sessionKey.trim());
563576
} catch (err) {
564577
logVerbose(`message-lifecycle/turns: abortTurnsForSession failed: ${String(err)}`);
565578
}

0 commit comments

Comments
 (0)