diff --git a/src/auto-reply/heartbeat-reply-payload.ts b/src/auto-reply/heartbeat-reply-payload.ts new file mode 100644 index 000000000..4bdf9e3a5 --- /dev/null +++ b/src/auto-reply/heartbeat-reply-payload.ts @@ -0,0 +1,22 @@ +import type { ReplyPayload } from "./types.js"; + +export function resolveHeartbeatReplyPayload( + replyResult: ReplyPayload | ReplyPayload[] | undefined, +): ReplyPayload | undefined { + if (!replyResult) { + return undefined; + } + if (!Array.isArray(replyResult)) { + return replyResult; + } + for (let idx = replyResult.length - 1; idx >= 0; idx -= 1) { + const payload = replyResult[idx]; + if (!payload) { + continue; + } + if (payload.text || payload.mediaUrl || (payload.mediaUrls && payload.mediaUrls.length > 0)) { + return payload; + } + } + return undefined; +} diff --git a/src/infra/heartbeat-runner.ts b/src/infra/heartbeat-runner.ts index f06a7797d..89c2ff4f0 100644 --- a/src/infra/heartbeat-runner.ts +++ b/src/infra/heartbeat-runner.ts @@ -13,6 +13,7 @@ import { import { appendCronStyleCurrentTimeLine } from "../agents/current-time.js"; import { resolveEffectiveMessagesConfig } from "../agents/identity.js"; import { DEFAULT_HEARTBEAT_FILENAME } from "../agents/workspace.js"; +import { resolveHeartbeatReplyPayload } from "../auto-reply/heartbeat-reply-payload.js"; import { DEFAULT_HEARTBEAT_ACK_MAX_CHARS, DEFAULT_HEARTBEAT_EVERY, @@ -308,27 +309,6 @@ function resolveHeartbeatSession( return { sessionKey: mainSessionKey, storePath, store, entry: mainEntry }; } -function resolveHeartbeatReplyPayload( - replyResult: ReplyPayload | ReplyPayload[] | undefined, -): ReplyPayload | undefined { - if (!replyResult) { - return undefined; - } - if (!Array.isArray(replyResult)) { - return replyResult; - } - for (let idx = replyResult.length - 1; idx >= 0; idx -= 1) { - const payload = replyResult[idx]; - if (!payload) { - continue; - } - if (payload.text || payload.mediaUrl || (payload.mediaUrls && payload.mediaUrls.length > 0)) { - return payload; - } - } - return undefined; -} - function resolveHeartbeatReasoningPayloads( replyResult: ReplyPayload | ReplyPayload[] | undefined, ): ReplyPayload[] { diff --git a/src/web/auto-reply/heartbeat-runner.ts b/src/web/auto-reply/heartbeat-runner.ts index 3906690ee..10a89dd36 100644 --- a/src/web/auto-reply/heartbeat-runner.ts +++ b/src/web/auto-reply/heartbeat-runner.ts @@ -1,5 +1,5 @@ -import type { ReplyPayload } from "../../auto-reply/types.js"; import { appendCronStyleCurrentTimeLine } from "../../agents/current-time.js"; +import { resolveHeartbeatReplyPayload } from "../../auto-reply/heartbeat-reply-payload.js"; import { DEFAULT_HEARTBEAT_ACK_MAX_CHARS, resolveHeartbeatPrompt, @@ -26,27 +26,6 @@ import { whatsappHeartbeatLog } from "./loggers.js"; import { getSessionSnapshot } from "./session-snapshot.js"; import { elide } from "./util.js"; -function resolveHeartbeatReplyPayload( - replyResult: ReplyPayload | ReplyPayload[] | undefined, -): ReplyPayload | undefined { - if (!replyResult) { - return undefined; - } - if (!Array.isArray(replyResult)) { - return replyResult; - } - for (let idx = replyResult.length - 1; idx >= 0; idx -= 1) { - const payload = replyResult[idx]; - if (!payload) { - continue; - } - if (payload.text || payload.mediaUrl || (payload.mediaUrls && payload.mediaUrls.length > 0)) { - return payload; - } - } - return undefined; -} - export async function runWebHeartbeatOnce(opts: { cfg?: ReturnType; to: string;