












@@ -57,7 +57,13 @@ function resolveComparableRole(message: unknown): string | undefined {
5757return readStringValue((message as { role?: unknown }).role);
5858}
595960-function resolveImportedExternalId(message: unknown): string | undefined {
60+type ImportedExternalIdentity = {
61+externalId: string;
62+importedFrom?: string;
63+cliSessionId?: string;
64+};
65+66+function resolveImportedExternalIdentity(message: unknown): ImportedExternalIdentity | undefined {
6167if (!message || typeof message !== "object") {
6268return undefined;
6369}
@@ -67,12 +73,31 @@ function resolveImportedExternalId(message: unknown): string | undefined {
6773typeof (message as { __openclaw?: unknown })["__openclaw"] === "object"
6874 ? ((message as { __openclaw?: Record<string, unknown> })["__openclaw"] ?? {})
6975 : undefined;
70-return normalizeOptionalString(meta?.externalId);
76+const externalId = normalizeOptionalString(meta?.externalId);
77+return externalId
78+ ? {
79+ externalId,
80+importedFrom: normalizeOptionalString(meta?.importedFrom),
81+cliSessionId: normalizeOptionalString(meta?.cliSessionId),
82+}
83+ : undefined;
84+}
85+86+function hasSameExternalIdentity(existing: unknown, imported: unknown): boolean {
87+const importedIdentity = resolveImportedExternalIdentity(imported);
88+const existingIdentity = resolveImportedExternalIdentity(existing);
89+if (!importedIdentity || !existingIdentity) {
90+return false;
91+}
92+return (
93+importedIdentity.externalId === existingIdentity.externalId &&
94+importedIdentity.importedFrom === existingIdentity.importedFrom &&
95+importedIdentity.cliSessionId === existingIdentity.cliSessionId
96+);
7197}
72987399function isEquivalentImportedMessage(existing: unknown, imported: unknown): boolean {
74-const importedExternalId = resolveImportedExternalId(imported);
75-if (importedExternalId && resolveImportedExternalId(existing) === importedExternalId) {
100+if (hasSameExternalIdentity(existing, imported)) {
76101return true;
77102}
78103@@ -106,12 +131,6 @@ function compareHistoryMessages(
106131if (aTimestamp !== undefined && bTimestamp !== undefined && aTimestamp !== bTimestamp) {
107132return aTimestamp - bTimestamp;
108133}
109-if (aTimestamp !== undefined && bTimestamp === undefined) {
110-return -1;
111-}
112-if (aTimestamp === undefined && bTimestamp !== undefined) {
113-return 1;
114-}
115134return a.order - b.order;
116135}
117136此內容由慣性聚合(RSS閱讀器)自動聚合整理,僅供閱讀參考。 原文來自 — 版權歸原作者所有。