From 13a0d7a9e03521effa5826a1e73f4313a66252f4 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sat, 18 Apr 2026 14:28:13 +0530 Subject: [PATCH] fix(cron): keep runner-owned delivery off message tool --- src/cron/isolated-agent/run.message-tool-policy.test.ts | 8 ++++++++ src/cron/isolated-agent/run.ts | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cron/isolated-agent/run.message-tool-policy.test.ts b/src/cron/isolated-agent/run.message-tool-policy.test.ts index 8b133fd6e5c..43a74f65837 100644 --- a/src/cron/isolated-agent/run.message-tool-policy.test.ts +++ b/src/cron/isolated-agent/run.message-tool-policy.test.ts @@ -92,6 +92,14 @@ describe("runCronIsolatedAgentTurn message tool policy", () => { }); }); + it("disables the message tool when webhook delivery is active", async () => { + await expectMessageToolDisabledForPlan({ + requested: false, + mode: "webhook", + to: "https://example.invalid/cron", + }); + }); + it("keeps the message tool enabled for shared callers when delivery is not requested", async () => { mockRunCronFallbackPassthrough(); resolveCronDeliveryPlanMock.mockReturnValue({ diff --git a/src/cron/isolated-agent/run.ts b/src/cron/isolated-agent/run.ts index a4fd0046f7d..5f0c32b0072 100644 --- a/src/cron/isolated-agent/run.ts +++ b/src/cron/isolated-agent/run.ts @@ -124,13 +124,14 @@ type IsolatedDeliveryContract = "cron-owned" | "shared"; function resolveCronToolPolicy(params: { deliveryRequested: boolean; resolvedDelivery: ResolvedCronDeliveryTarget; + deliveryMode: "announce" | "webhook" | "none"; }) { return { // Only enforce an explicit message target when the cron delivery target // was successfully resolved. When resolution fails the agent should not // be blocked by a target it cannot satisfy (#27898). requireExplicitMessageTarget: params.deliveryRequested && params.resolvedDelivery.ok, - disableMessageTool: params.deliveryRequested, + disableMessageTool: params.deliveryMode !== "none", }; } @@ -158,6 +159,7 @@ async function resolveCronDeliveryContext(params: { toolPolicy: resolveCronToolPolicy({ deliveryRequested: false, resolvedDelivery, + deliveryMode: deliveryPlan.mode, }), }; } @@ -176,6 +178,7 @@ async function resolveCronDeliveryContext(params: { toolPolicy: resolveCronToolPolicy({ deliveryRequested: deliveryPlan.requested, resolvedDelivery, + deliveryMode: deliveryPlan.mode, }), }; }