diff --git a/src/cron/isolated-agent/delivery-dispatch.ts b/src/cron/isolated-agent/delivery-dispatch.ts index 011d63b4fd0..1ec471ff009 100644 --- a/src/cron/isolated-agent/delivery-dispatch.ts +++ b/src/cron/isolated-agent/delivery-dispatch.ts @@ -10,7 +10,6 @@ import { sleepWithAbort } from "../../infra/backoff.js"; import { formatErrorMessage } from "../../infra/errors.js"; import type { OutboundDeliveryResult } from "../../infra/outbound/deliver.js"; import { normalizeTargetForProvider } from "../../infra/outbound/target-normalization.js"; -import { logWarn, logError } from "../../logger.js"; import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, @@ -133,6 +132,9 @@ let deliveryOutboundRuntimePromise: let deliverySubagentRegistryRuntimePromise: | Promise | undefined; +let deliveryLoggerRuntimePromise: + | Promise + | undefined; let subagentFollowupRuntimePromise: | Promise | undefined; @@ -158,6 +160,11 @@ async function loadDeliverySubagentRegistryRuntime(): Promise< return await deliverySubagentRegistryRuntimePromise; } +async function loadDeliveryLoggerRuntime(): Promise { + deliveryLoggerRuntimePromise ??= import("./delivery-logger.runtime.js"); + return await deliveryLoggerRuntimePromise; +} + async function loadSubagentFollowupRuntime(): Promise< typeof import("./subagent-followup.runtime.js") > { @@ -165,6 +172,22 @@ async function loadSubagentFollowupRuntime(): Promise< return await subagentFollowupRuntimePromise; } +async function logCronDeliveryWarn(message: string): Promise { + const { logWarn } = await loadDeliveryLoggerRuntime(); + logWarn(message); +} + +async function logCronDeliveryError(message: string): Promise { + const { logError } = await loadDeliveryLoggerRuntime(); + logError(message); +} + +function logCronDeliveryErrorDeferred(message: string): void { + void loadDeliveryLoggerRuntime().then(({ logError }) => { + logError(message); + }); +} + function cloneDeliveryResults( results: readonly OutboundDeliveryResult[], ): OutboundDeliveryResult[] { @@ -287,7 +310,7 @@ async function queueCronAwarenessSystemEvent(params: { contextKey: params.deliveryIdempotencyKey, }); } catch (err) { - logWarn( + await logCronDeliveryWarn( `[cron:${params.jobId}] failed to queue isolated cron awareness for the main session: ${formatErrorMessage(err)}`, ); } @@ -352,7 +375,7 @@ async function retryTransientDirectCronDelivery(params: { } const nextAttempt = retryIndex + 2; const maxAttempts = retryDelaysMs.length + 1; - logWarn( + await logCronDeliveryWarn( `[cron:${params.jobId}] transient direct announce delivery failure, retrying ${nextAttempt}/${maxAttempts} in ${Math.round(delayMs / 1000)}s: ${summarizeDirectCronDeliveryError(err)}`, ); retryIndex += 1; @@ -471,7 +494,7 @@ export async function dispatchCronDelivery( job: params.job, runStartedAt: params.runStartedAt, }); - logWarn( + await logCronDeliveryWarn( `[cron:${params.job.id}] skipping stale delivery scheduled at ${new Date(scheduledAtMs).toISOString()}, started ${Math.round(startDelayMs / 60_000)}m late, current age ${Math.round((nowMs - scheduledAtMs) / 60_000)}m`, ); return params.withRunSession({ @@ -502,7 +525,7 @@ export async function dispatchCronDelivery( const onError = params.deliveryBestEffort ? (err: unknown, _payload: unknown) => { hadPartialFailure = true; - logError( + logCronDeliveryErrorDeferred( `[cron:${params.job.id}] delivery payload failed (bestEffort): ${formatErrorMessage(err)}`, ); } @@ -566,7 +589,9 @@ export async function dispatchCronDelivery( ...params.telemetry, }); } - logError(`[cron:${params.job.id}] delivery failed (bestEffort): ${formatErrorMessage(err)}`); + await logCronDeliveryError( + `[cron:${params.job.id}] delivery failed (bestEffort): ${formatErrorMessage(err)}`, + ); return null; } }; @@ -695,7 +720,7 @@ export async function dispatchCronDelivery( deliveryPayloads, }; } - logWarn(`[cron:${params.job.id}] ${params.resolvedDelivery.error.message}`); + await logCronDeliveryWarn(`[cron:${params.job.id}] ${params.resolvedDelivery.error.message}`); return { result: params.withRunSession({ status: "ok", diff --git a/src/cron/isolated-agent/delivery-logger.runtime.ts b/src/cron/isolated-agent/delivery-logger.runtime.ts new file mode 100644 index 00000000000..57586a2a040 --- /dev/null +++ b/src/cron/isolated-agent/delivery-logger.runtime.ts @@ -0,0 +1 @@ +export { logError, logWarn } from "../../logger.js";