@@ -277,6 +277,8 @@ export function createCronPromptExecutor(params: {
277277 resolveFallbackCronSourceDeliveryPlan ( params . job , params . resolvedDelivery ) ;
278278 const sourceReplyDeliveryMode = sourceDelivery . sourceReplyDeliveryMode ;
279279 const messageChannel = sourceDelivery . target . channel ?? params . resolvedDelivery . channel ;
280+ // Cron prompts may intentionally have nothing to report; both runners must agree on silence.
281+ const allowEmptyAssistantReplyAsSilent = true ;
280282 const deliveryTargetRuntimeContext = buildCronDeliveryTargetRuntimeContext ( {
281283 resolvedDeliveryOk : params . resolvedDeliveryOk ,
282284 messageToolPromptEnabled : params . messageToolPromptEnabled ,
@@ -427,9 +429,7 @@ export function createCronPromptExecutor(params: {
427429 timeoutMs : params . timeoutMs ,
428430 runId : params . cronSession . sessionEntry . sessionId ,
429431 lane : resolveCronAgentLane ( params . lane ) ,
430- // Intentionally-silent cron jobs (watchers that say nothing unless
431- // there is something to report) should not throw empty_response.
432- allowEmptyAssistantReplyAsSilent : true ,
432+ allowEmptyAssistantReplyAsSilent,
433433 cliSessionId : cliSessionBinding ?. sessionId ,
434434 cliSessionBinding : guardedCliSessionBinding ,
435435 skillsSnapshot : params . skillsSnapshot ,
@@ -544,9 +544,7 @@ export function createCronPromptExecutor(params: {
544544 : undefined ,
545545 sourceReplyDeliveryMode,
546546 runId : params . cronSession . sessionEntry . sessionId ,
547- // Intentionally-silent cron jobs (watchers that say nothing unless
548- // there is something to report) should not throw empty_response.
549- allowEmptyAssistantReplyAsSilent : true ,
547+ allowEmptyAssistantReplyAsSilent,
550548 requireExplicitMessageTarget : sourceDelivery . messageTool . requireExplicitTarget ,
551549 disableMessageTool : ! sourceDelivery . messageTool . enabled ,
552550 forceMessageTool : sourceDelivery . messageTool . force ,
0 commit comments