UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

107 lines (106 loc) • 3.94 kB
import { l as normalizeOptionalString } from "./string-coerce-1VuiLaaR.mjs"; import { a as asOptionalRecord } from "./record-coerce-TIsquoVR.mjs"; import { r as jsonUtf8Bytes } from "./json-utf8-bytes-C0-PtdPX.mjs"; import "./chat-history-constants-BGgHv5E_.mjs"; import { a as projectChatDisplayMessage } from "./chat-display-projection.core-BOF-lEvI.mjs"; //#region src/gateway/server-methods/chat-history-reply-messages.ts /** Batch label projection includes quoted originals without recursively following their replies. */ async function projectChatHistoryWithReplies(messages, project) { const originals = []; const references = messages.map((message) => { const reply = asOptionalRecord(asOptionalRecord(message["__openclaw"])?.replyToMessage); const original = asOptionalRecord(reply?.message); return original ? { reply, index: originals.push(original) - 1 } : void 0; }); const projected = await project([...messages, ...originals]); const result = projected.slice(0, messages.length); for (const [index, message] of result.entries()) { const reference = references[index]; if (!reference) continue; const original = projected[messages.length + reference.index]; result[index] = { ...message, __openclaw: { ...asOptionalRecord(message["__openclaw"]), replyToMessage: jsonUtf8Bytes(original) > 8192 ? { ok: false, unavailableReason: "oversized" } : { ...reference.reply, message: original } } }; } return result; } function readChatHistoryReplyMessageId(message) { const record = asOptionalRecord(message); return normalizeOptionalString(asOptionalRecord(record?.["__openclaw"])?.replyToId) ?? (record?.role === "assistant" ? normalizeOptionalString(asOptionalRecord(record.openclawDelivery)?.replyToId) : void 0); } /** Page-local reads share the admitted transcript owner and never start client RPCs. */ async function attachChatHistoryReplyMessages(messages, params, options) { const replies = /* @__PURE__ */ new Map(); const result = []; for (const message of messages) { const record = asOptionalRecord(message); const metadata = asOptionalRecord(record?.["__openclaw"]); const messageId = readChatHistoryReplyMessageId(message); if (!record || !messageId || !params.sessionId) { result.push(message); continue; } let reply = replies.get(messageId); if (!reply && messageId.startsWith("pending:")) reply = { ok: false, unavailableReason: "not_found" }; if (!reply) { const original = await options.readers.readSessionMessageByIdAsync({ agentId: params.sessionAgentId, sessionId: params.sessionId, sessionKey: params.canonicalKey, storePath: params.storePath, sessionEntry: params.entry }, messageId, { allowResetArchiveFallback: true, historyVisibility: { sessionStartedAt: params.entry?.sessionStartedAt } }); const projected = original.message ? projectChatDisplayMessage(original.message, { maxChars: 500, subagentCoordination: options.readers.subagentCoordination, resolveCronJobName: options.resolveCronJobName, ...options.deferProfileDisplay ? {} : { resolveCurrentUserProfileDisplay: options.resolveCurrentUserProfileDisplay } }) : void 0; const preview = projected ? { ...projected } : void 0; if (preview) { delete preview.provider; delete preview.model; } reply = original.oversized || preview && jsonUtf8Bytes(preview) > 8192 ? { ok: false, unavailableReason: "oversized" } : preview ? { ok: true, message: preview } : { ok: false, unavailableReason: original.found ? "not_visible" : "not_found" }; replies.set(messageId, reply); } result.push({ ...record, __openclaw: { ...metadata, replyToMessage: reply } }); } return result; } //#endregion export { projectChatHistoryWithReplies as n, readChatHistoryReplyMessageId as r, attachChatHistoryReplyMessages as t };