@@ -105,28 +105,6 @@ def wrap_fence(name):
105105 wrap_fence ("sourcecode" ),
106106]
107107
108- # Map of edit_format values to coder class names.
109- # Used by Coder.create() to find the right coder class by edit_format
110- # without importing all coder modules.
111- EDIT_FORMAT_MAP = {
112- "help" : "HelpCoder" ,
113- "ask" : "AskCoder" ,
114- "diff" : "EditBlockCoder" ,
115- "diff-fenced" : "EditBlockFencedCoder" ,
116- "whole" : "WholeFileCoder" ,
117- "patch" : "PatchCoder" ,
118- "udiff" : "UnifiedDiffCoder" ,
119- "udiff-simple" : "UnifiedDiffSimpleCoder" ,
120- "architect" : "ArchitectCoder" ,
121- "editor-diff" : "EditorEditBlockCoder" ,
122- "editor-whole" : "EditorWholeFileCoder" ,
123- "editor-diff-fenced" : "EditorDiffFencedCoder" ,
124- "context" : "ContextCoder" ,
125- "agent" : "AgentCoder" ,
126- "hashline" : "HashLineCoder" ,
127- "subagent" : "SubAgentCoder" ,
128- }
129-
130108
131109class UsageMeta (type ):
132110 """Metaclass that provides shared accumulator properties across all Coder subclasses.
@@ -336,6 +314,7 @@ async def create(
336314 uuid = from_coder .uuid ,
337315 parent_uuid = from_coder .parent_uuid ,
338316 repo = from_coder .repo ,
317+ summarizer = from_coder .summarizer ,
339318 )
340319 use_kwargs .update (update ) # override to complete the switch
341320 use_kwargs .update (kwargs ) # override passed kwargs
@@ -351,7 +330,7 @@ async def create(
351330 res = coders .CopyPasteCoder (main_model , io , args = args , ** kwargs )
352331
353332 if not res :
354- coder_name = EDIT_FORMAT_MAP .get (edit_format )
333+ coder_name = coders . EDIT_FORMAT_MAP .get (edit_format )
355334 if coder_name :
356335 coder_cls = getattr (coders , coder_name )
357336 res = coder_cls (main_model , io , args = args , ** kwargs )
@@ -373,10 +352,14 @@ async def create(
373352
374353 await res .initialize_mcp_tools ()
375354
376- res .original_kwargs = dict (kwargs )
355+ # Store only small/primitive kwargs to avoid retaining large object references.
356+ # Large objects (repo, mcp_manager, commands, summarizer, file_watcher, etc.)
357+ # are either overridden during clone() or accessible from instance attributes.
358+ _LARGE_KWARGS = {"repo" , "mcp_manager" , "commands" , "summarizer" , "file_watcher" }
359+ res .original_kwargs = {k : v for k , v in kwargs .items () if k not in _LARGE_KWARGS }
377360 return res
378361
379- valid_formats = list (EDIT_FORMAT_MAP .keys ())
362+ valid_formats = list (coders . EDIT_FORMAT_MAP .keys ())
380363 raise UnknownEditFormat (edit_format , valid_formats )
381364
382365 async def clone (self , ** kwargs ):
0 commit comments