openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
185 lines (184 loc) • 7.75 kB
JavaScript
import { a as asOptionalRecord } from "./record-coerce-TIsquoVR.mjs";
import { r as isIncognitoSessionKey } from "./session-key-DDIJxXfQ.mjs";
import { n as getCliSessionBinding } from "./cli-session-binding-Xt6nY3mk.mjs";
import { r as augmentChatHistoryWithCanvasBlocks } from "./chat-display-projection.canvas-Bq1n-BMM.mjs";
import { o as readSessionMessagesAsync, u as session_transcript_readers_exports } from "./session-transcript-readers-42zk6rbI.mjs";
import { p as resolveCurrentUserProfileDisplay } from "./session-identity-projection-BMPG3T3l.mjs";
import { r as dropPreSessionStartAnnouncePairs, u as projectForwardedMessages } from "./chat-display-projection.history-YCIu7ZzW.mjs";
import { n as createCurrentUserProfileMessageProjector, s as projectChatDisplayMessagesWithState } from "./chat-display-projection.core-XxfS96zH.mjs";
import { a as readTranscriptDisplayPosition } from "./transcript-image-artifacts-JZUt0-cM.mjs";
import { n as readChatHistoryMessageId } from "./session-history-tail-vcLIqMjD.mjs";
import { r as readChatHistoryPageKernel } from "./chat-history-page-kernel-CiAjZb6l.mjs";
import { t as createSessionHistorySubagentProjection } from "./session-history-subagent-projection-lsGJSo3b.mjs";
//#region src/gateway/server-methods/chat-history-pages.ts
function readCliIdentityProjectionKey(message) {
const id = readChatHistoryMessageId(message);
if (id) return `id:${id}`;
const record = asOptionalRecord(message);
const meta = asOptionalRecord(record?.["__openclaw"]);
const position = readTranscriptDisplayPosition(meta?.transcriptPosition);
if (!record || !position) return;
return JSON.stringify([
position,
record.role,
record.text,
record.content
]);
}
function projectCliIdentityOntoPagedMessages(params) {
const importedMetaByKey = /* @__PURE__ */ new Map();
for (const message of params.completeMessages) {
const key = readCliIdentityProjectionKey(message);
const meta = asOptionalRecord(asOptionalRecord(message)?.["__openclaw"]);
if (key && meta) importedMetaByKey.set(key, meta);
}
return params.pagedMessages.map((message) => {
const record = asOptionalRecord(message);
const key = readCliIdentityProjectionKey(message);
const importedMeta = key ? importedMetaByKey.get(key) : void 0;
if (!record || !importedMeta) return message;
const localMeta = asOptionalRecord(record["__openclaw"]);
return {
...record,
__openclaw: {
...localMeta,
importedFrom: importedMeta.importedFrom,
externalId: importedMeta.externalId,
cliSessionId: importedMeta.cliSessionId
}
};
});
}
async function readChatHistoryPage(params, signal) {
signal?.throwIfAborted();
if (!params.sessionId || !params.storePath || params.entry?.incognito || isIncognitoSessionKey(params.canonicalKey) || getCliSessionBinding(params.entry, "claude-cli")?.sessionId) {
const page = await readChatHistoryPageLocal(params);
return {
...page,
messages: refreshForwardedLabels(page.messages)
};
}
const { readSessionHistoryPageInWorker } = await import("./session-history-worker-runtime-BWjZTRJ-.mjs");
const page = await readSessionHistoryPageInWorker({
kind: "rpc",
params: {
...params,
sessionId: params.sessionId,
storePath: params.storePath,
entry: params.entry ? {
sessionId: params.entry.sessionId,
updatedAt: params.entry.updatedAt,
sessionStartedAt: params.entry.sessionStartedAt
} : void 0
}
}, signal);
if (page.encodedResponse) return page;
const project = createCurrentUserProfileMessageProjector(resolveCurrentUserProfileDisplay);
return {
...page,
messages: refreshForwardedLabels(page.messages).map((message) => {
const record = asOptionalRecord(message);
return record ? project(record) : message;
})
};
}
function refreshForwardedLabels(messages) {
return projectForwardedMessages(messages.filter((message) => asOptionalRecord(message) !== void 0));
}
async function readChatHistoryPageLocal(params) {
const { entry, provider, effectiveMaxChars, offset, messageId, sessionId, storePath } = params;
const cliSessionId = params.ignoreCliSessionImports ? void 0 : getCliSessionBinding(entry, "claude-cli")?.sessionId;
const subagentCoordination = sessionId && storePath && !entry?.incognito && !isIncognitoSessionKey(params.canonicalKey) ? createSessionHistorySubagentProjection({
agentId: params.sessionAgentId,
sessionId,
sessionKey: params.canonicalKey,
storePath,
sessionEntry: entry
}) : void 0;
const page = await readChatHistoryPageKernel(params, {
readers: {
...session_transcript_readers_exports,
subagentCoordination
},
resolveCurrentUserProfileDisplay,
...cliSessionId ? {
cliSessionId,
readCliTailPage: async ({ readScope, incrementalTail, activeLeafEntryId, buildTailPage }) => {
const { readChatHistoryCliSessionImportSnapshot, resolveChatHistoryWithCliSessionImports } = await import("./cli-session-history-CWLx3FPf.mjs");
const importedMessages = await readChatHistoryCliSessionImportSnapshot({
entry,
provider,
localMessages: incrementalTail.rawMessages
});
const cliHistory = resolveChatHistoryWithCliSessionImports({
entry,
provider,
localMessages: incrementalTail.rawMessages,
preparedImportedMessages: importedMessages
});
if ((offset !== void 0 || messageId) && !cliHistory.imported) return readChatHistoryPageLocal({
...params,
ignoreCliSessionImports: true
});
if (cliHistory.expanded || messageId) {
const completeLocalMessages = dropPreSessionStartAnnouncePairs(await readSessionMessagesAsync(readScope, {
mode: "full",
reason: "chat.history CLI import merge",
allowResetArchiveFallback: true
}), typeof entry?.sessionStartedAt === "number" ? entry.sessionStartedAt : void 0);
const completeCliHistory = resolveChatHistoryWithCliSessionImports({
entry,
provider,
localMessages: completeLocalMessages,
preparedImportedMessages: importedMessages
});
if (!completeCliHistory.imported) return readChatHistoryPageLocal({
...params,
ignoreCliSessionImports: true
});
const mergedMessages = dropPreSessionStartAnnouncePairs(completeCliHistory.messages, typeof entry?.sessionStartedAt === "number" ? entry.sessionStartedAt : void 0);
const { messages: displayMessages, activity } = projectChatDisplayMessagesWithState(mergedMessages, {
subagentCoordination,
includeCommentaryFallbacks: true,
maxChars: effectiveMaxChars,
resolveCurrentUserProfileDisplay
});
if (!completeCliHistory.expanded && !messageId) {
const localPage = await readChatHistoryPageLocal({
...params,
ignoreCliSessionImports: true
});
return {
...localPage,
messages: projectCliIdentityOntoPagedMessages({
pagedMessages: localPage.messages,
completeMessages: displayMessages
})
};
}
if (messageId && !displayMessages.some((message) => readChatHistoryMessageId(message) === messageId)) return { messages: [] };
return {
activeLeafEntryId,
messages: augmentChatHistoryWithCanvasBlocks(displayMessages),
activity,
completeCliImport: true,
pagination: {
offset: 0,
totalMessages: mergedMessages.length,
rawPageMessages: mergedMessages.length,
exhausted: true
}
};
}
return buildTailPage(cliHistory.imported ? projectCliIdentityOntoPagedMessages({
pagedMessages: incrementalTail.projected,
completeMessages: cliHistory.messages
}) : incrementalTail.projected);
}
} : {}
});
subagentCoordination?.assertCurrent?.();
return page;
}
//#endregion
export { readChatHistoryPage as t };