



























@@ -6,6 +6,7 @@ import {
66} from "./run.suite-helpers.js";
77import {
88buildWorkspaceSkillSnapshotMock,
9+dispatchCronDeliveryMock,
910getCliSessionIdMock,
1011isCliProviderMock,
1112lookupContextTokensMock,
@@ -257,6 +258,40 @@ describe("runCronIsolatedAgentTurn — skill filter", () => {
257258});
258259259260describe("CLI session handoff (issue #29774)", () => {
261+it("passes the cron abort signal to CLI runs and drops late CLI results", async () => {
262+const abortController = new AbortController();
263+let markCliStarted!: () => void;
264+const cliStarted = new Promise<void>((resolve) => {
265+markCliStarted = resolve;
266+});
267+268+isCliProviderMock.mockReturnValue(true);
269+runCliAgentMock.mockImplementationOnce(async (params: { abortSignal?: AbortSignal }) => {
270+expect(params.abortSignal).toBe(abortController.signal);
271+markCliStarted();
272+await new Promise<void>((resolve) => {
273+params.abortSignal?.addEventListener("abort", () => resolve(), { once: true });
274+});
275+return {
276+payloads: [{ text: "late cli output" }],
277+meta: { agentMeta: { sessionId: "late-cli-session", usage: { input: 5, output: 10 } } },
278+};
279+});
280+mockCliFallbackInvocation();
281+282+const runPromise = runCronIsolatedAgentTurn(
283+makeSkillParams({ abortSignal: abortController.signal }),
284+);
285+await cliStarted;
286+abortController.abort("cron: job execution timed out");
287+288+const result = await runPromise;
289+290+expect(result.status).toBe("error");
291+expect(result.error).toBe("cron: job execution timed out");
292+expect(dispatchCronDeliveryMock).not.toHaveBeenCalled();
293+});
294+260295it("does not pass stored cliSessionId on fresh isolated runs (isNewSession=true)", async () => {
261296// Simulate a persisted CLI session ID from a previous run.
262297getCliSessionIdMock.mockReturnValue("prev-cli-session-abc");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。