import { resolveAnnounceTargetFromKey } from "../agents/tools/sessions-send-helpers.js"; import { normalizeChannelId } from "../channels/plugins/index.js"; import type { CliDeps } from "../cli/deps.js"; import { agentCommand } from "../commands/agent.js"; import { resolveMainSessionKeyFromConfig } from "../config/sessions.js"; import { resolveOutboundTarget } from "../infra/outbound/targets.js"; import { consumeRestartSentinel, formatRestartSentinelMessage, summarizeRestartSentinel, } from "../infra/restart-sentinel.js"; import { enqueueSystemEvent } from "../infra/system-events.js"; import { defaultRuntime } from "../runtime.js"; import { loadSessionEntry } from "./session-utils.js"; export async function scheduleRestartSentinelWake(params: { deps: CliDeps }) { const sentinel = await consumeRestartSentinel(); if (!sentinel) return; const payload = sentinel.payload; const sessionKey = payload.sessionKey?.trim(); const message = formatRestartSentinelMessage(payload); const summary = summarizeRestartSentinel(payload); if (!sessionKey) { const mainSessionKey = resolveMainSessionKeyFromConfig(); enqueueSystemEvent(message, { sessionKey: mainSessionKey }); return; } const { cfg, entry } = loadSessionEntry(sessionKey); const lastChannel = entry?.lastChannel; const lastTo = entry?.lastTo?.trim(); const parsedTarget = resolveAnnounceTargetFromKey(sessionKey); const channelRaw = lastChannel ?? parsedTarget?.channel; const channel = channelRaw ? normalizeChannelId(channelRaw) : null; const to = lastTo || parsedTarget?.to; if (!channel || !to) { enqueueSystemEvent(message, { sessionKey }); return; } const resolved = resolveOutboundTarget({ channel, to, cfg, accountId: parsedTarget?.accountId ?? entry?.lastAccountId, mode: "implicit", }); if (!resolved.ok) { enqueueSystemEvent(message, { sessionKey }); return; } try { await agentCommand( { message, sessionKey, to: resolved.to, channel, deliver: true, bestEffortDeliver: true, messageChannel: channel, }, defaultRuntime, params.deps, ); } catch (err) { enqueueSystemEvent(`${summary}\n${String(err)}`, { sessionKey }); } } export function shouldWakeFromRestartSentinel() { return !process.env.VITEST && process.env.NODE_ENV !== "test"; }