@@ -191,12 +191,18 @@ async function addWakeModeNowMainSystemEventJob(
191191
192192async function addMainOneShotHelloJob (
193193 cron : CronService ,
194- params : { atMs : number ; name : string ; deleteAfterRun ?: boolean } ,
194+ params : {
195+ atMs : number ;
196+ name : string ;
197+ deleteAfterRun ?: boolean ;
198+ delivery ?: { mode : "none" } ;
199+ } ,
195200) {
196201 return cron . add ( {
197202 name : params . name ,
198203 enabled : true ,
199204 ...( params . deleteAfterRun === undefined ? { } : { deleteAfterRun : params . deleteAfterRun } ) ,
205+ ...( params . delivery ? { delivery : params . delivery } : { } ) ,
200206 schedule : { kind : "at" , at : new Date ( params . atMs ) . toISOString ( ) } ,
201207 sessionTarget : "main" ,
202208 wakeMode : "now" ,
@@ -255,13 +261,18 @@ function createStartedCronService(
255261 } ) ;
256262}
257263
258- async function createMainOneShotJobHarness ( params : { name : string ; deleteAfterRun ?: boolean } ) {
264+ async function createMainOneShotJobHarness ( params : {
265+ name : string ;
266+ deleteAfterRun ?: boolean ;
267+ delivery ?: { mode : "none" } ;
268+ } ) {
259269 const harness = await createMainOneShotHarness ( ) ;
260270 const atMs = Date . parse ( "2025-12-13T00:00:02.000Z" ) ;
261271 const job = await addMainOneShotHelloJob ( harness . cron , {
262272 atMs,
263273 name : params . name ,
264274 deleteAfterRun : params . deleteAfterRun ,
275+ delivery : params . delivery ,
265276 } ) ;
266277 return { ...harness , atMs, job } ;
267278}
@@ -306,6 +317,24 @@ describe("CronService", () => {
306317 await stopCronAndCleanup ( cron , store ) ;
307318 } ) ;
308319
320+ it ( "does not wake the assistant for explicit no-delivery main systemEvent jobs" , async ( ) => {
321+ const { store, cron, enqueueSystemEvent, requestHeartbeat, events, atMs, job } =
322+ await createMainOneShotJobHarness ( {
323+ name : "silent main system event" ,
324+ deleteAfterRun : false ,
325+ delivery : { mode : "none" } ,
326+ } ) ;
327+
328+ vi . setSystemTime ( new Date ( atMs ) ) ;
329+ await vi . runOnlyPendingTimersAsync ( ) ;
330+ await events . waitFor ( ( evt ) => evt . jobId === job . id && evt . action === "finished" ) ;
331+
332+ expectMainSystemEventPosted ( enqueueSystemEvent , { text : "hello" , jobId : job . id } ) ;
333+ expect ( requestHeartbeat ) . not . toHaveBeenCalled ( ) ;
334+
335+ await stopCronAndCleanup ( cron , store ) ;
336+ } ) ;
337+
309338 it ( "runs a one-shot job and deletes it after success by default" , async ( ) => {
310339 const { store, cron, enqueueSystemEvent, requestHeartbeat, events, job } =
311340 await createMainOneShotJobHarness ( {
0 commit comments