Skip to content

Commit fdbd854

Browse files
committed
fix: attach causes to session owner abort errors
1 parent 5f17e82 commit fdbd854

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

src/agents/pi-embedded-runner/run/attempt.session-lock.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -451,14 +451,18 @@ function abortReason(signal: AbortSignal): unknown {
451451
return "reason" in signal ? (signal as { reason?: unknown }).reason : undefined;
452452
}
453453

454+
function abortOwnerWaitReason(signal: AbortSignal): unknown {
455+
return abortReason(signal) ?? new Error("operation aborted", { cause: signal });
456+
}
457+
454458
function waitForSessionFileOwnerRelease(params: {
455459
sessionFile: string;
456460
entry: SessionFileOwnerEntry;
457461
timeoutMs?: number;
458462
signal?: AbortSignal;
459463
}): Promise<void> {
460464
if (params.signal?.aborted) {
461-
return Promise.reject(abortReason(params.signal) ?? new Error("operation aborted"));
465+
return Promise.reject(abortOwnerWaitReason(params.signal));
462466
}
463467
return new Promise<void>((resolve, reject) => {
464468
const waiter: SessionFileOwnerWaiter = {
@@ -499,7 +503,7 @@ function waitForSessionFileOwnerRelease(params: {
499503
}
500504
if (params.signal) {
501505
waiter.abortListener = () => {
502-
waiter.reject(abortReason(params.signal!) ?? new Error("operation aborted"));
506+
waiter.reject(abortOwnerWaitReason(params.signal!));
503507
};
504508
params.signal.addEventListener("abort", waiter.abortListener, { once: true });
505509
}
@@ -516,7 +520,7 @@ export async function acquireEmbeddedAttemptSessionFileOwner(params: {
516520
const ownerId = Symbol(sessionFileKey);
517521
while (true) {
518522
if (params.signal?.aborted) {
519-
throw abortReason(params.signal) ?? new Error("operation aborted");
523+
throw abortOwnerWaitReason(params.signal);
520524
}
521525
const entry = sessionFileOwnerState.owners.get(sessionFileKey);
522526
if (!entry) {
@@ -550,7 +554,11 @@ export async function acquireEmbeddedAttemptSessionFileOwner(params: {
550554
export function resetEmbeddedAttemptSessionFileOwnersForTest(): void {
551555
for (const entry of sessionFileOwnerState.owners.values()) {
552556
for (const waiter of entry.waiters) {
553-
waiter.reject(new Error("embedded attempt session file owners reset"));
557+
waiter.reject(
558+
new Error("embedded attempt session file owners reset", {
559+
cause: "resetEmbeddedAttemptSessionFileOwnersForTest",
560+
}),
561+
);
554562
}
555563
}
556564
sessionFileOwnerState.owners.clear();

0 commit comments

Comments
 (0)