import type { loadConfig } from "../../../config/config.js"; import type { WebInboundMsg } from "../types.js"; import { resolveMessagePrefix } from "../../../agents/identity.js"; import { formatInboundEnvelope, type EnvelopeFormatOptions } from "../../../auto-reply/envelope.js"; export function formatReplyContext(msg: WebInboundMsg) { if (!msg.replyToBody) { return null; } const sender = msg.replyToSender ?? "unknown sender"; const idPart = msg.replyToId ? ` id:${msg.replyToId}` : ""; return `[Replying to ${sender}${idPart}]\n${msg.replyToBody}\n[/Replying]`; } export function buildInboundLine(params: { cfg: ReturnType; msg: WebInboundMsg; agentId: string; previousTimestamp?: number; envelope?: EnvelopeFormatOptions; }) { const { cfg, msg, agentId, previousTimestamp, envelope } = params; // WhatsApp inbound prefix: channels.whatsapp.messagePrefix > legacy messages.messagePrefix > identity/defaults const messagePrefix = resolveMessagePrefix(cfg, agentId, { configured: cfg.channels?.whatsapp?.messagePrefix, hasAllowFrom: (cfg.channels?.whatsapp?.allowFrom?.length ?? 0) > 0, }); const prefixStr = messagePrefix ? `${messagePrefix} ` : ""; const replyContext = formatReplyContext(msg); const baseLine = `${prefixStr}${msg.body}${replyContext ? `\n\n${replyContext}` : ""}`; // Wrap with standardized envelope for the agent. return formatInboundEnvelope({ channel: "WhatsApp", from: msg.chatType === "group" ? msg.from : msg.from?.replace(/^whatsapp:/, ""), timestamp: msg.timestamp, body: baseLine, chatType: msg.chatType, sender: { name: msg.senderName, e164: msg.senderE164, id: msg.senderJid, }, previousTimestamp, envelope, }); }