diff --git a/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts b/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts index 1374d98b76e..f42e314831f 100644 --- a/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts +++ b/src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts @@ -25,6 +25,7 @@ describe("runCronIsolatedAgentTurn", () => { lastTo: "123", }); const deps: CliDeps = { + sendMessageSlack: vi.fn(), sendMessageWhatsApp: vi.fn(), sendMessageTelegram: vi.fn().mockResolvedValue({ messageId: "t1", diff --git a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts index b9100011845..17bcfc11ec2 100644 --- a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts +++ b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.e2e.test.ts @@ -15,6 +15,7 @@ import { setupIsolatedAgentTurnMocks } from "./isolated-agent.test-setup.js"; function createCliDeps(overrides: Partial = {}): CliDeps { return { + sendMessageSlack: vi.fn(), sendMessageWhatsApp: vi.fn(), sendMessageTelegram: vi.fn(), sendMessageDiscord: vi.fn(), diff --git a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts index cdbd3c7ee28..fa1f446add1 100644 --- a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts +++ b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts @@ -21,6 +21,7 @@ const withTempHome = withTempCronHome; function makeDeps(): CliDeps { return { + sendMessageSlack: vi.fn(), sendMessageWhatsApp: vi.fn(), sendMessageTelegram: vi.fn(), sendMessageDiscord: vi.fn(), diff --git a/src/cron/service.delivery-plan.test.ts b/src/cron/service.delivery-plan.test.ts index 930d444f73a..0337c063461 100644 --- a/src/cron/service.delivery-plan.test.ts +++ b/src/cron/service.delivery-plan.test.ts @@ -2,7 +2,8 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; -import { CronService } from "./service.js"; +import type { ChannelId } from "../channels/plugins/types.js"; +import { CronService, type CronServiceDeps } from "./service.js"; const noopLogger = { debug: vi.fn(), @@ -25,13 +26,13 @@ type DeliveryMode = "none" | "announce"; type DeliveryOverride = { mode: DeliveryMode; - channel?: string; + channel?: ChannelId | "last"; to?: string; }; async function withCronService( params: { - runIsolatedAgentJob?: () => Promise<{ status: "ok"; summary: string; delivered?: boolean }>; + runIsolatedAgentJob?: CronServiceDeps["runIsolatedAgentJob"]; }, run: (context: { cron: CronService; @@ -50,7 +51,7 @@ async function withCronService( requestHeartbeatNow, runIsolatedAgentJob: params.runIsolatedAgentJob ?? - (vi.fn(async () => ({ status: "ok", summary: "done" })) as never), + (vi.fn(async () => ({ status: "ok" as const, summary: "done" })) as never), }); await cron.start(); @@ -73,6 +74,7 @@ async function addIsolatedAgentTurnJob( ) { return cron.add({ name: params.name, + enabled: true, schedule: { kind: "every", everyMs: 60_000, anchorMs: Date.now() }, sessionTarget: "isolated", wakeMode: params.wakeMode, @@ -80,7 +82,7 @@ async function addIsolatedAgentTurnJob( kind: "agentTurn", message: "hello", ...params.payload, - }, + } as unknown as { kind: "agentTurn"; message: string }, ...(params.delivery ? { delivery: params.delivery as unknown as { @@ -129,7 +131,7 @@ describe("CronService delivery plan consistency", () => { await withCronService( { runIsolatedAgentJob: vi.fn(async () => ({ - status: "ok", + status: "ok" as const, summary: "done", delivered: true, })), diff --git a/src/cron/service.every-jobs-fire.test.ts b/src/cron/service.every-jobs-fire.test.ts index 5b59ad88cb6..b97edc09955 100644 --- a/src/cron/service.every-jobs-fire.test.ts +++ b/src/cron/service.every-jobs-fire.test.ts @@ -147,7 +147,7 @@ describe("CronService interval/cron jobs fire on time", () => { log: noopLogger, enqueueSystemEvent, requestHeartbeatNow, - runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })), + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })), }); await cron.start(); diff --git a/src/cron/service.get-job.test.ts b/src/cron/service.get-job.test.ts index a3e56004d46..c03a1380ab2 100644 --- a/src/cron/service.get-job.test.ts +++ b/src/cron/service.get-job.test.ts @@ -17,7 +17,7 @@ function createCronService(storePath: string) { log: logger, enqueueSystemEvent: vi.fn(), requestHeartbeatNow: vi.fn(), - runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })), + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })), }); } diff --git a/src/cron/service.issue-16156-list-skips-cron.test.ts b/src/cron/service.issue-16156-list-skips-cron.test.ts index 87e75448342..ff4bd7d7d7f 100644 --- a/src/cron/service.issue-16156-list-skips-cron.test.ts +++ b/src/cron/service.issue-16156-list-skips-cron.test.ts @@ -34,7 +34,7 @@ function createCronFromStorePath(storePath: string) { log: noopLogger, enqueueSystemEvent: vi.fn(), requestHeartbeatNow: vi.fn(), - runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })), + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })), }); } diff --git a/src/cron/service.prevents-duplicate-timers.test.ts b/src/cron/service.prevents-duplicate-timers.test.ts index a89aa0d8d6e..c5b2f348403 100644 --- a/src/cron/service.prevents-duplicate-timers.test.ts +++ b/src/cron/service.prevents-duplicate-timers.test.ts @@ -18,7 +18,7 @@ describe("CronService", () => { const store = await makeStorePath(); const enqueueSystemEvent = vi.fn(); const requestHeartbeatNow = vi.fn(); - const runIsolatedAgentJob = vi.fn(async () => ({ status: "ok" })); + const runIsolatedAgentJob = vi.fn(async () => ({ status: "ok" as const })); const cronA = new CronService({ storePath: store.storePath, diff --git a/src/cron/service.restart-catchup.test.ts b/src/cron/service.restart-catchup.test.ts index 78be88509f3..5a430ef8c8b 100644 --- a/src/cron/service.restart-catchup.test.ts +++ b/src/cron/service.restart-catchup.test.ts @@ -30,9 +30,9 @@ describe("CronService restart catch-up", () => { storePath: params.storePath, cronEnabled: true, log: noopLogger, - enqueueSystemEvent: params.enqueueSystemEvent, - requestHeartbeatNow: params.requestHeartbeatNow, - runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })), + enqueueSystemEvent: params.enqueueSystemEvent as never, + requestHeartbeatNow: params.requestHeartbeatNow as never, + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })) as never, }); } diff --git a/src/cron/service.runs-one-shot-main-job-disables-it.test.ts b/src/cron/service.runs-one-shot-main-job-disables-it.test.ts index 7d2a2a0b579..7729d2fa30e 100644 --- a/src/cron/service.runs-one-shot-main-job-disables-it.test.ts +++ b/src/cron/service.runs-one-shot-main-job-disables-it.test.ts @@ -394,7 +394,7 @@ async function loadLegacyDeliveryMigration(rawJob: Record) { log: noopLogger, enqueueSystemEvent: vi.fn(), requestHeartbeatNow: vi.fn(), - runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })), + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })), }); await cron.start(); const jobs = await cron.list({ includeDisabled: true }); @@ -506,7 +506,7 @@ describe("CronService", () => { expect(job.state.runningAtMs).toBeTypeOf("number"); if (typeof resolveHeartbeat === "function") { - resolveHeartbeat({ status: "ran", durationMs: 123 }); + (resolveHeartbeat as (res: HeartbeatRunResult) => void)({ status: "ran", durationMs: 123 }); } await runPromise; diff --git a/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts b/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts index f438faa806d..7ebbd1c9632 100644 --- a/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts +++ b/src/cron/service.skips-main-jobs-empty-systemevent-text.test.ts @@ -39,7 +39,7 @@ async function withCronService( log: noopLogger, enqueueSystemEvent, requestHeartbeatNow, - runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" })), + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })), }); await cron.start(); diff --git a/src/cron/service.store-migration.test.ts b/src/cron/service.store-migration.test.ts index ddf9971f521..4edbd0f01b2 100644 --- a/src/cron/service.store-migration.test.ts +++ b/src/cron/service.store-migration.test.ts @@ -58,7 +58,7 @@ describe("CronService store migrations", () => { log: noopLogger, enqueueSystemEvent: vi.fn(), requestHeartbeatNow: vi.fn(), - runIsolatedAgentJob: vi.fn(async () => ({ status: "ok", summary: "ok" })), + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const, summary: "ok" })), }); await cron.start(); diff --git a/src/cron/service.store.migration.test.ts b/src/cron/service.store.migration.test.ts index 14adfc9c9ea..7ba59757ef4 100644 --- a/src/cron/service.store.migration.test.ts +++ b/src/cron/service.store.migration.test.ts @@ -30,7 +30,7 @@ async function migrateAndLoadFirstJob(storePath: string): Promise ({ status: "ok" })), + runIsolatedAgentJob: vi.fn(async () => ({ status: "ok" as const })), }); await cron.start();