diff --git a/src/context-engine/context-engine.test.ts b/src/context-engine/context-engine.test.ts index 354d37ca46b..024c0c2cfac 100644 --- a/src/context-engine/context-engine.test.ts +++ b/src/context-engine/context-engine.test.ts @@ -603,6 +603,32 @@ describe("Engine contract tests", () => { }); }); + it("delegateCompactionToRuntime forwards the caller abortSignal to the runtime (#89868)", async () => { + installCompactRuntimeSpy(); + const controller = new AbortController(); + await delegateCompactionToRuntime({ + sessionId: "s-abort", + sessionFile: "/tmp/session-abort.json", + tokenBudget: 4096, + abortSignal: controller.signal, + }); + + const compactRuntimeParams = requireCompactRuntimeParams(0); + expect(compactRuntimeParams.abortSignal).toBe(controller.signal); + }); + + it("delegateCompactionToRuntime passes undefined abortSignal when none supplied", async () => { + installCompactRuntimeSpy(); + await delegateCompactionToRuntime({ + sessionId: "s-no-abort", + sessionFile: "/tmp/session-no-abort.json", + tokenBudget: 4096, + }); + + const compactRuntimeParams = requireCompactRuntimeParams(0); + expect(compactRuntimeParams.abortSignal).toBeUndefined(); + }); + it("builds a normalized memory system prompt addition from the active memory prompt path", () => { registerMemoryPromptSection(({ citationsMode }) => [ "## Memory Recall", diff --git a/src/context-engine/delegate.ts b/src/context-engine/delegate.ts index 0e4088a11a6..85c679eb571 100644 --- a/src/context-engine/delegate.ts +++ b/src/context-engine/delegate.ts @@ -60,6 +60,7 @@ export async function delegateCompactionToRuntime( ...(currentTokenCount !== undefined ? { currentTokenCount } : {}), force: params.force, customInstructions: params.customInstructions, + abortSignal: params.abortSignal, workspaceDir: typeof runtimeContext.workspaceDir === "string" ? runtimeContext.workspaceDir : process.cwd(), });