mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-01 04:50:22 +00:00
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import { stripHeartbeatToken } from "../auto-reply/heartbeat.js";
|
|
|
|
export type HeartbeatDeliveryPayload = {
|
|
text?: string;
|
|
mediaUrl?: string;
|
|
mediaUrls?: string[];
|
|
};
|
|
|
|
export function shouldSkipHeartbeatOnlyDelivery(
|
|
payloads: HeartbeatDeliveryPayload[],
|
|
ackMaxChars: number,
|
|
): boolean {
|
|
if (payloads.length === 0) {
|
|
return true;
|
|
}
|
|
const hasAnyMedia = payloads.some(
|
|
(payload) => (payload.mediaUrls?.length ?? 0) > 0 || Boolean(payload.mediaUrl),
|
|
);
|
|
if (hasAnyMedia) {
|
|
return false;
|
|
}
|
|
return payloads.some((payload) => {
|
|
const result = stripHeartbeatToken(payload.text, {
|
|
mode: "heartbeat",
|
|
maxAckChars: ackMaxChars,
|
|
});
|
|
return result.shouldSkip;
|
|
});
|
|
}
|
|
|
|
export function shouldEnqueueCronMainSummary(params: {
|
|
summaryText: string | undefined;
|
|
deliveryRequested: boolean;
|
|
delivered: boolean | undefined;
|
|
deliveryAttempted: boolean | undefined;
|
|
suppressMainSummary: boolean;
|
|
isCronSystemEvent: (text: string) => boolean;
|
|
}): boolean {
|
|
const summaryText = params.summaryText?.trim();
|
|
return Boolean(
|
|
summaryText &&
|
|
params.isCronSystemEvent(summaryText) &&
|
|
params.deliveryRequested &&
|
|
!params.delivered &&
|
|
params.deliveryAttempted !== true &&
|
|
!params.suppressMainSummary,
|
|
);
|
|
}
|