Extract message runtime preflight helpers

This commit is contained in:
ejclaw
2026-04-29 11:15:18 +09:00
parent 896c52e2cc
commit dab8f97e5e
3 changed files with 208 additions and 51 deletions

View File

@@ -0,0 +1,58 @@
import { getMessagesSinceSeq } from './db.js';
import {
filterLoopingPairedBotMessages,
getProcessableMessages,
} from './message-runtime-rules.js';
import type { WorkItem } from './db/work-items.js';
import type { Channel, NewMessage } from './types.js';
export function getFreshHumanPreflightMessages(args: {
chatJid: string;
channel: Channel;
lastAgentTimestamps: Record<string, string>;
assistantName: string;
failureFinalText: string;
}): NewMessage[] {
const sinceSeqCursor = args.lastAgentTimestamps[args.chatJid] || '0';
const preflightRawMessages = getMessagesSinceSeq(
args.chatJid,
sinceSeqCursor,
args.assistantName,
);
const preflightMessages = filterLoopingPairedBotMessages(
args.chatJid,
getProcessableMessages(args.chatJid, preflightRawMessages, args.channel),
args.failureFinalText,
);
return preflightMessages.filter(
(message) => message.is_from_me !== true && !message.is_bot_message,
);
}
export function hasHumanMessageAfterWorkItem(
openWorkItem: WorkItem,
freshHumanMessages: NewMessage[],
): boolean {
if (freshHumanMessages.length === 0) {
return false;
}
const workItemSeq = openWorkItem.end_seq ?? openWorkItem.start_seq ?? null;
const workItemUpdatedAt = Date.parse(openWorkItem.updated_at);
return freshHumanMessages.some((message) => {
if (message.seq != null && workItemSeq != null) {
return message.seq > workItemSeq;
}
const messageTimestamp = Date.parse(message.timestamp);
if (
Number.isFinite(messageTimestamp) &&
Number.isFinite(workItemUpdatedAt)
) {
return messageTimestamp > workItemUpdatedAt;
}
return true;
});
}