Ë
    ãß²jŸ\  ã                  ó,  — U d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZ ddlmZmZ  ej"                  d«      Z eh d£«      Zed	d
œd8d„«       Zd9d„Zd:d;d„Zd:d<d„Zd=d„Z	 	 d>	 	 	 	 	 	 	 	 	 	 	 d?d„Z G d„ deej8                  «      Zej<                  ej<                  ej>                  ej@                  ejB                  dœZ"de#d<    eh d£«      Z$ddddddej<                  dejB                  dej@                  diZ%de#d <   d@d!„Z&d"Z'd#Z(d$Z)d%Z*d&Z+	 dAdd'd(d)d*œ	 	 	 	 	 	 	 	 	 	 	 	 	 dBd+„Z,dCd,„Z-i Z.d-e#d.<    ej^                  «       Z0dAdDd/„Z1dAdEd0„Z2dFd1„Z3dAdGd2„Z4dHd3„Z5 G d4„ d5«      Z6	 dIddddddd6œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dJd7„Z7y)Kz`Child progress relay, console formatting and child system-prompt construction for delegate_task.é    )ÚannotationsN)Úcontextmanager)ÚAnyÚDictÚListÚOptional)Ú_active_subagentsÚ_active_subagents_lockztools.delegate_tool>   ÚerrorÚfailedÚtimeoutF©Úexc_infoc             '  óÈ   K  — 	 d–— y# t         $ rM}| €Y d}~y| j                  d«      t        |«      kD  r||fz   }t        j                  | g|¢­d|iŽ Y d}~yd}~ww xY w­w)u´   Best-effort block: any Exception is swallowed (never reaches the run) and, when ``log_message`` is given,
    logged at debug â€” the exception fills a trailing unsatisfied ``%s``.Nú%r   )Ú	ExceptionÚcountÚlenÚloggerÚdebug)Úlog_messager   Úlog_argsÚexcs       úA/home/ubuntu/.hermes/hermes-agent/tools/delegate_tool_progress.pyÚ_quietr      sb   è ø€ ð@ÜøÜò @ØÐÜØ×Ñ˜SÓ!¤C¨£MÒ1Ø 3 &Ñ(ˆHÜ�‰�[Ð? 8Ò?°h×?ûð@üs4   ‚A"„	 ˆA"‰	A’A”A"™<AÁA"ÁAÁA"c                ód   — | r"t        d|«      5   | |g|¢­i |¤Ž ddd«       yy# 1 sw Y   yxY w)zEInvoke a child progress callback; relay failures never reach the run.zProgress callback %s failed: %sN)r   )ÚcbÚ
event_typeÚargsÚkwargss       r   Ú_safe_progressr!       sA   € á	ÜÐ5°zÓBñ 	,ÙˆzÐ+˜DÒ+ FÒ+÷	,ð 	,ð 
÷	,ð 	,ús   �&¦/c                ó2  — t        | xs d«      j                  «       j                  «       D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }}|sy|d   j                  d«      r|d   n|d   }t	        |«      |kD  r|d|dz
   dz   S |S c c}w )z«Reduce an error payload (traceback / JSON wall) to one clean line: the exception message (last line of a
    traceback) or the first non-empty line, hard-capped in length.Ú r   Ú	TracebackéÿÿÿÿNé   ú...)ÚstrÚstripÚ
splitlinesÚ
startswithr   )r   Ú	max_charsÚlnÚlinesÚlines        r   Ú_clean_error_textr0   &   s’   € ô #& e¢k¨rÓ"2×"8Ñ"8Ó":×"EÑ"EÓ"GÖV˜BÈ2Ï8É8Í:ˆR�X‰X�ZÐV€EÐVÙØØ˜a™×+Ñ+¨KÔ8ˆ5�Š9¸eÀA¹h€DÜ,/°«I¸	Ò,Aˆ4��)˜a‘-Ð  5Ñ(ÐKÀtÐKùò	 Ws   ®BÁBc                óD   — ddl m}  || dd¬«      }|xs t        ||«      S )z£Plain-language reason for a failed child: the classified ``failure_reason`` gloss when there is one,
    else the child's own error text reduced to one clean line.r   )Úfailure_cause_glossÚitÚits)ÚsubjectÚ
possessive)Úagent.turn_failure_copyr2   r0   )Úfailure_reasonr   r,   r2   Úglosss        r   Údescribe_subagent_failurer:   0   s(   € õ <á ¸ÈÔO€EØÒ7Ô% e¨YÓ7Ð7ó    c                ó‚   — t        | t        t        f«      r| dk  ry| dk\  rt        | dz  «      › d�S t        | «      › d�S )Nr   r#   éx   é<   z minÚs)Ú
isinstanceÚintÚfloatÚround)Úsecondss    r   Ú_format_durationrE   :   sH   € Ü�g¤¤U˜|Ô,°¸1²ØØ+2°cª>Œe�G˜b‘LÓ!Ð" $Ð'ÐSÄ%ÈÃ.ÐAQÐQRÐ?SÐSr;   c                ó>  — | xs dj                  «       j                  dd«      }t        |«      dkD  r|dd dz   }|rd|› d	�nd}t        |«      }|d
k(  r|rd|› �nd}d|› |› d�S d|› �}	|r|	d|› �z  }	t	        ||«      }
|
r|	d|
j                  d«      › �z  }	|	dz   S )uÈ  One clean, human-readable line describing a failed subagent, rendered directly to the user (CLI spinner
    echo, gateway platform notice). Says what happened and what to do next; never the raw exception when the
    child loop classified the failure, e.g.
    ``âš ï¸� Subagent failed â€” "research competitor pricing" after 12s: the model it was given was not found at the
    AI model service. Details: /agents, or ask me to retry with a smaller task.``r#   Ú
Ú r>   Né9   r'   u    â€” "ú"r   z after u   âš ï¸� Subagent timed outz¥ without finishing. I will carry on without it; ask me to retry it, or raise delegation.child_timeout_seconds in config.yaml if these tasks legitimately take longer.u   âš ï¸� Subagent failedz: ú.z;. Details: /agents, or ask me to retry with a smaller task.)r)   Úreplacer   rE   r:   Úrstrip)ÚgoalÚstatusr   Úduration_secondsr8   Ú
goal_labelÚ	goal_partÚelapsedÚafterr/   Úreasons              r   Úformat_subagent_failure_linerV   @   sè   € ð ’*˜"×#Ñ#Ó%×-Ñ-¨d°CÓ8€JÜ
ˆ:ƒ˜ÒØ  �_ uÑ,ˆ
Ù*4�&˜˜ AÑ&¸"€IÜÐ/Ó0€GØ�Òñ (/�'˜'˜Ñ#°Bˆà'¨	 {°5°'ð :ð ð	
ð
 $ I ;Ð/€DÙØ�'˜'˜Ð#Ñ#ˆÜ& ~°uÓ=€FÙØ�"�V—]‘] 3Ó'Ð(Ð)Ñ)ˆØÐOÑOÐOr;   c                  ó,   — e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
ÚDelegateEventu’  Formal delegation progress event types. The relay normalises incoming legacy strings (``tool.started``,
    ``_thinking``, â€¦) to these via ``_LEGACY_EVENT_MAP``; external consumers (gateway SSE, ACP adapter, CLI) still
    receive the legacy strings during the deprecation window. TASK_SPAWNED / TASK_COMPLETED / TASK_FAILED are
    reserved for future orchestrator lifecycle events, not emitted yet.zdelegate.task_spawnedzdelegate.task_progresszdelegate.task_completedzdelegate.task_failedzdelegate.task_thinkingzdelegate.tool_startedzdelegate.tool_completedN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚTASK_SPAWNEDÚTASK_PROGRESSÚTASK_COMPLETEDÚTASK_FAILEDÚTASK_THINKINGÚTASK_TOOL_STARTEDÚTASK_TOOL_COMPLETED© r;   r   rX   rX   `   s/   „ ñKð
 +€LØ,€MØ.€NØ(€KØ,€MØ/ÐØ3Ñr;   rX   )Ú	_thinkingzreasoning.availableztool.startedztool.completedÚsubagent_progresszDict[str, DelegateEvent]Ú_LEGACY_EVENT_MAP>   úsubagent.textúsubagent.startúsubagent.completeri   Ú	_on_startrj   Ú_on_completerh   Ú_on_textÚ_on_thinkingÚ_on_progresszDict[Any, Optional[str]]Ú_EVENT_HANDLERSc                óÆ   — t        | t        «      st        | t        «      r
| t        v r| S 	 t        j                  | «      xs t        | «      S # t        t        f$ r Y yw xY w)uw   Lifecycle string / DelegateEvent / legacy string / ``delegate.*`` string
    â†’ dispatch key; None for unknown events.N)r@   rX   r(   Ú_LIFECYCLE_EVENTSrg   ÚgetÚ
ValueErrorÚ	TypeError)r   s    r   Ú_normalize_eventrv   „   s]   € ô �*œmÔ,´¸JÌÔ1LÐQ[Ô_pÑQpØÐðÜ ×$Ñ$ ZÓ0ÒM´MÀ*Ó4MÐMøÜœ	Ð"ò Ùðús   ¬!A ÁA ÁA zŒ
The workspace's project context files are reproduced below. Their conventions and invariants are binding for your work in this workspace.

aÖ  
Complete this task using the tools available to you. When finished, provide a clear, concise summary of:
- What you did
- What you found or accomplished
- Any files you created or modified
- Any issues encountered

Important workspace rule: Never assume a repository lives at /workspace/... or any other container-style path unless the task/context explicitly gives that path. If no exact local path is provided, discover it first before issuing git/workdir-specific commands.

Keep your final summary tight: lead with outcomes, prefer bullet points over paragraphs, and don't replay your whole process. Your response is returned to the parent agent as a summary, and overlong summaries crowd out the parent's context window.uø  
## Subagent Spawning (Orchestrator Role)
You have access to the `delegate_task` tool and CAN spawn your own subagents to parallelize independent work.

WHEN to delegate:
- The goal decomposes into 2+ independent subtasks that can run in parallel (e.g. research A and B simultaneously).
- A subtask is reasoning-heavy and would flood your context with intermediate data.

WHEN NOT to delegate:
- Single-step mechanical work â€” do it directly.
- Trivial tasks you can execute in one or two tool calls.
- Re-delegating your entire assigned goal to one worker (that's just pass-through with no value added).

Coordinate your workers' results and synthesize them before reporting back to your parent. You are responsible for the final summary, not your workers.

z¸Your own children MUST be leaves (cannot delegate further) because they will reach the maximum nesting depth. The system manages this automatically; no parameter override is available.zÜYour own children can themselves delegate because depth remains. The system determines this automatically from the nesting depth; children at the maximum depth cannot delegate further. No parameter override is available.Úleafé   é   )Úworkspace_pathÚroleÚmax_spawn_depthÚchild_depthc               ó\  — dg}|r$|j                  «       r|j                  d|› �«       |r•t        |«      j                  «       r||j                  d|› d�«       d}t        dd¬«      5  d	d
lm}  |t        |«      d¬«      }ddd«       |j                  «       r&|j                  t        |j                  «       z   «       |j                  t        «       |dk(  r6|dz   |k\  rt        nt        }	|j                  t        d|› d|› d�z   |	z   «       dj                  |«      S # 1 sw Y   Œ xY w)a  Focused system prompt for a child agent. role='orchestrator' appends a delegation-capability block (modeled on
    OpenClaw's buildSubagentSystemPrompt); its depth note is literal truth grounded in the passed config so the LLM
    can't confabulate nesting.z@You are a focused subagent working on a specific delegated task.z

CONTEXT:
z
WORKSPACE PATH:
zg
Use this exact path for local repository/workdir operations unless the task explicitly says otherwise.r#   z-subagent: workspace context-files load failedTr   r   )Úbuild_context_files_prompt)ÚcwdÚ	skip_soulNÚorchestratorry   zNOTE: You are at depth z3. The delegation tree is capped at max_spawn_depth=z. rG   )r)   Úappendr(   r   Úagent.prompt_builderr   Ú_CONTEXT_FILES_INTROÚ_COMPLETION_INSTRUCTIONSÚ_LEAF_CHILDREN_NOTEÚ_NESTED_CHILDREN_NOTEÚ_ORCHESTRATOR_BLOCKÚjoin)
rN   Úcontextrz   r{   r|   r}   ÚpartsÚ
_ctx_filesr   Ú
child_notes
             r   Ú_build_child_system_promptr�   ²   s5  € ð PÐP€EÙ�7—=‘=”?Ø�‰�| G 9Ð-Ô.Ùœ#˜nÓ-×3Ñ3Ô5Ø�‰Ø!ØÐð uðuô	
ð ˆ
ÜÐCÈdÔSñ 	]åGÙ3¼¸NÓ8KÐW[Ô\ˆJ÷	]ð ×ÑÔØ�L‰LÔ-°
×0@Ñ0@Ó0BÑBÔCØ	‡L�LÔ)Ô*Øˆ~ÒØ,7¸!©O¸Ò,NÕ(ÔTiˆ
Ø�‰ÜØ'¨ }Ð4gÐhwÐgxÐxzÐ{ñ|àñô	
ð
 �9‰9�UÓÐ÷	]ð 	]ús   Á)D"Ä"D+c           	     ó   — ddl m}  |«       t        t        | dd«      dd«      t        | dd«      t        | dd«      g}t        d|«      D ]¦  }t	        d«      5  t
        j                  j                  t
        j                  j                  t        |«      «      «      }t
        j                  j                  |«      r,t
        j                  j                  |«      r|cddd«       c S ddd«       Œ¨ y# 1 sw Y   Œ³xY w)zŠBest-effort local workspace hint for child prompts: only a concrete
    absolute directory is ever injected (never a fake container path).r   )Úscope_terminal_cwdÚ_subdirectory_hintsNÚworking_dirÚterminal_cwdr€   )Úagent.runtime_cwdr‘   ÚgetattrÚfilterr   ÚosÚpathÚabspathÚ
expanduserr(   ÚisabsÚisdir)Úparent_agentr‘   Ú
candidatesÚ	candidateÚtexts        r   Ú_resolve_workspace_hintr¢   Û   sÎ   € õ 5áÓœg¤g¨lÐ<QÐSWÓ&XÐZgÐimÓnÜ�˜n¨dÓ3´W¸\È5ÐRVÓ5Wð€Jô ˜D *Ó-ò ˆ	Ü�D‹\ñ 	Ü—7‘7—?‘?¤2§7¡7×#5Ñ#5´c¸)³nÓ#EÓFˆDÜ�w‰w�}‰}˜TÔ"¤r§w¡w§}¡}°TÔ':Ø÷	÷ 	ô 	ðð
 ÷		ð 	ús   ÁBC4Ã4C=	zDict[str, Dict[str, int]]Ú_BATCH_ORDINALSc                ó  — t        | t        «      r| syt        t        |dd«      xs d«      }t        5  t        j                  |i «      }|j                  | t        |«      dz   «      }ddd«       d› �S # 1 sw Y   ŒxY w)uª  Short human tag for a delegation batch: the parent's first fan-out is ``set 1``, its next distinct
    delegation id ``set 2``. Several batches (a parent's fan-out plus a child's nested fan-out, or two
    concurrent tools) print interleaved ``[n/N]`` lines to one console; without a tag ``âœ“ [3/3]`` and ``âœ“ [3/9]``
    are indistinguishable, and a raw hex slice is unreadable. Ordinals are scoped per parent conversation
    (``parent_agent.session_id``): one process hosts many conversations and every child's own fan-out, so a
    process-wide counter showed a user's second wave as ``set 20``. Empty string when no id is known so callers
    can concatenate unconditionally.r#   Ú
session_idNry   zset )r@   r(   r–   Ú_BATCH_ORDINALS_LOCKr£   Ú
setdefaultr   )Údelegation_idrž   ÚscopeÚordinalsÚns        r   Úformat_batch_tagr¬   í   s‚   € ô �m¤SÔ)±ØÜ”˜ l°DÓ9Ò?¸RÓ@€EÜ	ñ BÜ"×-Ñ-¨e°RÓ8ˆØ×Ñ ¬s°8«}¸qÑ/@ÓAˆ÷Bð �!�ˆ:Ð÷Bð Bús   ´5A6Á6A?c                óv   — t        | |«      }|dkD  r|r|› d|dz   › d|› �n	|dz   › d|› �}d|› d�S |rd|› d�S dS )u|   ``[set 2 Â· 3/9] `` for batch children, ``[set 2] `` for a lone child,
    ``[3/9] `` / ``""`` when the batch id is unknown.ry   u    Â· ú/ú[z] r#   )r¬   )r¨   Ú
task_indexÚ
task_countrž   ÚtagÚinners         r   Ú_batch_prefixr´   ý   sm   € ô ˜=¨,Ó
7€CØ�A‚~Ù=@�3�%�t˜J¨™NÐ+¨1¨Z¨LÑ9ÈÐVWÉÐHXÐXYÐZdÐYeÐFfˆØ�5�'˜ˆ}ÐÙˆQˆsˆe�2ˆ;Ð% 2Ð%r;   c                óž   — t        | dd«      }t        |«      rt        d«      5   ||«       	 ddd«       yt        |«       y# 1 sw Y   ŒxY w)zØEmit a progress line through ``parent_agent._safe_print`` when available so headless stdio hosts (ACP, gateway
    API) can redirect it to stderr; a bare ``print()`` would land on stdout and corrupt JSON-RPC framing.Ú_safe_printN)r–   Úcallabler   Úprint)rž   r/   Úprinters      r   Ú_emit_parent_consolerº     sN   € ô �l M°4Ó8€GÜ�ÔÜ�D‹\ñ 	Ù�DŒMØ÷	ð 	ô 
ˆ$…K÷	ð 	ús   ¤
AÁAc                óž   — |r't        d«      5  |j                  |«       	 ddd«       yt        | |€
d|› �«       y|«       y# 1 sw Y   Œ"xY w)zœAbove-spinner line when a spinner exists (console fallback if it raises), else console
    (``console_line`` when given, else the line indented two spaces).Nz  )r   Úprint_aboverº   )rž   Úspinner_refr/   Úconsole_lines       r   Ú_print_completion_liner¿     sV   € ñ Ü�D‹\ñ 	Ø×#Ñ# DÔ)Ø÷	ð 	ô ˜°lÐ6J¨¨D¨6 {Õ]ÐP\Õ]÷	ð 	ús   ŽAÁAc                ó2   — t        | «      |kD  r| d | dz   S | S )Nr'   )r   )r¡   r«   s     r   Ú_shortrÁ     s"   € Ü!$ T£¨Q¢ˆD��!ˆH�uÑÐ8°DÐ8r;   c                  óŒ   — e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zddd„Zdd„Z	dd	„Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zddd„Zy)Ú_ChildProgressRelaya¨  Callable relaying one child's events to the parent display. CLI: prints tree-view lines above the parent's
    delegation spinner. Gateway: batches tool names (``_BATCH_SIZE``) and relays to the parent's progress callback,
    threading the identity kwargs (subagent_id, parent_id, depth, model, toolsets) into every event so the TUI can
    rebuild the live spawn tree and route per-branch controls back by ``subagent_id``.é   c                óþ   — |||xs dj                  «       c| _        | _        | _        |||�|ni c| _        | _        | _        ||||	|
f\  | _        | _        | _	        | _
        | _        g | _        d | _        d| _        y )Nr#   r   )r)   r°   r±   rQ   ÚspinnerÚ	parent_cbÚsession_refÚsubagent_idÚ	parent_idÚdepthÚmodelÚtoolsetsÚbatchÚparent_scopeÚ
tool_count)Úselfr°   rN   rÆ   rÇ   r±   rÉ   rÊ   rË   rÌ   rÍ   rÈ   s               r   Ú__init__z_ChildProgressRelay.__init__%  sŒ   € ð =GÈ
ÐUYÒU_Ð]_×TfÑTfÓThÐ9ˆŒ˜œ¨$¬/à9@À)Ð\gÐ\sÉ[Ðy{Ð6ˆŒ�d”n dÔ&6à˜ E¨5°(ðS
ÑOˆÔ˜$œ.¨$¬*°d´jÀ$Ä-ð !#ˆŒ
Ø!%ˆÔØˆ�r;   c                ó¬   — t        | j                  j                  d«      | j                  | j                  | j                  j                  d«      ¬«      S )Nr¨   Ú_parent_scope)rž   )r´   rÈ   rs   r°   r±   ©rÑ   s    r   Ú_prefixz_ChildProgressRelay._prefix3  sE   € ô Ø×Ñ× Ñ  Ó1°4·?±?ÀDÇOÁOØ×)Ñ)×-Ñ-¨oÓ>ô
ð 	
r;   c           
     ó®  — | j                   | j                  | j                  dœ}|j                  dD �ci c]  }t	        | |«      €Œ|t	        | |«      “Œ c}«       | j
                  �t        | j
                  «      |d<   dD ]<  \  }}| j                  j                  |«      sŒ"t        | j                  |   «      ||<   Œ> | j                  |d<   |S c c}w )N)r°   r±   rN   )rÉ   rÊ   rË   rÌ   rÍ   ))r¥   Úchild_session_id)r¨   r¨   rÐ   )r°   r±   rQ   Úupdater–   rÍ   ÚlistrÈ   rs   r(   rÐ   )rÑ   ÚkwÚkÚsrcÚdsts        r   Ú_identity_kwargsz$_ChildProgressRelay._identity_kwargs<  sÍ   € Ø,0¯O©OÈ4Ï?É?Ðdh×dsÑdsÑtˆØ
�	‰	Ð0^Ö¨1ÔbiÐjnÐpqÓbrÑb~�1”g˜d AÓ&Ñ&Òô  	AØ�=‰=Ð$Ü! $§-¡-Ó0ˆBˆz‰Nð aò 	5‰HˆC�Ø×Ñ×#Ñ# CÕ(Ü˜d×.Ñ.¨sÑ3Ó4��3’ð	5ð  Ÿ?™?ˆˆ<ÑØˆ	ùò @s   ´CÁCNc                ó®   — | j                   r=t        d«      5   | j                   ||||fi i | j                  «       ¥|¥¤Ž d d d «       y y # 1 sw Y   y xY w)NzParent callback failed: %s)rÇ   r   rß   )rÑ   r   Ú	tool_nameÚpreviewr   r    s         r   Ú_relayz_ChildProgressRelay._relayI  sd   € Ø�>Š>äÐ4Ó5ñ nØ�—‘˜z¨9°g¸tÑmÐGlÈ$×J_ÑJ_ÓJaÐGlÐekÐGlÒm÷nð nð ÷nð nús   ˜)AÁAc                ó¼   — | j                   rDt        d«      5  | j                   j                  d| j                  «       › d|› �«       ddd«       yy# 1 sw Y   yxY w)zIPrint one tree-view line above the CLI spinner (no-op without a spinner).zSpinner print_above failed: %srH   u   â”œâ”€ N)rÆ   r   r¼   rÖ   )rÑ   r¡   s     r   Ú
_tree_linez_ChildProgressRelay._tree_lineO  s\   € à�<Š<ÜÐ8Ó9ñ LØ—‘×(Ñ(¨1¨T¯\©\«^Ð,<¸GÀDÀ6Ð)JÔK÷Lð Lð ÷Lð Lús   ˜0AÁAc                óê   — | j                   rg| j                  rZ| j                  dd| j                  «       › dj	                  | j                  «      › �¬«       | j                  j                  «        yyy)z2Flush remaining batched tool names to the gateway.zsubagent.progressõ   ðŸ”€ z, ©râ   N)rÇ   rÎ   rã   rÖ   rŠ   ÚclearrÕ   s    r   Ú_flushz_ChildProgressRelay._flushU  sZ   € à�>Š>˜dŸjšjØ�K‰KÐ+°u¸T¿\¹\»^Ð<LÈTÏYÉYÐW[×WaÑWaÓMbÐLcÐ5dˆKÔeØ�J‰J×ÑÕð )ˆ>r;   c                ó¸   — | j                   r(| j                  dt        | j                   d«      › �«        | j                  dd|xs | j                   xs di|¤Ž y )Nrç   é7   râ   r#   )ri   )rQ   rå   rÁ   rã   ©rÑ   rá   râ   r   r    s        r   rk   z_ChildProgressRelay._on_start\  sM   € Ø�?Š?Ø�O‰O˜e¤F¨4¯?©?¸BÓ$?Ð#@ÐAÔBØˆ�‰ÑY¨gÒ.N¸¿¹Ò.NÈBÐYÐRXÓYr;   c                óæ   ‡ ‡‡— ‰j                  d«      t        v rCddlm} ‰ j                  } |ˆˆˆ fd„t        |dt        |dd«      «      t        |dd «      ¬	«        ‰ j                  dd
‰i‰¤Ž y )NrO   r   )Úrender_notificationc                 óÖ   •— ‰j                  t        ‰j                  ‰ j                  d«      ‰ j                  d«      xs ‰‰ j                  d«      ‰ j                  d«      ¬«      «      S )NrO   ÚsummaryrP   r8   )r   rP   r8   )rå   rV   rQ   rs   )r    râ   rÑ   s   €€€r   ú<lambda>z2_ChildProgressRelay._on_complete.<locals>.<lambda>k  sW   ø€ ˜Ÿ™Ô(DØ—O‘O V§Z¡Z°Ó%9ÀÇÁÈIÓAVÒAaÐZaØ%+§Z¡ZÐ0BÓ%CÐTZ×T^ÑT^Ð_oÓTpô)ó € r;   Ú_notification_platformÚplatformÚcliÚ_notification_config)rô   Úuser_configrâ   )rj   )rs   ÚSUBAGENT_FAILURE_STATUSESÚgateway.warning_notificationsrï   rÏ   r–   rã   )rÑ   rá   râ   r   r    rï   Úparents   ` ` `  r   rl   z _ChildProgressRelay._on_completea  sq   ú€ ð �:‰:�hÓÔ#<Ñ<ÝIØ×&Ñ&ˆFÙõô ! Ð)AÄ7È6ÐS]Ð_dÓCeÓfÜ# FÐ,BÀDÓIõð 	ˆ�‰ÑC°ÐC¸FÓCr;   c                ó*   — | j                  d|¬«       y )Nrh   rè   )rã   rí   s        r   rm   z_ChildProgressRelay._on_textt  s   € ð 	�‰�O¨WˆÕ5r;   c                ó|   — |xs |xs d}| j                  dt        |d«      › d�«       | j                  d|¬«       y )Nr#   u   ðŸ’­ "rì   rJ   zsubagent.thinkingrè   )rå   rÁ   rã   )rÑ   rá   râ   r   r    r¡   s         r   rn   z _ChildProgressRelay._on_thinkingz  s?   € ØÒ)˜)Ò) rˆØ�‰˜&¤¨¨bÓ!1Ð 2°!Ð4Ô5Ø�‰Ð'°ˆÕ6r;   c                óæ   — |xs |xs d}|r| j                  d|› �«       | j                  r9t        d«      5  | j                  d| j                  «       › |› �«       d d d «       y y # 1 sw Y   y xY w)Nr#   rç   z Parent callback relay failed: %srf   )rå   rÇ   r   rÖ   )rÑ   rá   râ   r   r    Úsummary_texts         r   ro   z _ChildProgressRelay._on_progress  s|   € ð !Ò1 GÒ1¨rˆÙØ�O‰O˜e L >Ð2Ô3Ø�>Š>ÜÐ:Ó;ñ WØ—‘Ð2°t·|±|³~Ð6FÀ|ÀnÐ4UÔV÷Wð Wð ÷Wð Wús   ¸%A'Á'A0c                óp  — | xj                   dz  c_         | j                  �Ht        5  t        j                  | j                  «      }|�| j                   |d<   |xs d|d<   d d d «       | j
                  rBddlm}  ||xs d«      › d|› �}|rt        |d«      nd}| j                  |r|› d	|› d
�n|«       | j                  rg| j                  d|||«       | j                  j                  |xs d«       t        | j                  «      | j                  k\  r| j!                  «        y y y # 1 sw Y   ŒËxY w)Nry   rÐ   r#   Ú	last_toolr   )Úget_tool_emojirH   é#   z  "rJ   zsubagent.tool)rÐ   rÉ   r
   r	   rs   rÆ   Úagent.displayr  rÁ   rå   rÇ   rã   rÎ   rƒ   r   Ú_BATCH_SIZErê   )	rÑ   rá   râ   r   r    Úrecr  r/   Úshorts	            r   Ú_on_tool_startedz$_ChildProgressRelay._on_tool_started‰  s  € Ø�Š˜1Ñ�Ø×ÑÐ'Ü'ñ 7Ü'×+Ñ+¨D×,<Ñ,<Ó=�Ø�?Ø(,¯©�C˜Ñ%Ø'0¢°B�C˜Ñ$÷	7ð
 �<Š<Ý4Ù$ Y¢_°"Ó5Ð6°a¸	°{ÐCˆDÙ+2”F˜7 BÔ'¸ˆEØ�O‰O±E˜t˜f C¨ w¨aÑ0¸tÔDØ�>Š>Ø�K‰K˜¨°G¸TÔBØ�J‰J×Ñ˜išo¨2Ô.Ü�4—:‘:‹ $×"2Ñ"2Ò2Ø—‘•ð 3ð ÷7ð 7ús   ¨:D,Ä,D5c                ó~   — t        |«      }|€d nt        j                  |d«      }|� t        | |«      ||||«       y y )Nr  )rv   rp   rs   r–   )rÑ   r   rá   râ   r   r    ÚkeyÚmethods           r   Ú__call__z_ChildProgressRelay.__call__œ  sG   € Ü˜zÓ*ˆØ˜‘¬/×*=Ñ*=¸cÐCUÓ*VˆØÐØ!ŒG�D˜&Ó! )¨W°d¸FÕCð r;   )r°   rA   rN   r(   rÆ   r   rÇ   r   r±   rA   ÚreturnÚNone)r  r(   )r  zDict[str, Any]©NNN)r   r(   rá   r(   râ   r(   )r¡   r(   r  r  )r  r  )rá   r(   râ   r(   )rY   rZ   r[   r\   r  rÒ   rÖ   rß   rã   rå   rê   rk   rl   rm   rn   ro   r  r  rd   r;   r   rÃ   rÃ     sˆ   „ ñZð
 €KðØðØ%(ðØ36ðØCFðØTWðð 
óó
óônóLóòZò
Dò&6ò7ò
Wòõ&Dr;   rÃ   )rÉ   rÊ   rË   rÌ   rÍ   rÈ   c               óŠ   — t        |dd«      }
t        |dd«      }|
s|sy|	�||	d<   t        | ||
||||||||	«      }||_        |S )uÖ   Relay for one child's events (see ``_ChildProgressRelay``), or None when the parent has neither a spinner nor a
    progress callback â€” the child then runs with no progress callback at all (zero behavior change).Ú_delegate_spinnerNÚtool_progress_callbackrÔ   )r–   rÃ   rÏ   )r°   rN   rž   r±   rÉ   rÊ   rË   rÌ   rÍ   rÈ   rÆ   rÇ   Úrelays                r   Ú_build_child_progress_callbackr  ¢  sn   € ô �lÐ$7¸Ó>€GÜ˜Ð&>ÀÓE€IÙ™9ØØÐà'3ˆ�OÑ$ÜØ�D˜' 9¨j¸+ÀyÐRWÐY^Ð`hÐjuó€Eð &€EÔØ€Lr;   )r   úOptional[str]r   r   r   Úbool)
r   r   r   r   r   r   r    r   r  r  )éÈ   )r   r   r,   rA   r  r(   )r8   r   r   r   r,   rA   r  r(   )rD   r   r  r(   r  )rN   r  rO   r  r   r   rP   r   r8   r   r  r(   )r   r   r  r   )N)rN   r(   r‹   r  rz   r  r{   r(   r|   rA   r}   rA   r  r(   )r  r  )r¨   r  rž   r   r  r(   )
r¨   r  r°   rA   r±   rA   rž   r   r  r(   )r/   r(   r  r  )
rž   r   r½   r   r/   r(   r¾   r  r  r  )r¡   r(   r«   rA   r  r(   )ry   )r°   rA   rN   r(   r±   rA   rÉ   r  rÊ   r  rË   zOptional[int]rÌ   r  rÍ   zOptional[List[str]]rÈ   zOptional[Dict[str, Any]]r  zOptional[callable])8r\   Ú
__future__r   ÚloggingÚenumr˜   Ú	threadingÚ
contextlibr   Útypingr   r   r   r   Útools.delegate_tool_registryr	   r
   Ú	getLoggerr   Ú	frozensetrø   r   r!   r0   r:   rE   rV   r(   ÚEnumrX   ra   rb   rc   r^   rg   Ú__annotations__rr   rp   rv   r…   r†   r‰   r‡   rˆ   r�   r¢   r£   ÚLockr¦   r¬   r´   rº   r¿   rÁ   rÃ   r  rd   r;   r   ú<module>r#     s©  ðÚ få "ã Û Û 	Û Ý %ß ,Ó ,ß Rà	ˆ×	Ñ	Ð0Ó	1€ñ &Ò&DÓEÐ àØHMô 
@ó ð
@ó,ôLô8óTð \`ØðPØ
ðPØ!.ðPØ7:ðPØUXðPàðPð 	óPô@4�C˜Ÿ™ô 4ð  ×,Ñ,Ø(×6Ñ6Ø!×3Ñ3Ø#×7Ñ7Ø&×4Ñ4ñ/Ð Ð+ó ñ ÒVÓWÐ à�kØ˜Ø�ZØ×Ñ Ø×Ñ Ø×%Ñ% tð-€Ð)ó óð'ð ð
ð ð
3ð ðQð ð
yð ð )-ð'ØQUÐciØ°ñ'Ø
ð'Ø%ð'ØANð'Ø]`ð'àð'à+.ð'ð 	ó'óRð .0€Ð*Ó /Ø%�y—~‘~Ó'Ð ôô &óô^ó9÷CDñ CDðL ABðØcgØ#¸DÐY]Ø$(ÐRVñØðØðØ:=ðØS`ðàðà,9ðàIVðð "ðð 8Pðð ô	r;   