From 5643fc6d2ef8a5ceae8aca181e7ec343de22975d Mon Sep 17 00:00:00 2001 From: Raja Sekhar Rao Dheekonda Date: Tue, 13 Jan 2026 21:26:21 -0800 Subject: [PATCH] fix Thread.fork() RecursionError caused by circular references in Message objects --- dreadnode/agent/thread.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dreadnode/agent/thread.py b/dreadnode/agent/thread.py index 35aaeecd..21b63825 100644 --- a/dreadnode/agent/thread.py +++ b/dreadnode/agent/thread.py @@ -1,5 +1,3 @@ -from copy import deepcopy - from pydantic import BaseModel, Field from rigging.generator import Usage from rigging.message import Message @@ -44,4 +42,12 @@ def last_usage(self) -> Usage | None: return None def fork(self) -> "Thread": - return Thread(messages=deepcopy(self.messages), events=deepcopy(self.events)) + # Create a new thread with the same messages but empty events + # Events are historical tracking and don't need to be forked + # We construct new Message objects to avoid shared references + forked_messages = [] + for msg in self.messages: + # Reconstruct message from its dict representation + msg_dict = msg.model_dump() + forked_messages.append(Message.model_validate(msg_dict)) + return Thread(messages=forked_messages, events=[])