MCPcopy Create free account
hub / github.com/Louisym/MiniCC / build_conversation_chain

Function build_conversation_chain

tutorials/12_session_persistence.py:438–473  ·  view source on GitHub ↗

从叶节点沿 parent_uuid 链回溯,重建对话。 对应 Reference: EP09 §3 let currentMsg = leafMessage while (currentMsg) { if (seen.has(currentMsg.uuid)) break // 环检测 seen.add(currentMsg.uuid) transcript.push(currentMsg) currentMsg = messages.get(c

(
    messages: dict[str, ConversationMessage],
    leaf_uuid: str,
)

Source from the content-addressed store, hash-verified

436# 3. 崩溃恢复:从叶节点沿链回溯,重建完整对话
437
438def build_conversation_chain(
439 messages: dict[str, ConversationMessage],
440 leaf_uuid: str,
441) -> list[ConversationMessage]:
442 """
443 从叶节点沿 parent_uuid 链回溯,重建对话。
444
445 对应 Reference: EP09 §3
446 let currentMsg = leafMessage
447 while (currentMsg) {
448 if (seen.has(currentMsg.uuid)) break // 环检测
449 seen.add(currentMsg.uuid)
450 transcript.push(currentMsg)
451 currentMsg = messages.get(currentMsg.parentUuid)
452 }
453 transcript.reverse()
454 """
455 chain = []
456 seen = set() # 环检测(防止损坏的链指针导致无限循环)
457 current_uuid = leaf_uuid
458
459 while current_uuid:
460 if current_uuid in seen:
461 print(f" [WARNING] 检测到循环引用 {current_uuid},停止遍历")
462 break
463 seen.add(current_uuid)
464
465 msg = messages.get(current_uuid)
466 if msg is None:
467 break
468
469 chain.append(msg)
470 current_uuid = msg.parent_uuid if msg.parent_uuid else ""
471
472 chain.reverse() # 从根到叶的顺序
473 return chain
474
475
476# ============================================================

Callers 1

mainFunction · 0.85

Calls 3

appendMethod · 0.80
addMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected