






















@@ -799,12 +799,15 @@ export async function runEmbeddedPiAgent(
799799resolvedLoopDetectionConfig?.postCompactionGuard,
800800{ enabled: resolvedLoopDetectionConfig?.enabled !== false },
801801);
802+let postCompactionAbortController: AbortController | undefined;
803+let postCompactionAbortError: PostCompactionLoopPersistedError | undefined;
802804const observePostCompactionToolOutcome = (
803805observation: PostCompactionGuardObservation,
804806): void => {
805807const verdict = postCompactionGuard.observe(observation);
806808if (verdict.shouldAbort) {
807-throw PostCompactionLoopPersistedError.fromVerdict(verdict);
809+postCompactionAbortError ??= PostCompactionLoopPersistedError.fromVerdict(verdict);
810+postCompactionAbortController?.abort(postCompactionAbortError);
808811}
809812};
810813let lastRetryFailoverReason: FailoverReason | null = null;
@@ -1099,6 +1102,17 @@ export async function runEmbeddedPiAgent(
10991102startupStagesEmitted = true;
11001103}
110111041105+const attemptAbortController = new AbortController();
1106+postCompactionAbortController = attemptAbortController;
1107+const parentAbortSignal = params.abortSignal;
1108+const relayParentAbort = (): void => {
1109+attemptAbortController.abort(parentAbortSignal?.reason);
1110+};
1111+if (parentAbortSignal?.aborted) {
1112+relayParentAbort();
1113+} else {
1114+parentAbortSignal?.addEventListener("abort", relayParentAbort, { once: true });
1115+}
11021116const rawAttempt = await runEmbeddedAttemptWithBackend({
11031117sessionId: activeSessionId,
11041118sessionKey: resolvedSessionKey,
@@ -1177,7 +1191,7 @@ export async function runEmbeddedPiAgent(
11771191bashElevated: params.bashElevated,
11781192timeoutMs: params.timeoutMs,
11791193runId: params.runId,
1180-abortSignal: params.abortSignal,
1194+abortSignal: attemptAbortController.signal,
11811195replyOperation: params.replyOperation,
11821196shouldEmitToolResult: params.shouldEmitToolResult,
11831197shouldEmitToolOutput: params.shouldEmitToolOutput,
@@ -1216,7 +1230,19 @@ export async function runEmbeddedPiAgent(
12161230bootstrapPromptWarningSignaturesSeen[bootstrapPromptWarningSignaturesSeen.length - 1],
12171231 suppressNextUserMessagePersistence,
12181232 onUserMessagePersisted,
1219-});
1233+})
1234+.catch((err: unknown): never => {
1235+throw postCompactionAbortError ?? err;
1236+})
1237+.finally(() => {
1238+parentAbortSignal?.removeEventListener?.("abort", relayParentAbort);
1239+if (postCompactionAbortController === attemptAbortController) {
1240+postCompactionAbortController = undefined;
1241+}
1242+});
1243+if (postCompactionAbortError) {
1244+throw postCompactionAbortError;
1245+}
12201246const attempt = normalizeEmbeddedRunAttemptResult(rawAttempt);
1221124712221248const {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。