diff --git a/src/auto-reply/reply/agent-runner.ts b/src/auto-reply/reply/agent-runner.ts index 3d89eabb193..a7d3131107a 100644 --- a/src/auto-reply/reply/agent-runner.ts +++ b/src/auto-reply/reply/agent-runner.ts @@ -419,34 +419,35 @@ export async function runReplyAgent(params: { const sentTexts = runResult.messagingToolSentTexts ?? []; const sentMediaUrls = runResult.messagingToolSentMediaUrls ?? []; const sentTargets = runResult.messagingToolSentTargets ?? []; - if (activeSessionEntry) { + const sessionDedupeEntry = activeSessionEntry; + if (sessionDedupeEntry) { const now = Date.now(); if (sentTexts.length || sentMediaUrls.length || sentTargets.length) { - activeSessionEntry.lastMessagingToolSentAt = now; - activeSessionEntry.lastMessagingToolSentTexts = sentTexts; - activeSessionEntry.lastMessagingToolSentMediaUrls = sentMediaUrls; - activeSessionEntry.lastMessagingToolSentTargets = sentTargets; + sessionDedupeEntry.lastMessagingToolSentAt = now; + sessionDedupeEntry.lastMessagingToolSentTexts = sentTexts; + sessionDedupeEntry.lastMessagingToolSentMediaUrls = sentMediaUrls; + sessionDedupeEntry.lastMessagingToolSentTargets = sentTargets; } else if ( - typeof activeSessionEntry.lastMessagingToolSentAt === "number" && - now - activeSessionEntry.lastMessagingToolSentAt > RECENT_MESSAGING_TOOL_DEDUPE_WINDOW_MS + typeof sessionDedupeEntry.lastMessagingToolSentAt === "number" && + now - sessionDedupeEntry.lastMessagingToolSentAt > RECENT_MESSAGING_TOOL_DEDUPE_WINDOW_MS ) { - delete activeSessionEntry.lastMessagingToolSentAt; - delete activeSessionEntry.lastMessagingToolSentTexts; - delete activeSessionEntry.lastMessagingToolSentMediaUrls; - delete activeSessionEntry.lastMessagingToolSentTargets; + delete sessionDedupeEntry.lastMessagingToolSentAt; + delete sessionDedupeEntry.lastMessagingToolSentTexts; + delete sessionDedupeEntry.lastMessagingToolSentMediaUrls; + delete sessionDedupeEntry.lastMessagingToolSentTargets; } if (sessionKey && activeSessionStore) { - activeSessionStore[sessionKey] = activeSessionEntry; + activeSessionStore[sessionKey] = sessionDedupeEntry; } if (sessionKey && storePath) { await updateSessionStoreEntry({ storePath, sessionKey, update: async () => ({ - lastMessagingToolSentAt: activeSessionEntry.lastMessagingToolSentAt, - lastMessagingToolSentTexts: activeSessionEntry.lastMessagingToolSentTexts, - lastMessagingToolSentMediaUrls: activeSessionEntry.lastMessagingToolSentMediaUrls, - lastMessagingToolSentTargets: activeSessionEntry.lastMessagingToolSentTargets, + lastMessagingToolSentAt: sessionDedupeEntry.lastMessagingToolSentAt, + lastMessagingToolSentTexts: sessionDedupeEntry.lastMessagingToolSentTexts, + lastMessagingToolSentMediaUrls: sessionDedupeEntry.lastMessagingToolSentMediaUrls, + lastMessagingToolSentTargets: sessionDedupeEntry.lastMessagingToolSentTargets, }), }); } diff --git a/src/config/sessions/types.ts b/src/config/sessions/types.ts index 64e43ecd2ff..e133b4ae300 100644 --- a/src/config/sessions/types.ts +++ b/src/config/sessions/types.ts @@ -1,5 +1,6 @@ import crypto from "node:crypto"; import type { Skill } from "@mariozechner/pi-coding-agent"; +import type { MessagingToolSend } from "../../agents/pi-embedded-runner.js"; import type { ChatType } from "../../channels/chat-type.js"; import type { ChannelId } from "../../channels/plugins/types.js"; import type { DeliveryContext } from "../../utils/delivery-context.js"; @@ -80,12 +81,7 @@ export type SessionEntry = { /** Recently sent message-tool media urls for short-window cross-run dedupe. */ lastMessagingToolSentMediaUrls?: string[]; /** Recently sent message-tool routing targets for short-window cross-run dedupe. */ - lastMessagingToolSentTargets?: Array<{ - tool?: string; - provider?: string; - to?: string; - accountId?: string; - }>; + lastMessagingToolSentTargets?: MessagingToolSend[]; sessionId: string; updatedAt: number; sessionFile?: string;