Skip to content

Commit 2330c6b

Browse files
steipeteLZY3538
andcommitted
refactor(cron): centralize silent reply policy
Reuse existing executor suites and keep CLI and embedded cron runners aligned. Co-authored-by: 刘镇业 0668001127 <[email protected]>
1 parent 90beca7 commit 2330c6b

4 files changed

Lines changed: 7 additions & 74 deletions

File tree

src/cron/isolated-agent/run-executor.silent-empty.test.ts

Lines changed: 0 additions & 68 deletions
This file was deleted.

src/cron/isolated-agent/run-executor.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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,

src/cron/isolated-agent/run.message-tool-policy.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,7 @@ describe("runCronIsolatedAgentTurn message tool policy", () => {
755755
expectRecordFields(
756756
getMockCallArg(runCliAgentMock, 0, 0, "CLI run"),
757757
{
758+
allowEmptyAssistantReplyAsSilent: true,
758759
messageChannel: "messagechat",
759760
requireExplicitMessageTarget: true,
760761
},

src/cron/isolated-agent/run.source-delivery-guard.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ describe("createCronPromptExecutor sourceDelivery guard", () => {
288288
expect(runEmbeddedAgentMock).toHaveBeenCalledTimes(1);
289289
const args = getEmbeddedRunArg();
290290
expect(args.sourceReplyDeliveryMode).toBeUndefined();
291+
expect(args.allowEmptyAssistantReplyAsSilent).toBe(true);
291292
expect(args.requireExplicitMessageTarget).toBe(false);
292293
expect(args.disableMessageTool).toBe(false);
293294
expect(args.forceMessageTool).toBe(false);
@@ -308,6 +309,7 @@ describe("createCronPromptExecutor sourceDelivery guard", () => {
308309
expect(runEmbeddedAgentMock).toHaveBeenCalledTimes(1);
309310
const args = getEmbeddedRunArg();
310311
expect(args.sourceReplyDeliveryMode).toBeUndefined();
312+
expect(args.allowEmptyAssistantReplyAsSilent).toBe(true);
311313
expect(args.disableMessageTool).toBe(false);
312314
expect(args.forceMessageTool).toBe(false);
313315
expect(args.messageChannel).toBe("messagechat");

0 commit comments

Comments
 (0)