diff --git a/extensions/signal/src/channel.ts b/extensions/signal/src/channel.ts index 5b23325b696..ece0afc7194 100644 --- a/extensions/signal/src/channel.ts +++ b/extensions/signal/src/channel.ts @@ -14,10 +14,8 @@ import { resolveSignalAccount, type ResolvedSignalAccount } from "./accounts.js" import { signalApprovalAuth } from "./approval-auth.js"; import { markdownToSignalTextChunks } from "./format.js"; import { signalMessageActions } from "./message-actions.js"; -import { monitorSignalProvider } from "./monitor.js"; import { looksLikeSignalTargetId, normalizeSignalMessagingTarget } from "./normalize.js"; import { resolveSignalOutboundTarget } from "./outbound-session.js"; -import { probeSignal, type SignalProbe } from "./probe.js"; import { resolveSignalReactionLevel } from "./reaction-level.js"; import { buildBaseChannelStatusSummary, @@ -39,6 +37,20 @@ import { signalSetupWizard, } from "./shared.js"; type SignalSendFn = typeof sendMessageSignal; +type SignalProbe = import("./probe.js").SignalProbe; + +let signalMonitorModulePromise: Promise | null = null; +let signalProbeModulePromise: Promise | null = null; + +async function loadSignalMonitorModule() { + signalMonitorModulePromise ??= import("./monitor.js"); + return await signalMonitorModulePromise; +} + +async function loadSignalProbeModule() { + signalProbeModulePromise ??= import("./probe.js"); + return await signalProbeModulePromise; +} function resolveSignalSendContext(params: { cfg: Parameters[0]["cfg"]; @@ -273,6 +285,7 @@ export const signalPlugin: ChannelPlugin = }), probeAccount: async ({ account, timeoutMs }) => { const baseUrl = account.baseUrl; + const { probeSignal } = await loadSignalProbeModule(); return await probeSignal(baseUrl, timeoutMs); }, formatCapabilitiesProbe: ({ probe }) => @@ -297,8 +310,8 @@ export const signalPlugin: ChannelPlugin = baseUrl: account.baseUrl, }); ctx.log?.info(`[${account.accountId}] starting provider (${account.baseUrl})`); - // Lazy import: the monitor pulls the reply pipeline; avoid ESM init cycles. - return monitorSignalProvider({ + const { monitorSignalProvider } = await loadSignalMonitorModule(); + return await monitorSignalProvider({ accountId: account.accountId, config: ctx.cfg, runtime: ctx.runtime,