

















@@ -886,6 +886,72 @@ describe("readSessionMessages", () => {
886886}
887887});
888888889+test("keeps async active branch rows when imported parent links are incomplete", async () => {
890+const sessionId = "test-session-tree-async-incomplete-parent";
891+writeTranscript(tmpDir, sessionId, [
892+{ type: "session", version: 3, id: sessionId },
893+{
894+type: "message",
895+id: "legacy-user",
896+message: { role: "user", content: "legacy prompt" },
897+},
898+{
899+type: "message",
900+id: "tree-assistant",
901+parentId: "legacy-user",
902+message: { role: "assistant", content: "tree reply" },
903+},
904+{
905+type: "message",
906+id: "orphan-tail",
907+parentId: "missing-imported-parent",
908+message: { role: "assistant", content: "reachable orphan tail" },
909+},
910+]);
911+clearSessionTranscriptIndexCache();
912+913+const messages = await readSessionMessagesAsync(sessionId, storePath, undefined, {
914+mode: "full",
915+reason: "test imported partial tree selection",
916+});
917+918+expect(messages.map((message) => (message as { content?: unknown }).content)).toEqual([
919+"reachable orphan tail",
920+]);
921+expectMessageFields(messages[0], { openclaw: { id: "orphan-tail", seq: 1 } });
922+});
923+924+test("keeps legacy async parents when tree transcripts reference pre-v3 rows", async () => {
925+const sessionId = "test-session-tree-async-legacy-parent";
926+writeTranscript(tmpDir, sessionId, [
927+{ type: "session", version: 1, id: sessionId },
928+{
929+type: "message",
930+id: "legacy-user",
931+message: { role: "user", content: "legacy hello" },
932+},
933+{
934+type: "message",
935+id: "tree-assistant",
936+parentId: "legacy-user",
937+message: { role: "assistant", content: "tree hello" },
938+},
939+]);
940+clearSessionTranscriptIndexCache();
941+942+const messages = await readSessionMessagesAsync(sessionId, storePath, undefined, {
943+mode: "full",
944+reason: "test legacy parent active tree selection",
945+});
946+947+expect(messages.map((message) => (message as { content?: unknown }).content)).toEqual([
948+"legacy hello",
949+"tree hello",
950+]);
951+expectMessageFields(messages[0], { openclaw: { id: "legacy-user", seq: 1 } });
952+expectMessageFields(messages[1], { openclaw: { id: "tree-assistant", seq: 2 } });
953+});
954+889955test("caches async transcript indexes by file stats", async () => {
890956const sessionId = "test-session-index-cache";
891957writeTranscript(tmpDir, sessionId, [
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。