§
    øžyj½ï ã            !       ón  — U d Z ddlZddlZddlZddlZddlZ ej        e¦  «        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 ddlmZ ddlmZ dZdd	lmZ dd
lmZ  ddl!m"Z"m#Z#  e$g d¢¦  «        Z%de&de&de&fd„Z'de&de&de&fd„Z(d„ Z)dZ*da+dZ,dZ- e
j.        ¦   «         Z/da0e1e2d<    e
j.        ¦   «         Z3i Z4ee&ee&ef         f         e2d<   de1de1fd„Z5de1fd„Z6dee&ef         ddfd„Z7ddœde&deddfd „Z8de&dedee&         fd!„Z9de&de1fd"„Z:dddd#œde&d$e&d%ee&         d&ed'ede1fd(„Z;d%ee&         de<eef         fd)„Z=deee&ef                  fd*„Z>d+d,d-œd.ee&ef         d/e?d0e?deee&ef                  fd1„Z@d2ede&fd3„ZA e$h d4£¦  «        ZB e$h d5£¦  «        ZCd6e&d7edefd8„ZDd9edee&ef         fd:„ZEd;edee&ef         fd<„ZFd=edeee&ef                  fd>„ZGd2ede1fd?„ZHd@ee&         de&fdA„ZIde?fdB„ZJdaKde?fdC„ZLdeeM         fdD„ZNde?fdE„ZOde1fdF„ZPde1fdG„ZQdHe&de1fdI„ZRdJeSdeSfdK„ZTdLee&         dJeSe&         dee&         fdM„ZUdNZVdOZWdPZXdQZYdZZeeM         e2dR<   dSZ[dTZ\dUZ]g dV¢Z^ G dW„ dXe&ej_        ¦  «        Z`e`ja        e`ja        e`jb        e`jc        e`jd        dYœZeee&e`f         e2dZ<   de1fd[„Zf	 dÈdd\d]dd^œd_e&d`ee&         daee&         dbe&dce?dde?de&fde„Zgdee&         fdf„Zhdgee&         dee&         fdh„Zidbe&dee&         fdi„Zjdje&ddfdk„Zk	 dÉdddddddlœdme?d_e&dne?dee&         doee&         dpee?         dqee&         dgeee&                  dreee&ef                  deel         fds„Zmd7ede&fdt„Znduee&         dee&         fdv„Zo	 	 	 	 	 	 	 	 	 dÊdme?d_e&d`ee&         dgeee&                  dqee&         dwe?dne?dxee&         dyee&         dzee&         d{ee&         d|eee&ef                  d}ee?         d~ee&         deee&                  dbe&f d€„Zpd�edme?d‚eMdƒeMd„ee
jq                 d_e&dee&         fd…„Zrdme?d;e&dee&         fd†„Zsd;e&d‡e?dme?de<e&ee&         f         fdˆ„Ztd‰e?dee?         fdŠ„Zud‹eee&ef                  ddfdŒ„Zv	 	 dËdddd#œdme?d_e&d%ee&         d&ed'edee&ef         fd�„Zw e
j.        ¦   «         Zx e
jy        ¦   «         Zz e
jy        ¦   «         Z{dŽ„ Z|de
jy        fd�„Z}d‹eee&ef                  d�eee&ef                  d‘ee<e?ee&ef         ef                  ddfd’„Z~	 	 dËdme?d_e&dee&ef         fd“„Zd”ede<eeee&ef                           ee&         f         fd•„Z€ ej�        d–ej‚        ¦  «        Zƒ ej�        d—¦  «        Z„d˜Z…d�eee&ef                  dee&         fd™„Z†	 	 	 	 	 	 	 	 dÌd_ee&         d`ee&         d”eeee&ef                           dwee?         dbee&         dšee1         d›eee&ef                  de&fdœ„Z‡	 dÈd�ee&         džee&         fdŸ„Zˆd e‰de‰fd¡„ZŠde‰fd¢„Z‹de&fd£„ZŒde&fd¤„Z�de&fd¥„ZŽde‰fd¦„Z�d§d¨d©dªd«d¬œdªd­d¬œd®d©dªd¯d¬œdªd°d¬œdªd\d±gd²d³œd©d´d¬œdµœd_gd¶œd·d¸œdªd\d±gd·d³œd©d¹d¬œdºd»d¬œd¼œg d¶œd½œZ�dd¾l‘m’Z’m“Z“ dÈd¿e‰de1fdÀ„Z”dÁdÂhZ•d”edefdÃ„Z– e’j—        d§dÄe�dÅ„ efdÆe�¬Ç¦  «         dS )ÍaË  
Delegate Tool -- Subagent Architecture

Spawns child AIAgent instances with isolated context, inherited toolsets,
and their own terminal sessions. Supports single-task and batch (parallel)
modes. Top-level model calls run in the background; orchestrator children
wait for their own workers so they can synthesize the results.

Each child gets:
  - A fresh conversation (no parent history)
  - Its own task_id (own terminal session, file ops cache)
  - The parent's toolsets, with child-only blocked tools stripped
  - A focused system prompt built from the delegated goal + context

The parent's context only sees the delegation call and the summary result,
never the child's intermediate tool calls or reasoning.
é    N)ÚTimeoutError)ÚAnyÚDictÚListÚOptional)ÚurlsplitÚ
urlunsplit)ÚTOOLSETS)Úrequest_hard_interruptÚcustom)Ú
file_state)Úset_approval_callback)Úbase_url_hostnameÚis_truthy_value)Údelegate_taskÚclarifyÚmemoryÚsend_messageÚcronjobÚcommandÚdescriptionÚreturnc                 ó>   — t                                d| |¦  «         dS )zÐAuto-deny dangerous commands in subagent threads (safe default).

    Returns 'deny' so the subagent sees a refusal it can recover from, and
    never calls input() (which would deadlock the parent TUI).
    zeSubagent auto-denied dangerous command: %s (%s). Set delegation.subagent_auto_approve: true to allow.Údeny©ÚloggerÚwarning©r   r   Úkwargss      ú9/home/ragecks/.hermes/hermes-agent/tools/delegate_tool.pyÚ_subagent_auto_denyr!   M   s+   € õ ‡N‚Nð	?à�ñô ð ð
 ˆ6ó    c                 ó>   — t                                d| |¦  «         dS )zÓAuto-approve dangerous commands in subagent threads (opt-in YOLO).

    Only installed when delegation.subagent_auto_approve=true. Returns 'once'
    so the subagent proceeds without blocking the parent UI.
    z1Subagent auto-approved dangerous command: %s (%s)Úoncer   r   s      r    Ú_subagent_auto_approver%   [   s)   € õ ‡N‚NØ;Ø�ñô ð ð ˆ6r"   c                  ó„   — t          ¦   «         } |                      dd¦  «        }t          |¦  «        rt          S t          S )a  Return the callback to install into subagent worker threads.

    Config key: delegation.subagent_auto_approve (bool, default False).
    Reads via the same _load_config() path as the rest of delegate_task so
    priority is config.yaml > (no env override for this knob) > default.
    Úsubagent_auto_approveF)Ú_load_configÚgetr   r%   r!   ©ÚcfgÚvals     r    Ú_get_subagent_approval_callbackr-   h   s=   € õ ‰.Œ.€CØ
�'Š'Ð)¨5Ñ
1Ô
1€CÝ�sÑÔð &Ý%Ð%ÝÐr"   é   Fé   Ú_spawn_pausedÚ_active_subagentsÚpausedc                 óp   — t           5  t          | ¦  «        at          cddd¦  «         S # 1 swxY w Y   dS )zÎGlobally block/unblock new delegate_task spawns.

    Active children keep running; only NEW calls to delegate_task fail fast
    with a "spawning paused" error until unblocked.  Returns the new state.
    N)Ú_spawn_pause_lockÚboolr0   )r2   s    r    Úset_spawn_pausedr6   ›   s|   € õ 
ð ð Ý˜V™œˆÝðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ˆ+«/²/c                  óR   — t           5  t          cd d d ¦  «         S # 1 swxY w Y   d S ©N)r4   r0   © r"   r    Úis_spawn_pausedr:   §   so   € Ý	ð ð Ýðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ˆœ £ Úrecordc                 ó¸   — |                       d¦  «        }|sd S |                      dd¦  «         t          5  | t          |<   d d d ¦  «         d S # 1 swxY w Y   d S )NÚsubagent_idÚaccepting_steerT)r)   Ú
setdefaultÚ_active_subagents_lockr1   )r;   Úsids     r    Ú_register_subagentrB   ¬   s¬   € Ø
�*Š*�]Ñ
#Ô
#€CØð ØˆØ
×ÒÐ'¨Ñ.Ô.Ð.Ý	ð (ð (Ø!'Õ˜#Ñð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (s   ·AÁAÁA©Úagentr=   rD   c                óæ   — t           5  t                               | ¦  «        }|�4|�|                     d¦  «        |u rt                               | d ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrD   )r@   r1   r)   Úpop)r=   rD   r;   s      r    Ú_unregister_subagentrG   µ   sµ   € Ý	ð 5ð 5Ý"×&Ò& {Ñ3Ô3ˆØÐ 5 =°F·J²J¸wÑ4GÔ4GÈ5Ð4PÐ4PÝ×!Ò! +¨tÑ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5s   ˆAA&Á&A*Á-A*c                 ó  — t           5  t                               | ¦  «        }|�|                     d¦  «        |ur	 ddd¦  «         dS d|d<   t          |dd¦  «        }t	          |¦  «        s	 ddd¦  «         dS 	  |¦   «         }n?# t
          $ r2}t                               d| |¦  «         Y d}~ddd¦  «         dS d}~ww xY wt          |t          ¦  «        r| 
                    ¦   «         r|ndcddd¦  «         S # 1 swxY w Y   dS )a  Atomically close steer acceptance and drain its final durable artifact.

    ``steer_subagent`` holds the same registry lock through ``agent.steer``.
    Therefore either acceptance wins and this drain sees its exact text, or
    closure wins and the caller is rejected. Exact agent identity prevents a
    finishing child with a recycled public id from closing its replacement.
    NrD   Fr>   Ú_drain_pending_steerz#final steer drain for %s failed: %s)r@   r1   r)   ÚgetattrÚcallableÚ	Exceptionr   ÚdebugÚ
isinstanceÚstrÚstrip)r=   rD   r;   ÚdrainÚpendingÚexcs         r    Ú_close_subagent_steeringrT   ¼   sé  € õ 
 ð Qð QÝ"×&Ò& {Ñ3Ô3ˆØˆ>˜VŸZšZ¨Ñ0Ô0¸Ð=Ð=ØðQð Qð Qñ Qô Qð Qð Qð Qð %*ˆÐ Ñ!Ý˜Ð5°tÑ<Ô<ˆÝ˜‰Œð 	ØðQð Qð Qñ Qô Qð Qð Qð Qð	Ø�e‘g”gˆGˆGøÝð 	ð 	ð 	Ý�LŠLÐ>ÀÈSÑQÔQÐQØ�4�4�4ðQð Qð Qñ Qô Qð Qð Qð Qøøøøð	øøøõ % W­cÑ2Ô2ÐP°w·}²}±´ÐPˆwˆwÈDðQð Qð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð Qð QsA   ˆ5DÁ
&DÁ>
B	ÂDÂ	
CÂC Â/DÃ CÃ/DÄDÄDc                 óJ  — t           5  t                               | ¦  «        }ddd¦  «         n# 1 swxY w Y   |sdS |                     d¦  «        }|€dS 	 t          |d| › d�¦  «        sdS n4# t          $ r'}t
                               d| |¦  «         Y d}~dS d}~ww xY wdS )aC  Request that a single running subagent stop at its next iteration boundary.

    Does not hard-kill the worker thread (Python can't); sets the child's
    interrupt flag which propagates to in-flight tools and recurses into
    grandchildren via AIAgent.interrupt().  Returns True if a matching
    subagent was found.
    NFrD   zInterrupted via TUI (ú)z!interrupt_subagent(%s) failed: %sT)r@   r1   r)   r   rL   r   rM   )r=   r;   rD   rS   s       r    Úinterrupt_subagentrW   Ô   s  € õ 
 ð 4ð 4Ý"×&Ò& {Ñ3Ô3ˆð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4àð ØˆuØ�JŠJ�wÑÔ€EØ€}ØˆuðÝ% eÐ-SÀ[Ð-SÐ-SÐ-SÑTÔTð 	Ø�5ð	øåð ð ð Ý�ŠÐ8¸+ÀsÑKÔKÐKØˆuˆuˆuˆuˆuøøøøðøøøð ˆ4s$   ˆ/¯3¶3ÁA/ Á/
B Á9BÂB ©Úowner_session_idÚowner_transportÚowner_session_recordÚtextrY   rZ   r[   c                ó¸  — |r|                      ¦   «         sdS t          5  t                               | ¦  «        }|r|                     dd¦  «        s	 ddd¦  «         dS |�Y|                     d¦  «        |k    s2|�0|                     d¦  «        |us|�|                     d¦  «        |ur	 ddd¦  «         dS |                     d¦  «        }|€	 ddd¦  «         dS 	 t	          |                     |¦  «        ¦  «        cddd¦  «         S # t          $ r2}t                               d| |¦  «         Y d}~ddd¦  «         dS d}~ww xY w# 1 swxY w Y   dS )	u…  Queue steering text into a single running subagent without stopping it.

    The redirection-side mirror of interrupt_subagent(): resolves the live
    child in the registry and calls AIAgent.steer(), which appends the text
    to the child's last tool result at its next iteration boundary â€” the
    current tool call is never cut. Returns True if a matching subagent
    QUEUED the text while the child was still accepting work; False for an
    unknown/closed id, an ownership mismatch, a record with no live agent, or
    empty text. ``owner_session_id=None`` deliberately preserves the internal
    in-process helper contract; gateway callers must pass exact authority.

    Acceptance and completion are linearized by the registry lock. If
    acceptance wins but no delivery boundary remains, ``_run_single_child``
    drains the exact text into the completion entry as ``missed_steer``.
    Fr>   NrY   rZ   r[   rD   zsteer_subagent(%s) failed: %s)	rP   r@   r1   r)   r5   ÚsteerrL   r   rM   )r=   r\   rY   rZ   r[   r;   rD   rS   s           r    Ústeer_subagentr_   ì   s7  € ð. ð �t—z’z‘|”|ð ØˆuÝ	ð ð Ý"×&Ò& {Ñ3Ô3ˆØð 	˜VŸZšZÐ(9¸5ÑAÔAð 	Øðð ð ñ ô ð ð ð ð Ð'à—
’
Ð-Ñ.Ô.Ð2BÒBÐBØ"Ð*Ø—:’:Ð/Ñ0Ô0¸ÐGÐGØ'Ð/Ø—:’:Ð4Ñ5Ô5Ð=QÐQÐQàðð ð ñ ô ð ð ð ð —
’
˜7Ñ#Ô#ˆØˆ=Øðð ð ñ ô ð ð ð ð 	Ý˜Ÿš DÑ)Ô)Ñ*Ô*ð#ð ð ð ñ ô ð ð øõ$ ð 	ð 	ð 	Ý�LŠLÐ8¸+ÀsÑKÔKÐKØ�5�5�5ð)ð ð ñ ô ð ð ð øøøøð$	øøøð%ð ð ð øøøð ð ð ð ð ð sB    4EÁ!AEÂ<EÃ"!DÄ
EÄEÄ6EÅEÅEÅEÅEc                 óP   — | sdS 	 ddl m}  || ¦  «        S # t          $ r Y dS w xY w)zçCapture exact request transport + live session generation, if any.

    This is intentionally an in-process bridge, not a serializable capability.
    Non-gateway hosts (including the CLI helper path) receive ``(None, None)``.
    ©NNr   )Ú _current_session_steer_authority)Útui_gateway.serverrb   rL   )rY   rb   s     r    Ú _capture_gateway_steer_authorityrd     s\   € ð ð ØˆzðØGÐGÐGÐGÐGÐGà/Ð/Ð0@ÑAÔAÐAøÝð ð ð Øˆzˆzðøøøs   † —
%¤%c                  óŠ   — t           5  d„ t                               ¦   «         D ¦   «         cddd¦  «         S # 1 swxY w Y   dS )uË   Snapshot of the currently running subagent tree.

    Each record: {subagent_id, parent_id, depth, goal, model, started_at,
    tool_count, status}.  Safe to call from any thread â€” returns a copy.
    c                 óJ   — g | ] }d „ |                      ¦   «         D ¦   «         ‘Œ!S )c                 ó"   — i | ]\  }}|d v¯	||“ŒS )>   rD   r>   rZ   rY   r[   r9   ©Ú.0ÚkÚvs      r    ú
<dictcomp>z4list_active_subagents.<locals>.<listcomp>.<dictcomp>6  s@   € ð ð ð á�A�qØððð ð �1ðð ð r"   )Úitems©ri   Úrs     r    ú
<listcomp>z)list_active_subagents.<locals>.<listcomp>5  sI   € ð 
ð 
ð 
ð ðð àŸGšG™IœIðñ ô ð
ð 
ð 
r"   N)r@   r1   Úvaluesr9   r"   r    Úlist_active_subagentsrr   .  s˜   € õ 
 ð 
ð 
ð
ð 
õ '×-Ò-Ñ/Ô/ð
ñ 
ô 
ð
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s   ˆ#8¸<¿<é   i@  ©Úmax_entriesÚ	max_charsÚresultru   rv   c                ó°  — t          | t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        sg S g }i }|D ] }t          |t          ¦  «        sŒ|                     d¦  «        dk    ro|                     d¦  «        pg D ]W}|                     d¦  «        }|                     d¦  «        pi }	|r't	          |	                     d¦  «        pd	¦  «        ||<   ŒXŒ¡t          |¦  «        D ]Ç}t          |¦  «        |k    r n±t          |t          ¦  «        r|                     d¦  «        d	k    rŒFt          |                     d
¦  «        pd¦  «        }
t          |
¦  «        }|                     |                     d¦  «        pdd	¦  «        }|
d|…         }| 	                    |||dœ¦  «         ŒÈ| 
                    ¦   «          |S )u8  Pull the last N tool-call results from a child's conversation.

    Powers the overlay's "Output" section â€” the cc-swarm-parity feature.
    We reuse the same messages list the trajectory saver walks, taking
    only the tail to keep event payloads small.  Each entry is
    ``{tool, preview, is_error}``.
    ÚmessagesNÚroleÚ	assistantÚ
tool_callsÚidÚfunctionÚnameÚtoolÚcontentÚ Útool_call_id)r€   ÚpreviewÚis_error)rN   Údictr)   ÚlistrO   ÚreversedÚlenÚ_stringify_tool_contentÚ_looks_like_error_outputÚappendÚreverse)rw   ru   rv   ry   ÚtailÚpending_call_by_idÚmsgÚtcÚtc_idÚfnr�   r…   Ú	tool_namer„   s                 r    Ú_extract_output_tailr•   F  sì  € õ *4°F½DÑ)AÔ)AÐKˆv�zŠz˜*Ñ%Ô%Ð%Àt€HÝ�h¥Ñ%Ô%ð Øˆ	ð "$€DØ)+Ðð ð Nð NˆÝ˜#�tÑ$Ô$ð 	ØØ�7Š7�6‰?Œ?˜kÒ)Ð)Ø—g’g˜lÑ+Ô+Ð1¨rð Nð N�ØŸš˜t™œ�Ø—V’V˜JÑ'Ô'Ð-¨2�Øð NÝ03°B·F²F¸6±N´NÐ4LÀfÑ0MÔ0MÐ& uÑ-øøõ ˜Ñ!Ô!ð Sð SˆÝˆt‰9Œ9˜Ò#Ð#ØˆEÝ˜#�tÑ$Ô$ð 	¨¯ª°©¬¸6Ò(AÐ(AØõ
 *¨#¯'ª'°)Ñ*<Ô*<Ð*BÀÑCÔCˆÝ+¨GÑ4Ô4ˆØ&×*Ò*¨3¯7ª7°>Ñ+BÔ+BÐ+HÀbÈ&ÑQÔQˆ	ð ˜*˜9˜*Ô%ˆØ�Š˜Y°7ÈÐQÐQÑRÔRÐRÐRà‡L‚L�N„N€NØ€Kr"   r�   c                 óh  — | €dS t          | t          ¦  «        r| S t          | t          ¦  «        rÃg }| D ]©}t          |t          ¦  «        rp|                     d¦  «        }t          |t          ¦  «        r|                     |¦  «         ŒW|                     t          j        |dt          ¬¦  «        ¦  «         Œ‡|                     t          |¦  «        ¦  «         Œªd                     |¦  «        S t          | t          ¦  «        rt          j        | dt          ¬¦  «        S t          | ¦  «        S )a+  Return a stable text representation for tool-result content.

    Most providers store tool results as strings, but some OpenAI-compatible
    paths can return content-block lists. Delegate observability must never
    crash while summarising a child run just because the transport used blocks.
    Nr‚   r\   F)Úensure_asciiÚdefaultÚ
)	rN   rO   r‡   r†   r)   rŒ   ÚjsonÚdumpsÚjoin)r�   ÚpartsÚitemr\   s       r    rŠ   rŠ   }  s  € ð €ØˆrÝ�'�3ÑÔð ØˆÝ�'�4Ñ Ô ð  ØˆØð 	(ð 	(ˆDÝ˜$¥Ñ%Ô%ð (Ø—x’x Ñ'Ô'�Ý˜d¥CÑ(Ô(ð TØ—L’L Ñ&Ô&Ð&Ð&à—L’L¥¤¨D¸uÍcÐ!RÑ!RÔ!RÑSÔSÐSÐSà—’�S ™YœYÑ'Ô'Ð'Ð'Ø�yŠy˜ÑÔÐÝ�'�4Ñ Ô ð DÝŒz˜'°½sÐCÑCÔCÐCÝˆw‰<Œ<Ðr"   >   ÚcwdÚdstÚsrcÚurlÚpathÚurlsÚendpointÚnew_pathÚold_pathÚ	directoryÚ	file_pathÚsource_pathÚtarget_pathÚdestination_path>   r¢   r¤   r¥   ÚkeyÚvaluec                 óÀ  ‡ — t          |t          ¦  «        r$d„ ˆ fd„|dd…         D ¦   «         D ¦   «         }|pdS t          |t          ¦  «        r|sdS |dd…         }‰ t          v rw	 t	          |¦  «        }|j        rN|j        rG|j        }|sdS d|v rd|› d�n|}|j        }|�|› d|› �n|}t          |j        ||j
        d	d	f¦  «        S n# t          $ r Y dS w xY w|S )
z<Keep bounded side-effect targets while dropping URL secrets.c                 ó   — g | ]}|®|‘ŒS r8   r9   )ri   rž   s     r    rp   z)_sanitize_tool_target.<locals>.<listcomp>¯  s(   € ð 
ð 
ð 
ØØÐð ØÐÐr"   c              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r8   )Ú_sanitize_tool_target)ri   rž   r­   s     €r    ú	<genexpr>z(_sanitize_tool_target.<locals>.<genexpr>°  s.   øè è € ÐVÐVÀ4Õ3°C¸Ñ>Ô>ÐVÐVÐVÐVÐVÐVr"   Né   i   ú:Ú[Ú]r‚   )rN   r‡   rO   Ú_TOOL_INPUT_URL_KEYSr   ÚschemeÚnetlocÚhostnameÚportr	   r£   Ú
ValueError)	r­   r®   ÚcleanedÚboundedÚparsedr»   Úhostr¼   rº   s	   `        r    r²   r²   ¬  sT  ø€ å�%�ÑÔð ð
ð 
ØVÐVÐVÐVÈ5ÐQTÐRTÐQTÌ:ÐVÑVÔVð
ñ 
ô 
ˆð ˆ˜$ÐÝ�e�SÑ!Ô!ð ¨ð ØˆtØ�E�T�EŒl€GØ
Õ"Ð"Ð"ð	Ý˜gÑ&Ô&ˆFØŒ}ð P ¤ð PØ!œ?�Øð  Ø˜4ð
 +.°¨/¨/�˜8����¸x�Ø”{�Ø-1Ð-=˜DÐ)Ð) 4Ð)Ð)Ð)À4�Ý! 6¤=°&¸&¼+ÀrÈ2Ð"NÑOÔOÐOøøÝð 	ð 	ð 	Ø�4�4ð	øøøà€Ns   Á(&C Â;C Ã
CÃCÚ	argumentsc                 óÖ  — t          | t          ¦  «        sg i dœS 	 t          j        | ¦  «        }n# t          t
          f$ r g i dœcY S w xY wt          |t          ¦  «        sg i dœS t          d„ |D ¦   «         ¦  «        dd…         }i }|                     ¦   «         D ]G\  }}t          |¦  «         	                    ¦   «         }|t          vrŒ0t          ||¦  «        }|�|||<   ŒH||dœS )zFSummarize argument names and side-effect targets without raw payloads.©Úargument_keysÚtargetsc              3   óD   K  — | ]}t          |¦  «        d d…         V — Œd S ©Né€   ©rO   ©ri   r­   s     r    r³   z,_summarize_tool_arguments.<locals>.<genexpr>Ö  s0   è è € Ð3Ð3 S•#�c‘(”(˜4˜C˜4”.Ð3Ð3Ð3Ð3Ð3Ð3r"   Né@   )rN   rO   rš   ÚloadsÚ	TypeErrorr½   r†   Úsortedrm   ÚlowerÚ_TOOL_INPUT_TARGET_KEYSr²   )rÂ   rÀ   ÚkeysrÆ   Úraw_keyr®   r­   r¾   s           r    Ú_summarize_tool_argumentsrÔ   Ë  s$  € å�i¥Ñ%Ô%ð 4Ø!#°Ð3Ð3Ð3ð4Ý”˜IÑ&Ô&ˆˆøÝ•zÐ"ð 4ð 4ð 4Ø!#°Ð3Ð3Ð3Ð3Ð3ð4øøøå�f�dÑ#Ô#ð 4Ø!#°Ð3Ð3Ð3åÐ3Ð3¨FÐ3Ñ3Ô3Ñ3Ô3°C°R°CÔ8€DØ €GØ Ÿ,š,™.œ.ð #ð #‰ˆ�Ý�'‰lŒl× Ò Ñ"Ô"ˆØÕ-Ð-Ð-ØÝ'¨¨UÑ3Ô3ˆØÐØ"ˆG�C‰LøØ!¨gÐ6Ð6Ð6s   œ1 ±A
Á	A
Úsummaryc                 óÐ  — t          | t          ¦  «        sg i dœS |                      d¦  «        }t          |t          ¦  «        rd„ |d d…         D ¦   «         ng }|                      d¦  «        }i }t          |t          ¦  «        r\|                     ¦   «         D ]G\  }}t          |¦  «                             ¦   «         }|t          vrŒ0t          ||¦  «        }|�|||<   ŒH||dœS )NrÄ   rÅ   c                 ó<   — g | ]}t          |¦  «        d d…         ‘ŒS rÈ   rÊ   rË   s     r    rp   z0_sanitize_tool_input_summary.<locals>.<listcomp>ç  s&   € Ð-Ð-Ð-˜C�ˆS‰Œ�$�3�$ŒÐ-Ð-Ð-r"   rÌ   rÆ   )	rN   r†   r)   r‡   rm   rO   rÐ   rÑ   r²   )	rÕ   rÒ   Ú	safe_keysrÆ   Úsafe_targetsrÓ   r®   r­   r¾   s	            r    Ú_sanitize_tool_input_summaryrÚ   â  s  € Ý�g�tÑ$Ô$ð 4Ø!#°Ð3Ð3Ð3Ø�;Š;�Ñ'Ô'€Dõ �d�DÑ!Ô!ð	Ð-Ð- 4¨¨¨¤9Ð-Ñ-Ô-Ð-àð ð
 �kŠk˜)Ñ$Ô$€GØ#%€LÝ�'�4Ñ Ô ð ,Ø%Ÿmšm™oœoð 	,ð 	,‰NˆG�UÝ�g‘,”,×$Ò$Ñ&Ô&ˆCØÕ1Ð1Ð1ØÝ+¨C°Ñ7Ô7ˆGØÐ"Ø$+�˜SÑ!øØ&°<Ð@Ð@Ð@r"   Ú
tool_tracec           	      ó  ‡— t          | t          ¦  «        sg S g }| D ]áŠt          ‰t          ¦  «        sŒt          ‰                     d¦  «        pd¦  «        dd…         }t          ‰                     d¦  «        pd¦  «                             ¦   «         }|dvrd}dt          dt          fˆfd	„}|                     |t          ‰                     d
¦  «        ¦  «         |d¦  «         |d¦  «        |dœ¦  «         Œâ|S )zABuild a detached, metadata-only tool history for lifecycle hooks.r€   ÚunknownNé   Ústatus>   ÚokÚerrorr­   r   c                 óÐ   •— ‰                      | d¦  «        }t          |t          t          f¦  «        rt          |t          ¦  «        rdS t          dt          |¦  «        ¦  «        S )Nr   )r)   rN   ÚintÚfloatr5   Úmax)r­   r®   rž   s     €r    Ú_byte_countz5_subagent_stop_tool_call_history.<locals>._byte_count  sX   ø€ Ø—H’H˜S !Ñ$Ô$ˆEÝ˜e¥c­5 \Ñ2Ô2ð µjÀÍÑ6MÔ6Mð Ø�qÝ�q�#˜e™*œ*Ñ%Ô%Ð%r"   Úinput_summaryÚ
args_bytesÚresult_bytes)r”   Ú
tool_inputÚinput_bytesÚoutput_bytesrß   )	rN   r‡   r†   rO   r)   rÐ   rã   rŒ   rÚ   )rÛ   Úhistoryr”   rß   ræ   rž   s        @r    Ú _subagent_stop_tool_call_historyrî   ø  s5  ø€ å�j¥$Ñ'Ô'ð Øˆ	à$&€GØð ð ˆÝ˜$¥Ñ%Ô%ð 	ØÝ˜Ÿš Ñ(Ô(Ð5¨IÑ6Ô6°t¸°tÔ<ˆ	Ý�T—X’X˜hÑ'Ô'Ð4¨9Ñ5Ô5×;Ò;Ñ=Ô=ˆØ˜Ð(Ð(ØˆFð	&�Sð 	&¥Sð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	�ŠØ"Ý6°t·x²xÀÑ7PÔ7PÑQÔQØ&˜; |Ñ4Ô4Ø'˜K¨Ñ7Ô7Øð
ð 
ñ 	ô 	ð 	ð 	ð €Nr"   c                 ó4  — t          | ¦  «        } | sdS |                      ¦   «         }|                     d¦  «        s|                     d¦  «        r 	 t          j        | ¦  «        }t          |t          ¦  «        re|                     d¦  «        rdS t          |                     d¦  «        pd¦  «         	                    ¦   «          
                    ¦   «         }|dv rdS n# t          $ r Y nw xY w|                      ¦   «         r>|                      ¦   «         d	          	                    ¦   «          
                    ¦   «         nd}|                     d
¦  «        p>|                     d¦  «        p)|                     d¦  «        p|                     d¦  «        S )a±  Conservative stderr/error detector for tool-result previews.

    The old heuristic flagged any preview containing the substring "error",
    which painted perfectly normal terminal/json output red.  We now only
    mark output as an error when there is stronger evidence:
      - structured JSON with an ``error`` key
      - structured JSON with ``status`` of error/failed
      - first line starts with a classic error marker
    FÚ{r¶   rá   Trß   r‚   >   rá   ÚfailedÚfailureÚtimeoutr   zerror:zfailed:z
traceback z
exception:)rŠ   ÚlstripÚ
startswithrš   rÍ   rN   r†   r)   rO   rP   rÐ   rL   Ú
splitlines)r�   ÚheadrÀ   rß   Úfirsts        r    r‹   r‹     sœ  € õ & gÑ.Ô.€GØð Øˆuà�>Š>ÑÔ€DØ‡‚�sÑÔð 
˜tŸš¨sÑ3Ô3ð 
ð		Ý”Z Ñ(Ô(ˆFÝ˜&¥$Ñ'Ô'ð  Ø—:’:˜gÑ&Ô&ð  Ø˜4Ý˜VŸZšZ¨Ñ1Ô1Ð7°RÑ8Ô8×>Ò>Ñ@Ô@×FÒFÑHÔH�ØÐFÐFÐFØ˜4øøÝð 	ð 	ð 	ØˆDð	øøøð 8?×7IÒ7IÑ7KÔ7KÐSˆG×ÒÑ Ô  Ô#×)Ò)Ñ+Ô+×1Ò1Ñ3Ô3Ð3ÐQS€Eà×Ò˜Ñ"Ô"ð 	*Ø×Ò˜IÑ&Ô&ð	*à×Ò˜LÑ)Ô)ð	*ð ×Ò˜LÑ)Ô)ð	s   Á>C" ÂAC" Ã"
C/Ã.C/ro   c                 óº   — | �| sdS t          | ¦  «                             ¦   «                              ¦   «         }|dv r|S t                               d| ¦  «         dS )a/  Normalise a caller-provided role to 'leaf' or 'orchestrator'.

    None/empty -> 'leaf'.  Unknown strings coerce to 'leaf' with a
    warning log (matches the silent-degrade pattern of
    _get_orchestrator_enabled).  _build_child_agent adds a second
    degrade layer for depth/kill-switch bounds.
    NÚleaf>   rú   Úorchestratorz1Unknown delegate_task role=%r, coercing to 'leaf')rO   rP   rÐ   r   r   )ro   Úr_norms     r    Ú_normalize_rolerý   :  s\   € ð 	€y˜€yØˆvÝ�‰VŒV�\Š\‰^Œ^×!Ò!Ñ#Ô#€FØÐ)Ð)Ð)ØˆÝ
‡N‚NÐFÈÑJÔJÐJØˆ6r"   c                  ó  — t          ¦   «         } |                      d¦  «        }|�‰	 t          dt          |¦  «        ¦  «        }|dk    r$t          sdat
                               d|¦  «         |S # t          t          f$ r+ t
                               d|t          ¦  «         t          cY S w xY wt          j        d¦  «        }|r<	 t          dt          |¦  «        ¦  «        S # t          t          f$ r
 t          cY S w xY wt          S )	ay  Read delegation.max_concurrent_children from config, falling back to
    DELEGATION_MAX_CONCURRENT_CHILDREN env var, then the default (3).

    Users can raise this as high as they want; only the floor (1) is enforced.

    Uses the same ``_load_config()`` path that the rest of ``delegate_task``
    uses, keeping config priority consistent (config.yaml > env > default).
    Úmax_concurrent_childrenNr/   é
   Tzxdelegation.max_concurrent_children=%d: each child consumes API tokens independently. High values multiply cost linearly.zNdelegation.max_concurrent_children=%r is not a valid integer; using default %dÚ"DELEGATION_MAX_CONCURRENT_CHILDREN)r(   r)   rå   rã   Ú_HIGH_CONCURRENCY_WARNEDr   r   rÎ   r½   Ú _DEFAULT_MAX_CONCURRENT_CHILDRENÚosÚgetenv)r+   r,   rw   Úenv_vals       r    Ú_get_max_concurrent_childrenr  K  s1  € õ ‰.Œ.€CØ
�'Š'Ð+Ñ
,Ô
,€CØ
€ð	4Ý˜�C ™HœHÑ%Ô%ˆFØ˜Š{ˆ{å/ð Ø/3Ð,Ý—N’NðMàñô ð ð
 ˆMøÝ�:Ð&ð 	4ð 	4ð 	4Ý�NŠNð#àÝ0ñ	ô ð õ 4Ð3Ð3Ð3ð	4øøøõ ŒiÐ<Ñ=Ô=€GØð 4ð	4Ý�q�#˜g™,œ,Ñ'Ô'Ð'øÝ�:Ð&ð 	4ð 	4ð 	4Ý3Ð3Ð3Ð3ð	4øøøå+Ð+s$   §AA0 Á09B,Â+B,ÃC# Ã#C>Ã=C>c                  óª   — t          ¦   «         } |                      d¦  «        �#t          sdat                               d¦  «         t          ¦   «         S )uè  Concurrency cap for background (``background=true``) delegations.

    DEPRECATED KNOB: ``delegation.max_async_children`` has been unified into
    ``delegation.max_concurrent_children`` â€” one cap governs both a single
    synchronous batch's parallelism and how many background delegation units
    may run at once. When at capacity, a new async dispatch is REJECTED (not
    queued) so a runaway model can't pile up unbounded background work; the
    caller falls back to running the work synchronously.

    A leftover ``max_async_children`` in config.yaml is ignored (the config
    migration removes it, folding a raised value into
    ``max_concurrent_children``); we log a one-time deprecation warning if
    one is still present.
    Úmax_async_childrenNTz§delegation.max_async_children is deprecated and ignored; delegation.max_concurrent_children now caps background delegations too. Remove the stale key from config.yaml.)r(   r)   Ú_LEGACY_MAX_ASYNC_WARNEDr   r   r  ©r+   s    r    Ú_get_max_async_childrenr  w  sV   € õ  ‰.Œ.€CØ
‡w‚wÐ#Ñ$Ô$Ð0Õ9QÐ0Ø#'Ð Ý�ŠðFñ	
ô 	
ð 	
õ
 (Ñ)Ô)Ð)r"   c                  ó¸  — t          ¦   «         } |                      d¦  «        }|�Z	 t          |¦  «        }|dk    rdnt          d|¦  «        S # t          t
          f$ r t                               d|¦  «         Y nw xY wt          j	        d¦  «        }|r?	 t          |¦  «        }|dk    rdnt          d|¦  «        S # t          t
          f$ r Y nw xY wt          S )u±  Read delegation.child_timeout_seconds from config.

    Returns the number of seconds a single child agent is allowed to run
    before being cut off, or ``None`` when no wall-clock cap applies.

    Default: ``None`` (no timeout). Subagents doing legitimate heavy work
    (deep code review, large research fan-outs, slow reasoning models) were
    routinely killed mid-task by the old blanket cap even though they were
    making steady progress. Failures should come from what the child is
    actually doing â€” API errors, tool errors, iteration budget â€” not from a
    generic delegation-level stopwatch. Stuck-child protection is handled
    separately by the heartbeat staleness monitor, which stops refreshing
    parent activity so the gateway inactivity timeout can fire.

    Set ``delegation.child_timeout_seconds`` to a positive number to opt back
    in to a hard cap (floor 30 s); ``0`` or a negative value means disabled.
    Úchild_timeout_secondsNr   g      >@zUdelegation.child_timeout_seconds=%r is not a valid number; using default (no timeout)Ú DELEGATION_CHILD_TIMEOUT_SECONDS)r(   r)   rä   rå   rÎ   r½   r   r   r  r  ÚDEFAULT_CHILD_TIMEOUT)r+   r,   rÀ   r  s       r    Ú_get_child_timeoutr  ’  s  € õ$ ‰.Œ.€CØ
�'Š'Ð)Ñ
*Ô
*€CØ
€ð		>Ý˜3‘Z”ZˆFð " Qš;˜;�4�4­C°°fÑ,=Ô,=Ð=øõ �:Ð&ð 	ð 	ð 	Ý�NŠNð-àñô ð ð ð ð	øøøõ ŒiÐ:Ñ;Ô;€GØð >ð	>Ý˜7‘^”^ˆFð " Qš;˜;�4�4­C°°fÑ,=Ô,=Ð=øõ �:Ð&ð 	ð 	ð 	ØˆDð	øøøõ !Ð s#   §A Á,A=Á<A=ÂB> Â>CÃCc                  óx  — t          ¦   «         } |                      d¦  «        }|€t          S 	 t          |¦  «        }n?# t          t
          f$ r+ t                               d|t          ¦  «         t          cY S w xY wt          t          |¦  «        }||k    r"t                               d|t          |¦  «         |S )uÙ  Read delegation.max_spawn_depth from config, floored at 1 (no ceiling).

    depth 0 = parent agent.  max_spawn_depth = N means agents at depths
    0..N-1 can spawn; depth N is the leaf floor.  Default 1 is flat:
    parent spawns children (depth 1), depth-1 children cannot spawn
    (blocked by this guard AND, for leaf children, by the delegation
    toolset strip in _strip_blocked_tools).

    Raise to 2+ to unlock nested orchestration. role="orchestrator"
    removes the toolset strip for spawning children when
    max_spawn_depth >= 2, enabling them to spawn their own workers.
    Like max_concurrent_children, there is no upper ceiling â€” but each
    extra level multiplies API cost, so raise it deliberately.
    Úmax_spawn_depthNzFdelegation.max_spawn_depth=%r is not a valid integer; using default %dz6delegation.max_spawn_depth=%d below floor %d; using %d)
r(   r)   Ú	MAX_DEPTHrã   rÎ   r½   r   r   rå   Ú_MIN_SPAWN_DEPTH)r+   r,   ÚivalÚflooreds       r    Ú_get_max_spawn_depthr  ¼  sÍ   € õ ‰.Œ.€CØ
�'Š'Ð#Ñ
$Ô
$€CØ
€{ÝÐðÝ�3‰xŒxˆˆøÝ•zÐ"ð ð ð Ý�ŠØWØÝñ	
ô 	
ð 	
õ
 ÐÐÐðøøøõ Õ" DÑ)Ô)€GØ�$‚€Ý�ŠØDØÝØñ		
ô 	
ð 	
ð €Ns   ®> ¾9A:Á9A:c                  óö   — t          ¦   «         } |                      dd¦  «        }t          |t          ¦  «        r|S t          |t          ¦  «        r(|                     ¦   «                              ¦   «         dv S dS )a   Global kill switch for the orchestrator role.

    When False, role="orchestrator" is silently forced to "leaf" in
    _build_child_agent and the delegation toolset is stripped as before.
    Lets an operator disable the feature without a code revert.
    Úorchestrator_enabledT>   Ú1ÚonÚyesÚtrue)r(   r)   rN   r5   rO   rP   rÐ   r*   s     r    Ú_get_orchestrator_enabledr  ã  sp   € õ ‰.Œ.€CØ
�'Š'Ð(¨$Ñ
/Ô
/€CÝ�#•tÑÔð Øˆ
å�#•sÑÔð AØ�yŠy‰{Œ{× Ò Ñ"Ô"Ð&@Ð@Ð@Øˆ4r"   c                  óf   — t          ¦   «         } t          |                      d¦  «        d¬¦  «        S )zFWhether narrowed child toolsets should keep the parent's MCP toolsets.Úinherit_mcp_toolsetsT©r˜   )r(   r   r)   r  s    r    Ú_get_inherit_mcp_toolsetsr#  ô  s+   € å
‰.Œ.€CÝ˜3Ÿ7š7Ð#9Ñ:Ô:ÀDÐIÑIÔIÐIr"   r   c                 ó"  — | sdS t          | ¦  «                             d¦  «        rdS 	 ddlm}  |j        t          | ¦  «        ¦  «        }n# t
          $ r d}Y nw xY wt          |o!t          |¦  «                             d¦  «        ¦  «        S )zDReturn True for canonical MCP toolsets and their registered aliases.Fzmcp-Tr   )ÚregistryN)rO   rõ   Útools.registryr%  Úget_toolset_alias_targetrL   r5   )r   r%  Útargets      r    Ú_is_mcp_toolset_namer)  ú  s¬   € àð ØˆuÝ
ˆ4�y„y×Ò˜FÑ#Ô#ð ØˆtðØ+Ð+Ð+Ð+Ð+Ð+à2�Ô2µ3°t±9´9Ñ=Ô=ˆˆøÝð ð ð Øˆˆˆðøøøå�Ð9�3˜v™;œ;×1Ò1°&Ñ9Ô9Ñ:Ô:Ð:s   ª#A ÁAÁAÚparent_toolsetsc                 óÄ  — t          ¦   «         }| D ]A}t          j        |¦  «        }|r)|                     |                     dg ¦  «        ¦  «         ŒB|st          | ¦  «        S t          | ¦  «        }t          j        ¦   «         D ]Y\  }}||v rŒ
|                     dg ¦  «        }|r7t          |¦  «                             |¦  «        r|                     |¦  «         ŒZ|S )a@  Expand composite toolsets so individual toolset names are recognized.

    When a parent uses a composite toolset like ``hermes-cli`` (which bundles
    all core tools), the child may request individual toolsets such as ``web``
    or ``terminal``.  A simple name-based intersection would reject them
    because ``"web" != "hermes-cli"``.

    This helper collects the tool names from each parent toolset, then adds
    the names of any individual toolsets whose tools are a *subset* of the
    parent's available tools.  The original parent toolset names are preserved.
    Útools)Úsetr
   r)   Úupdaterm   ÚissubsetÚadd)r*  Úparent_tool_namesÚts_nameÚts_defÚexpandedÚts_toolss         r    Ú_expand_parent_toolsetsr6  	  sò   € õ !™UœUÐØ"ð >ð >ˆÝ”˜gÑ&Ô&ˆØð 	>Ø×$Ò$ V§Z¢Z°¸Ñ%<Ô%<Ñ=Ô=Ð=øàð $Ý�?Ñ#Ô#Ð#å�?Ñ#Ô#€HÝ#œ>Ñ+Ô+ð "ð "‰ˆ�Ø�hÐÐØØ—:’:˜g rÑ*Ô*ˆØð 	"�˜H™œ×.Ò.Ð/@ÑAÔAð 	"Ø�LŠL˜Ñ!Ô!Ð!øØ€Or"   Úchild_toolsetsc                 ó˜   — t          | ¦  «        }t          |¦  «        D ]*}t          |¦  «        r||vr|                     |¦  «         Œ+|S )zFAppend any parent MCP toolsets that are missing from a narrowed child.)r‡   rÏ   r)  rŒ   )r7  r*  Ú	preservedÚtoolset_names       r    Ú_preserve_parent_mcp_toolsetsr;  (  s]   € õ �^Ñ$Ô$€IÝ˜Ñ/Ô/ð +ð +ˆÝ Ñ-Ô-ð 	+°,ÀiÐ2OÐ2OØ×Ò˜\Ñ*Ô*Ð*øØÐr"   é2   iÀ]  ç      à?iÐ  r  é   é   é(   )ÚterminalÚfileÚwebc                   ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚDelegateEventuã  Formal event types emitted during delegation progress.

    _build_child_progress_callback normalises incoming legacy strings
    (``tool.started``, ``_thinking``, â€¦) to these enum values 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 and are not currently emitted.
    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_COMPLETEDr9   r"   r    rE  rE  _  sA   € € € € € ð	ð 	ð +€LØ,€MØ.€NØ(€KØ,€MØ/ÐØ3ÐÐÐr"   rE  )Ú	_thinkingzreasoning.availableztool.startedztool.completedÚsubagent_progressÚ_LEGACY_EVENT_MAPc                  ó   — dS )z<Delegation has no external requirements -- always available.Tr9   r9   r"   r    Úcheck_delegate_requirementsrU    s   € àˆ4r"   rú   é   ©Úworkspace_pathrz   r  Úchild_depthÚgoalÚcontextrX  rz   r  rY  c                óœ  — ddd| › �g}|r,|                      ¦   «         r|                     d|› �¦  «         |r:t          |¦  «                              ¦   «         r|                     d|› d�¦  «         |                     d¦  «         |dk    r+|d	z   |k    rd
nd}|                     d|› d|› d|› �¦  «         d                     |¦  «        S )a–  Build a focused system prompt for a child agent.

    When role='orchestrator', appends a delegation-capability block
    modeled on OpenClaw's buildSubagentSystemPrompt (canSpawn branch at
    inspiration/openclaw/src/agents/subagent-system-prompt.ts:63-95).
    The depth note is literal truth (grounded in the passed config) so
    the LLM doesn't confabulate nesting capabilities that don't exist.
    z@You are a focused subagent working on a specific delegated task.r‚   zYOUR TASK:
z

CONTEXT:
z
WORKSPACE PATH:
zg
Use this exact path for local repository/workdir operations unless the task explicitly says otherwise.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.rû   r/   u¬   Your own children MUST be leaves (cannot delegate further) because they would be at the depth floor â€” you cannot pass role='orchestrator' to your own delegate_task calls.zØYour own children can themselves be orchestrators or leaves, depending on the `role` you pass to delegate_task. Default is 'leaf'; pass role='orchestrator' explicitly when a child needs to further decompose its work.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.

NOTE: You are at depth z3. The delegation tree is capped at max_spawn_depth=z. r™   )rP   rŒ   rO   rœ   )rZ  r[  rX  rz   r  rY  r�   Ú
child_notes           r    Ú_build_child_system_promptr^  „  s]  € ð$ 	KØ
Ø�tÐÐð€Eð
 ð /�7—=’=‘?”?ð /Ø�ŠÐ- GÐ-Ð-Ñ.Ô.Ð.Øð 
�#˜nÑ-Ô-×3Ò3Ñ5Ô5ð 
Ø�ŠðuØðuð uð uñ	
ô 	
ð 	
ð
 
‡L‚Lð	;ñô ð ð ˆ~ÒÐð
 ˜Q‰ /Ò1Ð1ðCð Cð3ð 	ð 	�ŠðLð  '2ð!Lð Lð" -<ð#Lð Lð" @Jð#Lð Lñ	
ô 	
ð 	
ð( �9Š9�UÑÔÐr"   c                 óø  — t          j        d¦  «        t          t          | dd¦  «        dd¦  «        t          | dd¦  «        t          | dd¦  «        g}|D ]¢}|sŒ	 t           j                             t           j                             t          |¦  «        ¦  «        ¦  «        }n# t          $ r Y Œ\w xY wt           j                             |¦  «        r#t           j         	                    |¦  «        r|c S Œ£dS )a  Best-effort local workspace hint for child prompts.

    We only inject a path when we have a concrete absolute directory. This avoids
    teaching subagents a fake container path while still helping them avoid
    guessing `/workspace/...` for local repo tasks.
    ÚTERMINAL_CWDÚ_subdirectory_hintsNÚworking_dirÚterminal_cwdrŸ   )
r  r  rJ   r£   ÚabspathÚ
expanduserrO   rL   ÚisabsÚisdir)Úparent_agentÚ
candidatesÚ	candidater\   s       r    Ú_resolve_workspace_hintrk  Ò  sÿ   € õ 	Œ	�.Ñ!Ô!ÝÝ�LÐ"7¸Ñ>Ô>ÀÈtñ	
ô 	
õ 	�˜n¨dÑ3Ô3Ý�˜e TÑ*Ô*ð€Jð  ð ð ˆ	Øð 	Øð	Ý”7—?’?¥2¤7×#5Ò#5µc¸)±n´nÑ#EÔ#EÑFÔFˆDˆDøÝð 	ð 	ð 	ØˆHð	øøøåŒ7�=Š=˜ÑÔð 	¥2¤7§=¢=°Ñ#6Ô#6ð 	ØˆKˆKˆKøØˆ4s   ÁA	B'Â'
B4Â3B4Útoolsetsc                 óª   ‡‡— t          dh¦  «        Šˆfd„t          j        ¦   «         D ¦   «         Š‰                     d¦  «         ˆfd„| D ¦   «         S )a^  Remove toolsets that contain only blocked tools.

    The strip set is derived from DELEGATE_BLOCKED_TOOLS plus the explicit
    composite/scenario toolsets (delegation, code_execution) that have no
    one-to-one tool. This keeps the blocklist and the strip set in lockstep
    so new blocked tools can't silently leak through as toolset names.
    Ú
delegationc           	      ó|   •— h | ]8\  }}|‰v s-t          d „ |                     dg ¦  «        D ¦   «         ¦  «        ¯6|’Œ9S )c              3   ó(   K  — | ]}|t           v V — Œd S r8   )ÚDELEGATE_BLOCKED_TOOLS©ri   Úts     r    r³   z1_strip_blocked_tools.<locals>.<setcomp>.<genexpr>ü  s(   è è € ÐJÐJ¨qˆqÕ*Ð*ÐJÐJÐJÐJÐJÐJr"   r,  )Úallr)   )ri   r   ÚdefnÚ_COMPOSITE_BLOCKED_TOOLSETSs      €r    ú	<setcomp>z'_strip_blocked_tools.<locals>.<setcomp>ø  s`   ø€ ð ð ð áˆD�$ØÐ.Ð.Ð.ÝÐJÐJ°D·H²H¸WÀbÑ4IÔ4IÐJÑJÔJÑJÔJð /ð 	à.Ð.Ð.r"   Úkanbanc                 ó   •— g | ]}|‰v¯|‘Œ	S r9   r9   )ri   rs  Úblocked_toolset_namess     €r    rp   z(_strip_blocked_tools.<locals>.<listcomp>ÿ  s$   ø€ ÐBÐBÐB�! 1Ð,AÐ#AÐ#AˆAÐ#AÐ#AÐ#Ar"   )Ú	frozensetr
   rm   r0  )rl  rv  rz  s    @@r    Ú_strip_blocked_toolsr|  í  sw   øø€ õ #,¨\¨NÑ";Ô";Ððð ð ð å"œ.Ñ*Ô*ðñ ô Ðð ×Ò˜hÑ'Ô'Ð'ØBÐBÐBÐB�xÐBÑBÔBÐBr"   c                 óº   ‡— t          t          ¦  «        Š| dk    r‰                     d¦  «         t          ˆfd„t	          j        ¦   «         D ¦   «         ¦  «        S )aÝ  Return one-tool deny toolsets for a delegated child role.

    ``_strip_blocked_tools`` can remove fully blocked toolsets, but it must keep
    mixed platform bundles such as ``hermes-cli`` because those also contain
    useful tools. Passing these exact deny toolsets to AIAgent lets
    ``model_tools`` subtract blocked names *after* composite expansion, and the
    restriction survives later registry/MCP refreshes through the agent's
    stored ``disabled_toolsets``.
    rû   r   c              3   ó¸   •K  — | ]T\  }}|                      d ¦  «        ¯t          |                      d d¦  «        ¦  «                             ‰¦  «        ¯P|V — ŒUdS )r,  r9   N)r)   r-  r/  )ri   r   ru  Úblocked_namess      €r    r³   z-_blocked_toolsets_for_role.<locals>.<genexpr>  s{   øè è € ð ð áˆD�$Ø�8Š8�GÑÔðõ �—’˜ "Ñ%Ô%Ñ&Ô&×/Ò/°Ñ>Ô>ð	Øðð ð ð ð ð r"   )r-  rq  ÚdiscardrÏ   r
   rm   )rz   r  s    @r    Ú_blocked_toolsets_for_roler�    sr   ø€ õ Õ.Ñ/Ô/€MØˆ~ÒÐØ×Ò˜oÑ.Ô.Ð.Ýð ð ð ð å"œ.Ñ*Ô*ðñ ô ñ ô ð r"   Úlinec                 ó    — t          | dd¦  «        }t          |¦  «        r	  ||¦  «         dS # t          $ r Y nw xY wt          |¦  «         dS )aW  Emit a human-readable progress line to the parent's console.

    Routes through ``parent_agent._safe_print`` when available so headless
    stdio hosts (ACP, gateway API) can redirect non-protocol output to
    stderr via their configured ``_print_fn``. A bare ``print()`` would
    otherwise land on stdout and corrupt JSON-RPC framing.
    Ú_safe_printN)rJ   rK   rL   Úprint)rh  r‚  Úprinters      r    Ú_emit_parent_consoler‡    sk   € õ �l M°4Ñ8Ô8€GÝ�ÑÔð ð	ØˆG�D‰MŒMˆMØˆFøÝð 	ð 	ð 	ØˆDð	øøøå	ˆ$�K„K€K€K€Ks   ¢/ ¯
<»<©r=   Ú	parent_idÚdepthÚmodelrl  Úsession_refÚ
task_indexÚ
task_countr‰  rŠ  r‹  rŒ  c                óº  ‡ ‡‡‡‡‡‡‡	‡‡‡‡‡‡‡‡‡— t          |dd¦  «        Št          |dd¦  «        Š‰s‰sdS ‰dk    r	d‰ dz   › d�ndŠ|pd                     ¦   «         ŠdŠg Šd	gŠd
t          t          t          f         fˆˆˆˆˆˆ	ˆˆˆ ˆf
d„Š	 ddt          dt          dt          fˆˆfd„Š	 ddt          dt          fˆˆˆˆˆˆˆˆˆf	d„}
ˆˆˆˆfd„}||
_        |
S )u  Build a callback that relays child agent tool calls to the parent display.

    Two display paths:
      CLI:     prints tree-view lines above the parent's delegation spinner
      Gateway: batches tool names and relays to parent's progress callback

    The identity kwargs (``subagent_id``, ``parent_id``, ``depth``, ``model``,
    ``toolsets``) are threaded into every relayed event so the TUI can
    reconstruct the live spawn tree and route per-branch controls (kill,
    pause) back by ``subagent_id``.  All are optional for backward compat â€”
    older callers that ignore them still produce a flat list on the TUI.

    Returns None if no display mechanism is available, in which case the
    child agent runs with no progress callback (identical to current behavior).
    Ú_delegate_spinnerNÚtool_progress_callbackr/   r¶   ú] r‚   é   r   r   c                  óè   •
— ‰	‰‰dœ} ‰�‰| d<   ‰�‰| d<   ‰�‰| d<   ‰�‰| d<   ‰
�t          ‰
¦  «        | d<   ‰r-‰                     d¦  «        rt          ‰d         ¦  «        | d<   ‰d	         | d
<   | S )N)r�  rŽ  rZ  r=   r‰  rŠ  r‹  rl  Ú
session_idÚchild_session_idr   Ú
tool_count)r‡   r)   rO   )ÚkwÚ_tool_countrŠ  Ú
goal_labelr‹  r‰  rŒ  r=   rŽ  r�  rl  s    €€€€€€€€€€r    Ú_identity_kwargsz8_build_child_progress_callback.<locals>._identity_kwargsT  s¶   ø€ à$Ø$Øð
ð 
ˆð
 Ð"Ø +ˆBˆ}ÑØÐ Ø'ˆBˆ{‰OØÐØˆBˆw‰KØÐØˆBˆw‰KØÐÝ! (™^œ^ˆBˆz‰Nð ð 	D˜;Ÿ?š?¨<Ñ8Ô8ð 	DÝ%(¨°\Ô)BÑ%CÔ%CˆBÐ!Ñ"Ø& qœ>ˆˆ<ÑØˆ	r"   Ú
event_typer”   r„   c                 óÎ   •— ‰sd S  ‰¦   «         }|                      |¦  «         	  ‰| |||fi |¤Ž d S # t          $ r&}t                               d|¦  «         Y d }~d S d }~ww xY w)NzParent callback failed: %s)r.  rL   r   rM   )	rœ  r”   r„   Úargsr   ÚpayloadÚer›  Ú	parent_cbs	          €€r    Ú_relayz._build_child_progress_callback.<locals>._relayl  s¡   ø€ ð ð 	ØˆFØ"Ð"Ñ$Ô$ˆØ�Š�vÑÔÐð	:ØˆI�j )¨W°dÐFÐF¸gÐFÐFÐFÐFÐFøÝð 	:ð 	:ð 	:Ý�LŠLÐ5°qÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð	:øøøs   ¦4 ´
A$¾AÁA$c                 óÂ  •	— | dk    r…‰rs‰rqt          ‰¦  «        dk    r‰d d…         dz   n‰}	 ‰                     d‰› d|› �¦  «         n2# t          $ r%}t                               d|¦  «         Y d }~nd }~ww xY w ‰dd|p‰pdi|¤Ž d S | d	k    r ‰dd|i|¤Ž d S | d
k    r ‰d
|¬¦  «         d S t          | t          ¦  «        r| }nEt                               | ¦  «        }|€)	 t          | ¦  «        }n# t          t          f$ r Y d S w xY w|t          j        k    r‰|p|pd}‰rrt          |¦  «        dk    r|d d…         dz   n|}	 ‰                     d‰› d|› d�¦  «         n2# t          $ r%}t                               d|¦  «         Y d }~nd }~ww xY w ‰d|¬¦  «         d S |t          j        k    rd S |t          j        k    r¡|p|pd}	‰rQ|	rO	 ‰                     d‰› d|	› �¦  «         n2# t          $ r%}t                               d|¦  «         Y d }~nd }~ww xY w‰rD	  ‰d‰› |	› �¦  «         n2# t          $ r%}t                               d|¦  «         Y d }~nd }~ww xY wd S ‰dxx         dz  cc<   ‰�Mt          5  t                               ‰¦  «        }
|
�‰d         |
d<   |pd|
d<   d d d ¦  «         n# 1 swxY w Y   ‰r˜|r t          |¦  «        dk    r|d d…         dz   n|pd}ddlm}  ||pd¦  «        }d‰› d|› d|› �}|r	|d|› d�z  }	 ‰                     |¦  «         n2# t          $ r%}t                               d|¦  «         Y d }~nd }~ww xY w‰ru ‰d|||¦  «         ‰                     |pd¦  «         t          ‰¦  «        ‰k    r?d                     ‰¦  «        } ‰dd‰› |› �¬¦  «         ‰                     ¦   «          d S d S d S )Núsubagent.starté7   z...Ú u   â”œâ”€ ðŸ”€ zSpinner print_above failed: %sr„   r‚   úsubagent.completeúsubagent.text©r„   u   â”œâ”€ ðŸ’­ "ú"zsubagent.thinkingrR  z Parent callback relay failed: %sr   r/   r—  Ú	last_toolé#   )Úget_tool_emojiu   â”œâ”€ z  "zsubagent.toolú, úsubagent.progressõ   ðŸ”€ )r¤  ©r§  )r‰   Úprint_aboverL   r   rM   rN   rE  rS  r)   r½   rÎ   rN  rP  rK  r@   r1   Úagent.displayr­  rŒ   rœ   Úclear)rœ  r”   r„   rž  r   Úshortr   Úeventr\   Úsummary_textÚrecr­  Úemojir‚  rÕ   Ú_BATCH_SIZEÚ_batchr¢  r™  rš  r¡  ÚprefixÚspinnerr=   s                  €€€€€€€€€r    Ú	_callbackz1_build_child_progress_callback.<locals>._callbackx  s  ø€ ð
 Ð)Ò)Ð)Øð F˜:ð Få14°Z±´À2Ò1EÐ1E�Z   ”_ uÑ,Ð,È:ð ðFØ×'Ò'Ð(G¨FÐ(GÐ(GÀÐ(GÐ(GÑHÔHÐHÐHøÝ ð Fð Fð FÝ—L’LÐ!AÀ1ÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøàˆFÐSÐS¨WÐ-H¸
Ð-HÀbÐSÈFÐSÐSÐSØˆFàÐ,Ò,Ð,ØˆFÐBÐB°ÐB¸6ÐBÐBÐBØˆFà˜Ò(Ð(ð ˆF�?¨GÐ4Ñ4Ô4Ð4ØˆFõ �j¥-Ñ0Ô0ð 	ØˆEˆEå%×)Ò)¨*Ñ5Ô5ˆEØˆ}ðÝ)¨*Ñ5Ô5�E�EøÝ"¥IÐ.ð ð ð Ø�F�Fðøøøð •MÔ/Ò/Ð/ØÐ-˜iÐ-¨2ˆDØð FÝ/2°4©y¬y¸2ª~¨~˜˜c˜r˜cœ UÑ*Ð*À4�ðFØ×'Ò'Ð(I¨FÐ(IÐ(IÀÐ(IÐ(IÐ(IÑJÔJÐJÐJøÝ ð Fð Fð FÝ—L’LÐ!AÀ1ÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøàˆFÐ&°Ð5Ñ5Ô5Ð5ØˆFà•MÔ5Ò5Ð5ØˆFà•MÔ/Ò/Ð/ð %Ð5¨Ð5°2ˆLØð F˜<ð FðFØ×'Ò'Ð(N¨FÐ(NÐ(NÀÐ(NÐ(NÑOÔOÐOÐOøÝ ð Fð Fð FÝ—L’LÐ!AÀ1ÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøàð HðHØ�IÐ1°fÐ3L¸lÐ3LÐ3LÑMÔMÐMÐMøÝ ð Hð Hð HÝ—L’LÐ!CÀQÑGÔGÐGÐGÐGÐGÐGÐGøøøøðHøøøàˆFð 	�AˆˆŒ˜!Ñˆˆ‰ØÐ"Ý'ð 7ð 7Ý'×+Ò+¨KÑ8Ô8�Ø�?Ø(3°A¬�C˜Ñ%Ø'0 °B�C˜Ñ$ð	7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ð
 ð 	Bð ð%Ý" 7™|œ|¨bÒ0Ð0ð ˜˜"˜” Ñ%Ð%à�m ð ð
 5Ð4Ð4Ð4Ð4Ð4à"�N 9 ?°Ñ3Ô3ˆEØ9�vÐ9Ð9 eÐ9Ð9¨iÐ9Ð9ˆDØð 'Ø˜˜e˜˜˜Ñ&�ðBØ×#Ò# DÑ)Ô)Ð)Ð)øÝð Bð Bð BÝ—’Ð=¸qÑAÔAÐAÐAÐAÐAÐAÐAøøøøðBøøøð ð 	ØˆF�? I¨w¸Ñ=Ô=Ð=Ø�MŠM˜)˜/ rÑ*Ô*Ð*Ý�6‰{Œ{˜kÒ)Ð)ØŸ)š) FÑ+Ô+�Ø�Ð*Ð4M¸FÐ4MÀGÐ4MÐ4MÐNÑNÔNÐNØ—’‘”���ð	ð 	ð *Ð)s›   ¯A Á
A:ÁA5Á5A:Ã)C9 Ã9DÄDÅE) Å)
FÅ3FÆFÇG3 Ç3
H"Ç=HÈH"È(H9 È9
I(ÉI#É#I(Ê/KËKËKÌL4 Ì4
M#Ì>MÍM#c                  óŽ   •— ‰r?‰r?d                      ‰¦  «        }  ‰dd‰› | › �¬¦  «         ‰                     ¦   «          dS dS dS )z<Flush remaining batched tool names to gateway on completion.r®  r¯  r°  r©  N)rœ   r´  )rÕ   r»  r¢  r¡  r¼  s    €€€€r    Ú_flushz._build_child_progress_callback.<locals>._flushè  sl   ø€ àð 	˜ð 	Ø—i’i Ñ'Ô'ˆGØˆFÐ&Ð0I¸Ð0IÀÐ0IÐ0IÐJÑJÔJÐJØ�LŠL‰NŒNˆNˆNˆNð	ð 	ð 	ð 	r"   )NNN)rJ   rP   r   rO   r   rÀ  )r�  rZ  rh  rŽ  r=   r‰  rŠ  r‹  rl  rŒ  r¾  rÀ  rº  r»  r›  r¢  r™  rš  r¡  r¼  r½  s   `  ```````  @@@@@@@@@r    Ú_build_child_progress_callbackrÁ  )  sæ  øøøøøøøøøøøøøøøøø€ õ8 �lÐ$7¸Ñ>Ô>€GÝ˜Ð&>ÀÑEÔE€Iàð ˜9ð Øˆtð (2°A¢~ ~Ð#�˜a‘Ð#Ð#Ð#Ð#¸2€FØ�*˜"×#Ò#Ñ%Ô%€Jð €KØ€FØ�#€Kð�d¥3­ 8œnð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð2 KOð
:ð 
:Ýð
:Ý$'ð
:Ý9<ð
:ð 
:ð 
:ð 
:ð 
:ð 
:ð 
:ð FJðnð nÝ"ðnÝ47ðnð nð nð nð nð nð nð nð nð nð nð nð nð nð`ð ð ð ð ð ð ð ð €IÔØÐr"   c                 ón   — t          | pd¦  «                             ¦   «                              d¦  «        S )Nr‚   ú/)rO   rP   Úrstrip)r®   s    r    Ú_normalized_runtime_urlrÅ  ó  s.   € Ýˆuˆ{˜ÑÔ×!Ò!Ñ#Ô#×*Ò*¨3Ñ/Ô/Ð/r"   Úfallback_base_urlc                 ó–  — t          |¦  «        }t          | dd¦  «        }t          |t          ¦  «        rAt          |                     d¦  «        ¦  «        }|r||k    r|                     d¦  «        r|S t          | dd¦  «        }|�=t          t          |dd¦  «        ¦  «        }|r||k    r|                     d¦  «        r|S |pdS )al  Return the base URL the parent is actually calling, not a stale attribute.

    ``parent_agent.base_url`` can still carry a leftover OpenRouter URL from an
    old config while the live OpenAI client in ``_client_kwargs`` already points
    at local Ollama. Subagents must inherit the active endpoint or they 401
    against OpenRouter with a dummy/local key.
    Ú_client_kwargsNÚbase_url)zhttp://zhttps://Úclientr‚   )rÅ  rJ   rN   r†   r)   rõ   )rh  rÆ  Úsurface_urlÚclient_kwargsÚ
kwargs_urlrÊ  Úlive_urls          r    Ú_inherit_parent_base_urlrÏ  ÷  sñ   € õ *Ð*;Ñ<Ô<€KÝ˜LÐ*:¸DÑAÔA€MÝ�-¥Ñ&Ô&ð Ý,¨]×->Ò->¸zÑ-JÔ-JÑKÔKˆ
àð	à˜kÒ)Ð)Ø×%Ò%Ð&=Ñ>Ô>ð *ð Ðå�\ 8¨TÑ2Ô2€FØÐõ +­7°6¸:ÀrÑ+JÔ+JÑKÔKˆàð	à˜KÒ'Ð'Ø×#Ò#Ð$;Ñ<Ô<ð (ð ˆOàÐ$ Ð$r"   Úmax_iterationsÚoverride_providerÚoverride_base_urlÚoverride_api_keyÚoverride_api_modeÚoverride_request_overridesÚoverride_max_tokensÚoverride_acp_commandÚoverride_acp_argsc                 ó–  ‡I‡J‡K‡L— ddl m} ddl}t          |dd¦  «        dz   }t	          ¦   «         }t          ¦   «         o||k     }|dk    r|r|nd}d| › d	|                     ¦   «         j        dd
…         › �}t          |dd¦  «        }t          d|dz
  ¦  «        }t          ¦   «         }t          |dd¦  «        }|�t          |¦  «        }n?|r)t          |d¦  «        rddlŠKˆKˆLfd„|j        D ¦   «         }nt          t          ¦  «        }|rKt          |¦  «        ŠJˆJfd„|D ¦   «         }t!          ¦   «         rt#          ||¦  «        }t%          |¦  «        }nG|r|�t%          |¦  «        }n3|rt%          t'          |¦  «        ¦  «        }nt%          t          ¦  «        }t          |dd¦  «        }t)          |t*          t,          t          f¦  «        rd„ |D ¦   «         }ng }|dk    rd„ |D ¦   «         }t+          t.                               |t3          |¦  «        z   dgz   ¦  «        ¦  «        } |dk    rd|vr|                     d¦  «         t7          |¦  «        }!t9          |||!|||¬¦  «        }"t          |dd¦  «        }#|#s*t          |d¦  «        r|j                             d¦  «        }#|pt          |dd¦  «        }$i }%t?          | |||||||$||%¬¦
  «
        ŠId}&‰Irdt@          ddfˆIfd„}'|'}&|p|j!        }(|pt          |dd¦  «        })|	p|j"        }*|	stG          ||*¦  «        }*|
p|#}+t          |dd¦  «        pd},|)pd $                    ¦   «          %                    ¦   «         }-|�|}.n0|-dv rdd l&m'}/  |/|(¦  «        }.n|)|,k    rd}.nt          |d!d¦  «        }.|r8ddl(}0|0 )                    |¦  «        stT           +                    d"|¦  «         d}d}|pt          |d#d¦  «        }1t+          |�|nt          |d$g ¦  «        pg ¦  «        }2|r|sd}1g }2|rd%})d&}.t          |d'd¦  «        }3|3}4	 |                     d(¦  «        }5|5s|5d)u r1dd*l,m-}6  |6|5¦  «        }7|7�|7}4ntT           +                    d+|5¦  «         n2# t\          $ r%}8tT           /                    d,|8¦  «         Y d}8~8nd}8~8ww xY wt          |d-d¦  «        pd}9t          |d.d¦  «        }:t          |d/d¦  «        };t          |d0d¦  «        }<t          |d1d¦  «        }=t          |d2d)¦  «        }>t          |d3d¦  «        pd}?t          |d4d¦  «        }@|rd}:d};d}<d}=d)}>d}?|�|nt          |d5d¦  «        }Ai }Bt)          |At`          ¦  «        r|A|Bd5<   dd6l1m2}C  |C¦   «         5   |d\i d7|*“d|+“d|(“d|)“d!|.“d#|1“d$|2“d8|“d'|4“d9t          |d9d¦  «        “d:|9“d|“d| “d;d<“d=|"“d>d?| › d@�“dAdB“dCd<“dDd<“dEd“dF|&“dGt          |dHd¦  «        “dIt          |dJd¦  «        “d.|:“d/|;“d0|<“d1|=“d2|>“d3|?“dK|rt/          |pi ¦  «        nt/          t          |dKi ¦  «        pi ¦  «        “d4|@“dL‰I“dMd“|B¤Ž}Dddd¦  «         n# 1 swxY w Y   t          |dNd¦  «        |D_3        t          |DdJd¦  «        pd|%dJ<   ||D_4        ||D_5        ||D_6        ||D_7        ||D_8        t          |dOd¦  «        pd|D_9        t          |dJd¦  «        }E|Ert          |DdPd¦  «        �
|E|Dj:        dQ<   tw          |)||*¦  «        }F|F�|F|D_<        t          |dR¦  «        rbt          |dSd¦  «        }G|Gr5|G5  |j=                             |D¦  «         ddd¦  «         n# 1 swxY w Y   n|j=                             |D¦  «         ‰IrA	  ‰IdT|¬U¦  «         n2# t\          $ r%}8tT           /                    dV|8¦  «         Y d}8~8nd}8~8ww xY w	 ddWl>m?}H  |HdXt          |dJd¦  «        t          |dOd¦  «        pd|t          |DdJd¦  «        |||¬Y¦  «         n,# t\          $ r tT           /                    dZd<¬[¦  «         Y nw xY w|DS )]a«  
    Build a child AIAgent on the main thread (thread-safe construction).
    Returns the constructed child agent without running it.

    When override_* params are set (from delegation config), the child uses
    those credentials instead of inheriting from the parent.  This enables
    routing subagents to a different provider:model pair (e.g. cheap/fast
    model on OpenRouter while the parent runs on Nous Portal).
    r   )ÚAIAgentNÚ_delegate_depthr/   rû   rú   zsa-Ú-é   Ú_subagent_idÚenabled_toolsetsÚvalid_tool_namesc                 óB   •— h | ]}‰                      |¦  «        xŠ®‰’ŒS r8   )Úget_toolset_for_tool)ri   r   Úmodel_toolsÚtss     €€r    rw  z%_build_child_agent.<locals>.<setcomp>^  s<   ø€ ð 
ð 
ð 
àØ!×6Ò6°tÑ<Ô<Ð<�ÐIð àIÐIÐIr"   c                 ó   •— g | ]}|‰v ¯|‘Œ	S r9   r9   )ri   rs  Úexpanded_parents     €r    rp   z&_build_child_agent.<locals>.<listcomp>k  s#   ø€ ÐFÐFÐF °°oÐ1EÐ1E˜!Ð1EÐ1EÐ1Er"   Údisabled_toolsetsc                 ó,   — g | ]}t          |¦  «        ‘ŒS r9   rÊ   ©ri   r   s     r    rp   z&_build_child_agent.<locals>.<listcomp>  s   € ÐHÐHÐH¨D�c $™iœiÐHÐHÐHr"   c                 ó   — g | ]
}|d k    ¯|‘ŒS )rn  r9   ré  s     r    rp   z&_build_child_agent.<locals>.<listcomp>…  s)   € ð 
ð 
ð 
Ø°4¸<Ò3GÐ3GˆDÐ3GÐ3GÐ3Gr"   rx  rn  rW  Úapi_keyrÈ  r‹  rˆ  r\   r   c                 ó�   •— | sd S 	  ‰d| ¦  «         d S # t           $ r&}t                               d|¦  «         Y d }~d S d }~ww xY w)NrQ  z(Child thinking callback relay failed: %s©rL   r   rM   )r\   r   Úchild_progress_cbs     €r    Ú_child_thinkingz+_build_child_agent.<locals>._child_thinking¿  sy   ø€ Øð Ø�ðLØ!Ð! +¨tÑ4Ô4Ð4Ð4Ð4øÝð Lð Lð LÝ—’ÐGÈÑKÔKÐKÐKÐKÐKÐKÐKÐKøøøøðLøøøs   ‡ •
AŸA Á AÚproviderr‚   >   únous-portalÚnousÚnousresearch)Únous_api_modeÚapi_modezUIgnoring acp_command=%r: binary not found on PATH; falling back to default transport.Úacp_commandÚacp_argszcopilot-acpÚchat_completionsÚreasoning_configÚreasoning_effortF)Úparse_reasoning_effortzAUnknown delegation.reasoning_effort '%s', inheriting parent levelz.Could not load delegation reasoning_effort: %sÚ_fallback_chainÚproviders_allowedÚproviders_ignoredÚproviders_orderÚprovider_sortÚprovider_require_parametersÚprovider_data_collectionÚopenrouter_min_coding_scoreÚ
max_tokens©Údelegated_child_contextrÉ  rÐ  Úprefill_messagesÚfallback_modelÚ
quiet_modeTÚephemeral_system_promptÚ
log_prefixú
[subagent-r·   ÚplatformÚsubagentÚskip_context_filesÚskip_memoryÚclarify_callbackÚthinking_callbackÚ
session_dbÚ_session_dbÚparent_session_idr•  Úrequest_overridesr‘  Úiteration_budgetÚ	_print_fnÚ_current_turn_idÚ_session_init_model_configÚ_delegate_fromÚ_active_childrenÚ_active_children_lockzsubagent.spawn_requestedr©  z spawn_requested relay failed: %s©Úinvoke_hookÚsubagent_start)r  Úparent_turn_idÚparent_subagent_idr–  Úchild_subagent_idÚ
child_roleÚ
child_goalz%subagent_start hook invocation failed©Úexc_infor9   )@Ú	run_agentrÚ  ÚuuidrJ   r  r  Úuuid4Úhexrå   r(   r-  Úhasattrrã  rà  ÚDEFAULT_TOOLSETSr6  r#  r;  r|  rÏ   rN   r‡   Útupler†   Úfromkeysr�  rŒ   rk  r^  rÈ  r)   rÁ  rO   r‹  rÉ  rÏ  rP   rÐ   Úhermes_cli.providersrô  ÚshutilÚwhichr   r   Úhermes_constantsrû  rL   rM   rã   Úagent.delegation_contextr  r  rÛ  Ú_delegate_rolerÞ  Ú_parent_subagent_idÚ_subagent_goalÚ_parent_turn_idr  Ú_resolve_child_credential_poolÚ_credential_poolr  Úhermes_cli.lifecycler  )Mr�  rZ  r[  rl  r‹  rÐ  rŽ  rh  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rz   rÚ  Ú_uuidrY  Ú	max_spawnÚorchestrator_okÚeffective_roler=   r"  Ú	tui_depthÚdelegation_cfgÚparent_enabledr*  r7  Úraw_parent_disabledÚinherited_disabledÚchild_disabled_toolsetsÚworkspace_hintÚchild_promptÚparent_api_keyÚeffective_model_for_cbÚchild_session_refÚchild_thinking_cbrï  Úeffective_modelÚeffective_providerÚeffective_base_urlÚeffective_api_keyÚ_parent_providerÚ_effective_provider_normÚeffective_api_moderô  Ú_shutilÚeffective_acp_commandÚeffective_acp_argsÚparent_reasoningÚchild_reasoningÚdelegation_effortrû  rÀ   rS   Úparent_fallbackÚchild_providers_allowedÚchild_providers_ignoredÚchild_providers_orderÚchild_provider_sortÚ!child_provider_require_parametersÚchild_provider_data_collectionÚ!child_openrouter_min_coding_scoreÚchild_max_tokensÚchild_optional_kwargsr  ÚchildÚ
parent_sidÚ
child_poolÚlockÚ_invoke_hookrî  ræ  rã  rä  sM                                                                            @@@@r    Ú_build_child_agentrh    sW  øøøø€ ðB "Ð!Ð!Ð!Ð!Ð!ØÐÐÐõ ˜,Ð(9¸1Ñ=Ô=ÀÑA€KÝ$Ñ&Ô&€IÝ/Ñ1Ô1ÐM°kÀIÒ6M€OØ" nÒ4Ð4¸Ð4�T�TÈv€Nð =˜
Ð<Ð< U§[¢[¡]¤]Ô%6°r¸°rÔ%:Ð<Ð<€KÝ  ¨~¸tÑDÔDÐÝ�A�{ Q‘Ñ'Ô'€Iå!‘^”^€Nõ ˜\Ð+=¸tÑDÔD€NØÐ!Ý˜nÑ-Ô-ˆˆØ	ð 
0�' ,Ð0BÑCÔCð 
0àÐÐÐð
ð 
ð 
ð 
ð 
à$Ô5ð
ñ 
ô 
ˆˆõ Õ.Ñ/Ô/ˆàð @õ 2°/ÑBÔBˆØFÐFÐFÐF XÐFÑFÔFˆÝ$Ñ&Ô&ð 	Ý:Ø ñô ˆNõ .¨nÑ=Ô=ˆˆØ	ð @˜.Ð4Ý-¨nÑ=Ô=ˆˆØ	ð @Ý-­f°_Ñ.EÔ.EÑFÔFˆˆå-Õ.>Ñ?Ô?ˆõ " ,Ð0CÀTÑJÔJÐÝÐ%­­eµSÐ'9Ñ:Ô:ð  ØHÐHÐ4GÐHÑHÔHÐÐàÐØ˜Ò'Ð'ð
ð 
Ø/ð
ñ 
ô 
Ðõ #Ý�ŠØÕ!;¸NÑ!KÔ!KÑKÈxÈjÑXñ	
ô 	
ñô Ðð ˜Ò'Ð'¨LÀÐ,NÐ,NØ×Ò˜lÑ+Ô+Ð+å,¨\Ñ:Ô:€NÝ-ØØØ%ØØ!Øðñ ô €Lõ ˜\¨9°dÑ;Ô;€NØð D¥¨Ð6FÑ GÔ Gð DØ%Ô4×8Ò8¸ÑCÔCˆð #ÐJ¥g¨l¸GÀTÑ&JÔ&JÐð
 )+ÐÝ6ØØØØØØ$ØØ$ØØ%ðñ ô Ðð$ ÐØð 
,ð	L¥#ð 	L¨$ð 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð ,Ðð Ð1˜|Ô1€OØ*ÐU­g°lÀJÐPTÑ.UÔ.UÐØ*ÐC¨lÔ.CÐØð XÝ5°lÐDVÑWÔWÐØ(Ð:¨NÐõ ˜|¨Z¸Ñ>Ô>ÐDÀ"ÐØ 2Ð 8°b×?Ò?ÑAÔA×GÒGÑIÔIÐØÐ$Ø.ÐÐØ	!Ð%LÐ	LÐ	LØ6Ð6Ð6Ð6Ð6Ð6à*˜]¨?Ñ;Ô;ÐÐØ	Ð/Ò	/Ð	/Ø!ÐÐå$ \°:¸tÑDÔDÐð ð 
%Ø Ð Ð Ð à�}Š}Ð1Ñ2Ô2ð 	%Ý�NŠNð5à$ñô ð ð
 $(Ð Ø $ÐØ0ð µGØ�m Tñ5ô 5Ðõ àÐ(ð 	Ðå�l J°Ñ3Ô3Ð9°rñô Ðð ð  Ð!5ð  Ø $ÐØÐàð 0ð +ÐØ/Ðõ ˜|Ð-?ÀÑFÔFÐØ&€OðLð +×.Ò.Ð/AÑBÔBÐØð 
	Ð 1°UÐ :Ð :Ø?Ð?Ð?Ð?Ð?Ð?à+Ð+Ð,=Ñ>Ô>ˆFØÐ!Ø"(��å—’ØWØ%ñô ð øøõ ð Lð Lð LÝ�ŠÐEÀsÑKÔKÐKÐKÐKÐKÐKÐKøøøøðLøøøõ ˜lÐ,=¸tÑDÔDÐLÈ€Oõ & lÐ4GÈÑNÔNÐÝ% lÐ4GÈÑNÔNÐÝ# LÐ2CÀTÑJÔJÐÝ! ,°ÀÑFÔFÐÝ(/ØÐ3°Uñ)ô )Ð%õ &-ØÐ0°$ñ&ô &ð &à	ð #õ )0°Ð>[Ð]aÑ(bÔ(bÐ%Øð ,Ø"&ÐØ"&ÐØ $ÐØ"ÐØ,1Ð)Ø)+Ð&ð Ð*ð 	Ðå�\ <°Ñ6Ô6ð ð
 -/ÐÝÐ"¥CÑ(Ô(ð ?Ø.>Ð˜lÑ+à@Ð@Ð@Ð@Ð@Ð@à	 Ð	 Ñ	"Ô	"ð )
ð )
Ø�ð (
ð (
ð (
Ø'Ð'ð(
à%Ð%ð(
ð "�/ð(
ð (Ð'ð	(
ð
 (Ð'ð(
ð .Ð-ð(
ð (Ð'ð(
ð *˜>ð(
ð -˜_ð(
õ % \Ð3EÀtÑLÔLÐLð(
ð +˜?ð(
ð ,˜^ð(
ð 6Ð5ð(
ð �tð(
ð  %1 Lð!(
ð" 2 JÐ1Ð1Ð1Ð1ð#(
ð$  �Zð%(
ð&  $˜tð'(
ð( ˜ð)(
ð* "˜Tð+(
ð, 0Ð/ð-(
õ. ˜|¨]¸DÑAÔAÐAð/(
õ0 & l°LÀ$ÑGÔGÐGð1(
ð2 6Ð5ð3(
ð4 6Ð5ð5(
ð6 2Ð1ð7(
ð8 .Ð-ð9(
ð: )JÐ(Ið;(
ð< &DÐ%Cð=(
ðB %ðP•Ð/Ð5°2Ñ6Ô6Ð6å�' ,Ð0CÀRÑHÔHÐNÈBÑOÔOøðE(
ðH )JÐ(IðI(
ðJ $5Ð#4ðK(
ðL "˜TØ#ðO(
ð (
ˆð)
ð )
ð )
ñ )
ô )
ð )
ð )
ð )
ð )
ð )
ð )
øøøð )
ð )
ð )
ð )
õT ˜l¨K¸Ñ>Ô>€E„Oõ '.¨e°\À2Ñ&FÔ&FÐ&LÈ"Ð�lÑ#à'€EÔð *€EÔð %€EÔØ 2€EÔØ€EÔÝ# LÐ2DÀbÑIÔIÐOÈR€EÔõ
 ˜ |°TÑ:Ô:€JØð H•g˜eÐ%AÀ4ÑHÔHÐTØ=GˆÔ(Ð)9Ñ:õ 0Ø˜LÐ*<ñô €Jð ÐØ!+ˆÔõ ˆ|Ð/Ñ0Ô0ð 8Ý�|Ð%<¸dÑCÔCˆØð 	8Øð <ð <ØÔ-×4Ò4°UÑ;Ô;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <øð Ô)×0Ò0°Ñ7Ô7Ð7ð
 ð Bð	BØÐÐ8À$ÐGÑGÔGÐGÐGøÝð 	Bð 	Bð 	BÝ�LŠLÐ;¸SÑAÔAÐAÐAÐAÐAÐAÐAøøøøð	BøøøðMØDÐDÐDÐDÐDÐDØˆØÝ% l°LÀ$ÑGÔGÝ" <Ð1CÀRÑHÔHÐNÈBØ1Ý$ U¨L¸$Ñ?Ô?Ø)Ø%Øð		
ñ 		
ô 		
ð 		
ð 		
øõ ð Mð Mð MÝ�ŠÐ<ÀtˆÑLÔLÐLÐLÐLðMøøøð €Lsi   Ð0AQ= Ñ=
R,ÒR'Ò'R,Ö
CY$Ù$Y(Ù+Y(Ý]*Ý*].Ý1].Þ^! Þ!
_Þ+_ß_ßA` à&aáarc  Útimeout_secondsÚduration_secondsÚworker_threadc                 óø  ‡*— 	 ddl m} ddl}ddl}ddl}	ddl}
 |¦   «         }|dz  }	 |                     dd¬¦  «         n# t          $ r Y dS w xY wt          | dd¦  «        pd|› �}|j         	                    ¦   «          
                    d	¦  «        }|d
|› d|› d�z  }g Š*dRdt          ddfˆ*fd„} |d¦  «          |d|j         	                    ¦   «                              ¦   «         › �¦  «          |d¦  «          |d¦  «          |d|› �¦  «          |d|› �¦  «          |d|› d�¦  «          |d|d›d�¦  «          |d¦  «          |d¦  «         |pd                     ¦   «         }t          |¦  «        dk    r|dd…         dz   } ||pd¦  «          |d¦  «          |d¦  «         dD ]`}	 t          | |d¦  «        }t          |t          ¦  «        r|d k    r	  |d!|› d"|›�¦  «         ŒB# t          $ r  |d!|› d#�¦  «         Y Œ]w xY w |d¦  «          |d$¦  «         t          | d%d¦  «        } |d&|›�¦  «         t          | d'd¦  «        }|rH |d(t          |¦  «        › �¦  «         	  |d)t!          |¦  «        › �¦  «         n# t          $ r Y nw xY w |d¦  «          |d*¦  «         	 t          | d+d¦  «        pt          | d,d¦  «        pd} |d-t          |t          ¦  «        r"t          |                     d.¦  «        ¦  «        nd/› �¦  «          |d0t          |t          ¦  «        rt          |¦  «        nd/› �¦  «         n&# t          $ r} |d1|› d2�¦  «         Y d}~nd}~ww xY w	 t          | d3d¦  «        }|�dt%          j        |t          ¬4¦  «        } |d5t          |¦  «        › �¦  «          |d6t          |                     d.¦  «        ¦  «        › �¦  «         n&# t          $ r} |d7|› d2�¦  «         Y d}~nd}~ww xY w |d¦  «          |d8¦  «         	 |                      ¦   «         }|                     ¦   «         D ]\  }} |d!|› d"|›�¦  «         Œn&# t          $ r} |d9|› d2�¦  «         Y d}~nd}~ww xY w |d¦  «          |d:¦  «         |�£|                     ¦   «         r�|                     ¦   «         }|                     |j        ¦  «        }|�S|	                     |¦  «        }|D ]:} |                      ¦   «                              d;¦  «        D ]}! |d!|!› �¦  «         ŒŒ;n% |d<¦  «         n|€ |d=¦  «         n |d>¦  «          |d¦  «          |d?¦  «         	 |                     ¦   «         }d@„ |
                     ¦   «         D ¦   «         }"|r|j        nd}#d}$|                     ¦   «         D ]Ì\  }%}&|%|#k    rŒ|$dAk    r$ |dBt          |¦  «        |$z
  dCz
  › dD�¦  «          n—|"                     |%¦  «        }'|'r|'j        ndE|%› �}(|'r	|'j        rdFnd}) |dG|(› |)› dH�¦  «         |	                     |&¦  «        D ]:} |                      ¦   «                              d;¦  «        D ]}! |dI|!› �¦  «         ŒŒ;|$dCz  }$ŒÍn&# t          $ r} |dJ|› d2�¦  «         Y d}~nd}~ww xY w |d¦  «          |dK¦  «          |dL¦  «          |dM¦  «          |dN¦  «          |dO¦  «         |                      d; !                    ‰*¦  «        d.¬P¦  «         t          |¦  «        S # t          $ r&}tD           #                    dQ|¦  «         Y d}~dS d}~ww xY w)Sa,  Write a structured diagnostic dump for a subagent that timed out
    before making any API call.

    See issue #14726: users hit "subagent timed out after 300s with no response"
    with zero API calls and no way to inspect what happened. This helper
    writes a dedicated log under ``~/.hermes/logs/subagent-<sid>-<ts>.log``
    capturing the child's config, system-prompt / tool-schema sizes, activity
    tracker snapshot, and the worker thread's Python stack at timeout.

    Returns the absolute path to the diagnostic file, or None on failure.
    r   )Úget_hermes_homeNÚlogsT©ÚparentsÚexist_okrÞ  Úidxz%Y%m%d_%H%M%Szsubagent-timeout-rÜ  z.logr‚   r‚  r   c                 ó2   •— ‰                      | ¦  «         d S r8   )rŒ   )r‚  Úliness    €r    Ú_wz-_dump_subagent_timeout_diagnostic.<locals>._wä  s   ø€ Ø�LŠL˜ÑÔÐÐÐr"   u.   # Subagent timeout diagnostic â€” issue #14726z# Generated: z
## Timeoutz  task_index:        z  subagent_id:       z  configured_timeout: Úsz  actual_duration:   z.2fz## Goaléè  z ...[truncated]ú(empty)z## Child config)r‹  rð  rõ  rÉ  rÐ  r	  r  r  r  r5  rÛ  rÉ  ú  z: z: <unreadable>z## Toolsetsrß  z  enabled_toolsets:  rà  z  loaded tool count: z  loaded tools:      z## Prompt / schema sizesr
  Úsystem_promptz  system_prompt_bytes: úutf-8zn/az  system_prompt_chars: z  system_prompt: <error: Ú>r,  r"  z  tool_schema_count: z  tool_schema_bytes: z  tool_schema: <error: z## Activity summaryz   <get_activity_summary failed: z!## Worker thread stack at timeoutr™   z  <worker frame not available>z  <no worker thread handle>z   <worker thread already exited>z## All thread stacks at timeoutc                 ó,   — i | ]}|j         ¯	|j         |“ŒS r9   )Úident)ri   Úths     r    rl   z5_dump_subagent_timeout_diagnostic.<locals>.<dictcomp>I  s3   € ð ð ð Ø!#ÀÄðØ”˜"ðð ð r"   r@  z  <r/   z more threads omitted>zident=z daemonz  --- z ---z    z  <all-thread dump failed: z## NoteszG  This file is written ONLY when a subagent times out with 0 API calls.zI  0-API-call timeouts mean the child never reached its first LLM request.zG  Common causes: oversized prompt rejected by provider, transport hang,z<  credential resolution stuck. See issue #14726 for context.©Úencodingz+Subagent timeout diagnostic dump failed: %s)r‚   )$r3  rm  ÚdatetimeÚsysÚ	tracebackÚ	threadingÚmkdirrL   rJ   ÚnowÚstrftimerO   Ú	isoformatrP   r‰   rN   rÏ   Úencoderš   r›   Úget_activity_summaryrm   Úis_aliveÚ_current_framesr)   r~  Úformat_stackrÄ  ÚsplitÚ	enumerater   ÚdaemonÚ
write_textrœ   r   r   )+rc  r�  ri  rj  rk  rZ  rm  Ú_dtÚ_sysÚ
_tracebackÚ
_threadingÚhermes_homeÚlogs_dirr=   rä  Ú	dump_pathru  Ú_goal_previewÚattrr,   ÚenabledÚ
tool_namesÚ
sys_promptrS   Útools_schemaÚ_schema_jsonrÕ   rj   rk   ÚframesÚworker_frameÚstackÚ
frame_lineÚsubÚby_identÚworker_identÚdumpedr~  Úframer  r   r‘  rt  s+                                             @r    Ú!_dump_subagent_timeout_diagnosticrª  ½  sz
  ø€ ð(YØ4Ð4Ð4Ð4Ð4Ð4ØÐÐÐØÐÐÐØ&Ð&Ð&Ð&Ø&Ð&Ð&Ð&à%�oÑ'Ô'ˆØ Ñ'ˆð	Ø�NŠN 4°$ˆNÑ7Ô7Ð7Ð7øÝð 	ð 	ð 	Ø�4�4ð	øøøõ ˜e ^°TÑ:Ô:ÐPÐ>PÀJÐ>PÐ>PˆØŒ\×ÒÑÔ×(Ò(¨Ñ9Ô9ˆØÐI°;ÐIÐIÀÐIÐIÐIÑIˆ	àˆð	ð 	•Sð 	 $ð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆÐ;Ñ<Ô<Ð<Ø
ˆÐ;˜3œ<×+Ò+Ñ-Ô-×7Ò7Ñ9Ô9Ð;Ð;Ñ<Ô<Ð<Ø
ˆˆ2‰ŒˆØ
ˆˆ<ÑÔÐØ
ˆÐ/ :Ð/Ð/Ñ0Ô0Ð0Ø
ˆÐ0 ;Ð0Ð0Ñ1Ô1Ð1Ø
ˆÐ6 OÐ6Ð6Ð6Ñ7Ô7Ð7Ø
ˆÐ:Ð#3Ð:Ð:Ð:Ð:Ñ;Ô;Ð;Ø
ˆˆ2‰Œˆà
ˆˆ9‰ŒˆØ˜ ×*Ò*Ñ,Ô,ˆÝˆ}ÑÔ Ò$Ð$Ø)¨%¨4¨%Ô0Ð3DÑDˆMØ
ˆˆ=Ð%˜IÑ&Ô&Ð&Ø
ˆˆ2‰Œˆà
ˆÐÑÔÐð
ð 	.ð 	.ˆDð
.Ý˜e T¨4Ñ0Ô0�å˜c¥3Ñ'Ô'ð ¨D°JÒ,>Ð,>ØØ�Ð'˜Ð'Ð' Ð'Ð'Ñ(Ô(Ð(Ð(øÝð .ð .ð .Ø�Ð,˜Ð,Ð,Ð,Ñ-Ô-Ð-Ð-Ð-ð.øøøà
ˆˆ2‰Œˆà
ˆˆ=ÑÔÐÝ˜%Ð!3°TÑ:Ô:ˆØ
ˆÐ. 7Ð.Ð.Ñ/Ô/Ð/Ý˜UÐ$6¸Ñ=Ô=ˆ
Øð 	ØˆBÐ8¥s¨:¡¤Ð8Ð8Ñ9Ô9Ð9ðØ�Ð?­6°*Ñ+=Ô+=Ð?Ð?Ñ@Ô@Ð@Ð@øÝð ð ð Ø�ðøøøà
ˆˆ2‰Œˆà
ˆÐ%Ñ&Ô&Ð&ð	3Ý  Ð(AÀ4ÑHÔHð Ý˜5 /°4Ñ8Ô8ðàð ð ˆBÐtÍJÐWaÕcfÑLgÔLgÐ)r­¨Z×->Ò->¸wÑ-GÔ-GÑ)HÔ)HÐ)HÐmrÐtÐtÑuÔuÐuØˆBÐd½JÀzÕSVÑ<WÔ<WÐ)b­¨Z©¬¨Ð]bÐdÐdÑeÔeÐeÐeøÝð 	3ð 	3ð 	3ØˆBÐ1¨3Ð1Ð1Ð1Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2øøøøð	3øøøð	1Ý" 5¨'°4Ñ8Ô8ˆLØÐ'Ý#œz¨,ÅÐDÑDÔD�Ø�Ð>­3¨|Ñ+<Ô+<Ð>Ð>Ñ?Ô?Ð?Ø�ÐN­3¨|×/BÒ/BÀ7Ñ/KÔ/KÑ+LÔ+LÐNÐNÑOÔOÐOøøÝð 	1ð 	1ð 	1ØˆBÐ/¨Ð/Ð/Ð/Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0øøøøð	1øøøà
ˆˆ2‰Œˆà
ˆÐ Ñ!Ô!Ð!ð	:Ø×0Ò0Ñ2Ô2ˆGØŸš™œð $ð $‘��1Ø��?˜�?�?˜Q�?�?Ñ#Ô#Ð#Ð#ð$øåð 	:ð 	:ð 	:ØˆBÐ8°#Ð8Ð8Ð8Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð	:øøøà
ˆˆ2‰Œˆà
ˆÐ.Ñ/Ô/Ð/ØÐ$¨×)?Ò)?Ñ)AÔ)AÐ$Ø×)Ò)Ñ+Ô+ˆFØ!Ÿ:š: mÔ&9Ñ:Ô:ˆLØÐ'Ø"×/Ò/°Ñ=Ô=�Ø"'ð 'ð '�JØ)×0Ò0Ñ2Ô2×8Ò8¸Ñ>Ô>ð 'ð '˜Ø˜˜: ˜:˜:™œ˜˜ð'ð'ð �Ð3Ñ4Ô4Ð4Ð4ØÐ"ØˆBÐ,Ñ-Ô-Ð-Ð-àˆBÐ1Ñ2Ô2Ð2Ø
ˆˆ2‰Œˆð 	ˆÐ,Ñ-Ô-Ð-ð	5Ø×)Ò)Ñ+Ô+ˆFðð Ø'1×';Ò';Ñ'=Ô'=ðñ ô ˆHð 3@ÐI˜=Ô.Ð.ÀTˆLØˆFØ &§¢¡¤ð ð ‘��uØ˜LÒ(Ð(ØØ˜R’<�<Ø�BÐM�S ™[œ[¨6Ñ1°AÑ5ÐMÐMÐMÑNÔNÐNØ�EØ—\’\ %Ñ(Ô(�Ø"$Ð:�r”w�wÐ*:°5Ð*:Ð*:�Ø')Ð@¨b¬iÐ@˜˜¸b�Ø�Ð.˜DÐ. &Ð.Ð.Ð.Ñ/Ô/Ð/Ø",×"9Ò"9¸%Ñ"@Ô"@ð )ð )�JØ)×0Ò0Ñ2Ô2×8Ò8¸Ñ>Ô>ð )ð )˜Ø˜˜< #˜<˜<Ñ(Ô(Ð(Ð(ð)à˜!‘��øøÝð 	5ð 	5ð 	5ØˆBÐ3¨SÐ3Ð3Ð3Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4øøøøð	5øøøà
ˆˆ2‰Œˆà
ˆˆ:‰ŒˆØ
ˆÐTÑUÔUÐUØ
ˆÐVÑWÔWÐWØ
ˆÐTÑUÔUÐUØ
ˆÐIÑJÔJÐJà×Ò˜TŸYšY uÑ-Ô-¸ÐÑ@Ô@Ð@Ý�9‰~Œ~ÐøÝð ð ð Ý�ŠÐDÀcÑJÔJÐJØˆtˆtˆtˆtˆtøøøøðøøøs1  ƒ%]	 ©A Á ]	 Á
AÁ]	 ÁAÁE)]	 Æ9>G8Ç7]	 Ç8HÈ]	 ÈHÈA&]	 É;J Ê]	 Ê
J$Ê!]	 Ê#J$Ê$]	 Ê>BM Í]	 Í
M=Í$M8Í3]	 Í8M=Í=]	 ÎA7O9 Ï8]	 Ï9
PÐPÐ]	 ÐPÐ]	 Ð6?Q6 Ñ5]	 Ñ6
RÒ RÒ]	 ÒRÒC-]	 ÖD Z( Ú']	 Ú(
[Ú2[Û]	 Û[ÛA=]	 Ý	
]9Ý]4Ý4]9c                 ó€  — 	 ddl m} ddl} |dd¦  «        }|                     dd¬¦  «         |j                             ¦   «                              d¦  «        }|d	| › d
|› d�z  }|                     |d¬¦  «         t          |¦  «        S # t          $ r&}t           
                    d|¦  «         Y d}~dS d}~ww xY w)a  Write a subagent's full summary to the delegation cache and return path.

    Mirrors web_extract's ``_store_full_text``: the file lands in
    ``cache/delegation`` which is mounted read-only into remote backends
    (Docker/Modal/SSH) via ``credential_files._CACHE_DIRS``, so the parent's
    terminal/``read_file`` tools can page through the complete text on any
    backend. Returns the absolute path, or None on failure (best-effort:
    the trimmed head+tail is still returned to the parent regardless).
    r   )Úget_hermes_dirNzcache/delegationÚdelegation_cacheTro  z%Y%m%d_%H%M%S_%fzsubagent-summary-rÜ  z.txtr{  r€  z,Failed to spill subagent summary to file: %s)r3  r¬  r‚  r†  r‡  rˆ  r’  rO   rL   r   rM   )r�  rÕ   r¬  r“  Ú	cache_dirrä  r£   rS   s           r    Ú_spill_summary_to_filer¯  m  sñ   € ðØ3Ð3Ð3Ð3Ð3Ð3ØÐÐÐà"�NÐ#5Ð7IÑJÔJˆ	Ø�Š ¨tˆÑ4Ô4Ð4ØŒ\×ÒÑÔ×(Ò(Ð);Ñ<Ô<ˆØÐD¨zÐDÐD¸BÐDÐDÐDÑDˆØ�Š˜¨'ˆÑ2Ô2Ð2Ý�4‰yŒyÐøÝð ð ð Ý�ŠÐCÀSÑIÔIÐIØˆtˆtˆtˆtˆtøøøøðøøøs   ‚B
B Â
B=ÂB8Â8B=Úcapc           	      óà  — t          | ¦  «        }t          |dz  ¦  «        }||z
  }| d|…         }| | d…         }|                     d¦  «        }||dz  k    r
|d|…         }|                     d¦  «        }d|cxk    r	|dz  k     rn n||dz   d…         }t	          || ¦  «        }	ddd	t          |¦  «        d
›dt          |¦  «        d
›d|d
›d�g}
|	rM|                     d¦  «        dz   }|
                     d|	› �¦  «         |
                     d|	› d|› d�¦  «         n|
                     d¦  «         |
                     d¦  «         |dz   |z   d                     |
¦  «        z   }||	fS )a  Return (model_text, spill_path) for one over-budget summary.

    Mirrors web_extract's ``_truncate_with_footer``: keep a head+tail window
    (~75% head / ~25% tail, snapped to line boundaries) so the subagent's
    opening AND its closing (outcomes / files-changed / issues, which live at
    the end) both survive, spill the full text to disk, and append a footer
    telling the parent exactly how much it's seeing and the precise
    ``read_file offset=`` to page into the omitted middle. Deterministic.
    g      è?Nr™   r=  r   r/   r‚   uE   â”€â”€â”€â”€â”€â”€â”€â”€ [SUMMARY TRUNCATED] â”€â”€â”€â”€â”€â”€â”€â”€zShowing Ú,z chars (head) + z chars (tail) of u:    total â€” trimmed to protect the parent's context window.rV  zFull subagent output saved to: z,To read the omitted middle: read_file path="z	" offset=zV limit=200  (the file is the complete summary; raise/lower offset to page through it).zWFull output could not be stored to disk; the head+tail above is all that was preserved.uo   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u+   

[... middle omitted â€” see footer ...]

)r‰   rã   ÚrfindÚfindr¯  ÚcountrŒ   rœ   )rÕ   r°  r�  Úoriginal_lenÚhead_budgetÚtail_budgetr÷   rŽ   ÚnlÚ
spill_pathÚfooter_linesÚmiddle_start_lineÚ
model_texts                r    Ú_trim_summary_with_footerr¾  †  s  € õ �w‘<”<€LÝ�c˜D‘j‘/”/€KØ˜Ñ#€Kà�<�K�<Ô €DØ�K�<�=�=Ô!€Dà	�Š�DÑ	Ô	€BØ	ˆK˜#ÑÒÐØ�C�R�CŒyˆà	�Š�4‰Œ€BØˆBÐ"Ð"Ò"Ð"�˜sÑ"Ò"Ð"Ð"Ð"Ð"Ø�B˜‘F�G�GŒ}ˆå'¨
°GÑ<Ô<€Jð 	Ø7ð	Y•3�t‘9”9ÐKð 	Yð 	Yµ°D±	´	ÐKð 	Yð 	YØÐXð	Yð 	Yð 	Yð€Lð ð 
à ŸJšJ tÑ,Ô,¨qÑ0ÐØ×ÒÐJ¸jÐJÐJÑKÔKÐKØ×Òð@¸:ð @ð @Ø'ð@ð @ð @ñ	
ô 	
ð 	
ð 	
ð 	×Òð&ñ	
ô 	
ð 	
ð ×Ò˜
Ñ#Ô#Ð#àÐIÑIÈDÑPÐSW×S\ÒS\Ð]iÑSjÔSjÑj€JØ�zÐ!Ð!r"   Ún_summariesc                 óR  — 	 t          | dd¦  «        }t          |dd¦  «        }t          |t          ¦  «        r|dk    rdS t          | dd¦  «        }t          |t          t          f¦  «        r|dk     rd}t          |dd¦  «        pd}|t          |¦  «        z
  t          |¦  «        z
  }|dk    rt          S t          |t
          z  ¦  «        }|t          d|¦  «        z  }|dz  }	t          t          |	¦  «        S # t          $ r  t           	                    d	d
¬¦  «         Y dS w xY w)u»  Per-summary character budget sized against the parent's *remaining*
    context headroom, split across the batch.

    The overflow this guards against is N summaries entering the parent
    context at once (batch fan-out), not any single summary being large.  We
    take a fraction of the headroom the parent has left (resolved context
    length minus what's already in its prompt) and divide it across the batch,
    converting tokensâ†’chars at the standard ~4 chars/token estimate.

    Returns the per-summary char budget, or None when the parent's context
    state is unknown (no compressor / no token count) â€” in which case the
    caller falls back to the static char ceiling only.
    Úcontext_compressorNÚcontext_lengthr   Úsession_prompt_tokensr  r/   é   z!Summary budget computation failedTr&  )
rJ   rN   rã   rä   Ú_MIN_SUMMARY_CHARSÚ_SUMMARY_HEADROOM_FRACTIONrå   rL   r   rM   )
rh  r¿  Ú
compressorrÂ  Úused_tokensÚreservedÚheadroom_tokensÚbatch_token_budgetÚper_summary_tokensÚper_summary_charss
             r    Ú_parent_summary_char_budgetrÎ  ½  sF  € ðÝ˜\Ð+?ÀÑFÔFˆ
Ý  Ð-=¸tÑDÔDˆÝ˜.­#Ñ.Ô.ð 	°.ÀAÒ2EÐ2EØ�4å˜lÐ,CÀQÑGÔGˆÝ˜+­­U |Ñ4Ô4ð 	¸Àaº¸ØˆKõ ˜: |°QÑ7Ô7Ð<¸1ˆØ(­3¨{Ñ+;Ô+;Ñ;½cÀ(¹m¼mÑKˆØ˜aÒÐå%Ð%å  Õ3MÑ!MÑNÔNÐØ/µ3°q¸+Ñ3FÔ3FÑFÐØ.°Ñ2ÐÝÕ%Ð'8Ñ9Ô9Ð9øÝð ð ð Ý�ŠÐ8À4ˆÑHÔHÐHØˆtˆtðøøøs   ‚=C< ÁA6C< Â8AC< Ã<&D&Ä%D&Úresultsc           	      óˆ  — d„ | D ¦   «         }|sdS t          ¦   «         }	 t          |                     dt          ¦  «        ¦  «        }n# t          t
          f$ r
 t          }Y nw xY wt          |t          |¦  «        ¦  «        }d„ ||fD ¦   «         }|sdS t          |¦  «        }|D ]š}|d         }	t          |	¦  «        |k    rŒt          |	¦  «        }
t          |	||                     dd¦  «        ¦  «        \  }}||d<   d|d	<   |r||d
<   t                               d|                     dd¦  «        |
||pd¦  «         Œ›dS )u½  Trim subagent summaries in-place so the batch can't overflow the
    parent's context window, spilling full text to disk so nothing is lost.

    The effective per-summary cap is the MIN of:
      - the dynamic headroom budget (remaining parent context Ã· batch size), and
      - the static ``delegation.max_summary_chars`` ceiling (0 = disabled).

    When a summary exceeds the cap, its full text is written to a file and the
    in-context summary becomes a head slice plus a pointer to that file. This
    addresses issue/PR #9126: batch fan-out returned N full summaries verbatim,
    blowing the parent context and (on rate-limited providers) triggering a
    compression/429 death spiral.
    c                 óœ   — g | ]I}t          |t          ¦  «        ¯t          |                     d ¦  «        t          ¦  «        ¯?|d          ¯G|‘ŒJS )rÕ   )rN   r†   r)   rO   rn   s     r    rp   z)_apply_summary_budget.<locals>.<listcomp>ó  sd   € ð ð ð Ø�j¨­DÑ1Ô1ðÝ6@ÀÇÂÀyÑAQÔAQÕSVÑ6WÔ6WðØ\]Ð^gÔ\hðØ	ðð ð r"   NÚmax_summary_charsc                 ó"   — g | ]}|¯|d k    ¯
|‘ŒS )r   r9   )ri   Úcs     r    rp   z)_apply_summary_budget.<locals>.<listcomp>  s"   € ÐMÐMÐM˜ÀÐMÀqÈ1ÂuÀu�!ÀuÀuÀur"   rÕ   r�  éÿÿÿÿTÚsummary_truncatedÚsummary_full_pathu9   [subagent-%s] summary trimmed %d â†’ ~%d chars (spill=%s)ú?Únone)r(   rã   r)   ÚDEFAULT_MAX_SUMMARY_CHARSrÎ   r½   rÎ  r‰   Úminr¾  r   rM   )rÏ  rh  Ú	summariesr+   Ústatic_ceilingÚdynamic_budgetri  r°  ÚentryrÕ   r¶  r½  rº  s                r    Ú_apply_summary_budgetrà  å  s¡  € ðð Øðñ ô €Ið ð Øˆå
‰.Œ.€Cð3Ý˜SŸWšWÐ%8Õ:SÑTÔTÑUÔUˆˆøÝ•zÐ"ð 3ð 3ð 3Ý2ˆˆˆð3øøøõ 1°½sÀ9¹~¼~ÑNÔN€Nð NÐM˜n¨nÐ=ÐMÑMÔM€JØð ØˆÝ
ˆj‰/Œ/€Càð 
ð 
ˆØ˜	Ô"ˆÝˆw‰<Œ<˜3ÒÐØÝ˜7‘|”|ˆÝ!:Ø�S˜%Ÿ)š) L°"Ñ5Ô5ñ"
ô "
Ñˆ
�Jð &ˆˆiÑØ%)ˆÐ!Ñ"Øð 	4Ø)3ˆEÐ%Ñ&Ý�ŠØGØ�IŠI�l CÑ(Ô(ØØØÐ ˜&ñ	
ô 	
ð 	
ð 	
ð
ð 
s    (A	 Á	A$Á#A$c                ób8  ‡ ‡‡‡‡f‡g‡h‡i‡j‡k‡l‡m‡n— t          j        ¦   «         }t          ‰dd¦  «        Šmddl}	t          ‰dt	          |	j        ¦  «        ¦  «        }
t          ‰dd¦  «        }d}|�…|                     ¦   «         }|�o	 |                     ¦   «         }|�%t          ‰d¦  «        r‰ 	                    |¦  «         n2# t          $ r%}t                               d|¦  «         Y d}~nd}~ww xY wt          j        ¦   «         ŠfdgŠhdgŠidgŠgdgŠkˆfˆgˆhˆiˆkˆˆˆ fd„}t          j        |d	¬
¦  «        }t          ‰dd¦  «        }t!          |t"          ¦  «        r|nd}|�r|€(	 ddlm}  |dd¦  «        pd}n# t          $ r d}Y nw xY w|r|�|€t)          |¦  «        \  }}t          ‰dd¦  «        }t!          |t*          ¦  «        rt-          d|dz
  ¦  «        nd}t          ‰dd¦  «        }t/          |t!          |t"          ¦  «        r|nd|‰t!          t          ‰dd¦  «        t"          ¦  «        rt          ‰dd¦  «        ndt          j         ¦   «         dd‰|||dœ¦  «         	 |                     ¦   «          ‰mrA	  ‰md‰¬¦  «         n2# t          $ r%}t                               d|¦  «         Y d}~nd}~ww xY wddl}|p&d‰ › d|                     ¦   «         j        dd…         › �Šnt          ‰dd¦  «        }	 ddlm}m}m}  |‰n ||¦  «        ¦  «          |‰n|¦  «         n2# t          $ r%}t                               d|¦  «         Y d}~nd}~ww xY wt          j         ¦   «         }|r!t	          tA          j!        |¦  «        ¦  «        ng }tE          ¦   «         }ddl#m$}   | dtJ          tM          ¦   «         f¬¦  «        }!d diŠld!t"          d"dfˆmfd#„Šjˆjˆlˆˆnˆfd$„}"tO          j(        ¦   «         }#|! )                    |#j*        |"¦  «        }$	 |$ +                    |¬%¦  «        }%�n# t          $ �rö}&|rtY          |‰¦  «        nd}'	 ‰duot[          ‰¦  «        }(|(s‰�t          ‰d&¦  «        rd	‰_.        n# t          $ r Y nw xY wt!          |&t^          t`          f¦  «        })tc          t          j        ¦   «         |z
  d'¦  «        }*t           2                    d(‰ |)rd)nd*tg          |&¦  «        j4        › �|*¦  «         d}+d},	 ‰ 5                    ¦   «         }-t+          |- 6                    d+d¦  «        pd¦  «        },n# t          $ r Y nw xY w|)rh|,dk    rbto          ‰‰ tq          |pd,¦  «        tq          |*¦  «        ‰l 6                    d ¦  «        ‰¬-¦  «        }+|+rt           2                    d.‰ |+¦  «         ‰mr;	  ‰md/|)rd0|*› d1�nt#          |&¦  «        |)rd2nd3|*d¬4¦  «         n# t          $ r Y nw xY w|)r+|,dk    rd5|› d6�}.|+r|.d7|+› �z  }.n#d5|› d8|,› d9�}.|+r|.d7|+› �z  }.nt#          |&¦  «        }.‰ |)rd2nd3d|.|)rd2nd3|,|*|)r|nd|)r|*nd|)r|,dk    rd:n|)rd;ndt          ‰d<d¦  «        |+d=œ}/|'r|'|/d><   |/d3xx         d?|'› d@�z  cc<   |/cY d}&~&|! 9                    dA¬B¦  «         ‰f :                    ¦   «          |j;        �| <                    dC¬%¦  «         |rt{          |‰¬D¦  «         |�K|�I	 | >                    |¦  «         n2# t          $ r%}t                               dE|¦  «         Y d}~nd}~ww xY wddl}	t          ‰dd¦  «        }0t!          |0t          ¦  «        rt	          |0¦  «        |	_        t          ‰dF¦  «        r�	 t          ‰dGd¦  «        }1|1r5|15  ‰j?         @                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j?         @                    ‰¦  «         n9# t‚          t„          f$ r%}t                               dH|¦  «         Y d}~nd}~ww xY w	 t          ‰dI¦  «        r‰ C                    ¦   «          n*# t          $ r t                               dJ¦  «         Y nw xY w	 ddKlDmE}2 |2 F                    dA¬L¦  «        }3t#          t          ‰dMd¦  «        pd¦  «        }4|2jG         H                    |2 I                    ¦   «         |4¬N¦  «        }5|3�|4r|5s|3 J                    dO|4i¦  «         S S S S # t          $ r t                               dP¦  «         Y S w xY wd}&~&ww xY w	 |! 9                    dA¬B¦  «         n# |! 9                    dA¬B¦  «         w xY wt          ‰dQd¦  «        }6d}7g }8d}9t!          |6t–          ¦  «        �rÓddRlLmM}:mN}; |% 6                    dS¦  «        pd}< |;|<|6¦  «        \  }7}8|7�s¢|< O                    ¦   «         �r�|% 6                    dTdA¦  «        �svd}9d}=	 ‰ P                     |:|8¦  «        ‰n‰j¬U¦  «        }=n3# t          $ r&}>t           2                    dV‰ |>¦  «         Y d}>~>nd}>~>ww xY wt!          |=t–          ¦  «        �r|= 6                    dS¦  «        pd}?|? O                    ¦   «         r|?|%dS<   	 t+          |% 6                    dWd¦  «        pd¦  «        t+          |= 6                    dWd¦  «        pd¦  «        z   |%dW<   n# t¢          t‚          f$ r Y nw xY w|= 6                    dX¦  «        }@t!          |@t          ¦  «        r6t!          |% 6                    dX¦  «        t          ¦  «        r|%dX         |@z   |%dX<    |;|?|6¦  «        \  }7}8|rtY          |‰¦  «        nd}'|'r8|% 6                    dY¦  «        }At!          |At"          ¦  «        r	|Ar|A› dZ|'› �n|'|%dY<   ‰mrXt          ‰md[¦  «        rH	 ‰m R                    ¦   «          n2# t          $ r%}t                               d\|¦  «         Y d}~nd}~ww xY wtc          t          j        ¦   «         |z
  d'¦  «        }*|% 6                    dS¦  «        pd}B|% 6                    d]dA¦  «        }C|% 6                    dTdA¦  «        }(|% 6                    dWd¦  «        }D|B O                    ¦   «         d^k    }E|(rdT}Fn	|Br|Esd]}Fnd_}Fg }Gi }H|% 6                    dX¦  «        pg }It!          |It          ¦  «        �r§|ID �]£}Jt!          |Jt–          ¦  «        sŒ|J 6                    d`¦  «        dak    r¬|J 6                    db¦  «        pg D ]“}K|K 6                    dci ¦  «        }L|L 6                    ddd¦  «        }M|L 6                    dedf¦  «        t§          |M¦  «        t©          |M¦  «        dgœ}N|G U                    |N¦  «         |K 6                    dh¦  «        }O|Or|N|H|O<   Œ”ŒÞ|J 6                    d`¦  «        dik    r¬t­          |J 6                    djd¦  «        ¦  «        }Pt¯          |P¦  «        }Qt§          |P¦  «        |Qrd3ndkdlœ}R|J 6                    dm¦  «        }O|Or|H 6                    |O¦  «        nd}S|S�|S X                    |R¦  «         �Œ†|Gr|Gdn          X                    |R¦  «         �Œ¥|(rdT}Tn|Crd]}Tndo}Tt          ‰dpd¦  «        }Ut          ‰dqd¦  «        }Vt          ‰dd¦  «        }W‰ |F|B|D|*t!          |Wt"          ¦  «        r|Wnd|Tt!          |Ut*          tp          f¦  «        r|Undt!          |Vt*          tp          f¦  «        r|Vnddrœ|Gt          ‰d<d¦  «        t!          t          ‰dsd,¦  «        t*          tp          f¦  «        r tq          t          ‰dsd,¦  «        pd,¦  «        nd,dtœ}Xtc          |Xdu         dv¦  «        |Xdw<   t          ‰dxd¦  «        }Yt!          |Yt"          ¦  «        r|Yr|Yndf|Xdy<   |Fd_k    r|% 6                    d3dz¦  «        |Xd3<   t!          |6t–          ¦  «        r"t³          |7¦  «        |Xd{<   |9r|9|Xd|<   |7s|8r|8|Xd}<   |% 6                    dY¦  «        }Zt!          |Zt"          ¦  «        r-|Z O                    ¦   «         r|Z|Xd><   d~|Z› d@�}[|Br|B› d|[› �n|[|Xd€<   	 |r¿|r½tA          jZ        |||¦  «        }\|\r¥t·          d�„ |\ \                    ¦   «         D ¦   «         ¦  «        }]|]rxd‚dƒ <                    |]dd…         ¦  «        z   t§          |]¦  «        dk    rd„t§          |]¦  «        dz
  › d…�ndz   d@z   }^|X 6                    d€¦  «        r|Xd€         |^z   |Xd€<   n|]|Xd†<   n,# t          $ r t                               d‡d	¬ˆ¦  «         Y nw xY wt          ‰dsd¦  «        }_t          ‰d‰d¦  «        }`	 t	          tA          j!        ‰n¦  «        ¦  «        ddŠ…         }an# t          $ r g }aY nw xY w	 tA          jZ        d|g ¦  «        }bn# t          $ r i }bY nw xY wt·          ˆnfd‹„|b ]                    ¦   «         D ¦   «         ¦  «        ddŠ…         }ct½          |%ddŒ¬�¦  «        }d|Br
|BddŽ…         n|X 6                    d3d¦  «        |F|*|Br
|Bdd�…         n|X 6                    d3d¦  «        t!          |Ut*          tp          f¦  «        rt+          |U¦  «        ndt!          |Vt*          tp          f¦  «        rt+          |V¦  «        ndt!          |`t*          tp          f¦  «        rt+          |`¦  «        ndt!          |Dt*          tp          f¦  «        rt+          |D¦  «        nd|a|c|dd�œ}e|_�+	 tq          |_¦  «        |edw<   n# t¢          t‚          f$ r Y nw xY w‰mr<	  ‰md–i |e¤Ž n2# t          $ r%}t                               d‘|¦  «         Y d}~nd}~ww xY w|X‰f :                    ¦   «          |j;        �| <                    dC¬%¦  «         |rt{          |‰¬D¦  «         |�K|�I	 | >                    |¦  «         n2# t          $ r%}t                               dE|¦  «         Y d}~nd}~ww xY wddl}	t          ‰dd¦  «        }0t!          |0t          ¦  «        rt	          |0¦  «        |	_        t          ‰dF¦  «        r�	 t          ‰dGd¦  «        }1|1r5|15  ‰j?         @                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j?         @                    ‰¦  «         n9# t‚          t„          f$ r%}t                               dH|¦  «         Y d}~nd}~ww xY w	 t          ‰dI¦  «        r‰ C                    ¦   «          n*# t          $ r t                               dJ¦  «         Y nw xY w	 ddKlDmE}2 |2 F                    dA¬L¦  «        }3t#          t          ‰dMd¦  «        pd¦  «        }4|2jG         H                    |2 I                    ¦   «         |4¬N¦  «        }5|3�|4r|5s|3 J                    dO|4i¦  «         S S S S # t          $ r t                               dP¦  «         Y S w xY w# t          $ �r~}|rtY          |‰¦  «        nd}'tc          t          j        ¦   «         |z
  d'¦  «        }*t¿          j`        d’‰ › d“�¦  «         ‰mr^	  ‰md/t#          |¦  «        d_|*t#          |¦  «        ¬4¦  «         n2# t          $ r%}t                               d”|¦  «         Y d}~nd}~ww xY w‰ d3dt#          |¦  «        d|*t          ‰d<d¦  «        d•œ}/|'r|'|/d><   |/d3xx         d?|'› d@�z  cc<   |/cY d}~‰f :                    ¦   «          |j;        �| <                    dC¬%¦  «         |rt{          |‰¬D¦  «         |�K|�I	 | >                    |¦  «         n2# t          $ r%}t                               dE|¦  «         Y d}~nd}~ww xY wddl}	t          ‰dd¦  «        }0t!          |0t          ¦  «        rt	          |0¦  «        |	_        t          ‰dF¦  «        r�	 t          ‰dGd¦  «        }1|1r5|15  ‰j?         @                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j?         @                    ‰¦  «         n9# t‚          t„          f$ r%}t                               dH|¦  «         Y d}~nd}~ww xY w	 t          ‰dI¦  «        r‰ C                    ¦   «          n*# t          $ r t                               dJ¦  «         Y nw xY w	 ddKlDmE}2 |2 F                    dA¬L¦  «        }3t#          t          ‰dMd¦  «        pd¦  «        }4|2jG         H                    |2 I                    ¦   «         |4¬N¦  «        }5|3�|4r|5s|3 J                    dO|4i¦  «         S S S S # t          $ r t                               dP¦  «         Y S w xY wd}~ww xY w# ‰f :                    ¦   «          |j;        �| <                    dC¬%¦  «         |rt{          |‰¬D¦  «         |�K|�I	 | >                    |¦  «         n2# t          $ r%}t                               dE|¦  «         Y d}~nd}~ww xY wddl}	t          ‰dd¦  «        }0t!          |0t          ¦  «        rt	          |0¦  «        |	_        t          ‰dF¦  «        r�	 t          ‰dGd¦  «        }1|1r5|15  ‰j?         @                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j?         @                    ‰¦  «         n9# t‚          t„          f$ r%}t                               dH|¦  «         Y d}~nd}~ww xY w	 t          ‰dI¦  «        r‰ C                    ¦   «          n*# t          $ r t                               dJ¦  «         Y nw xY w	 ddKlDmE}2 |2 F                    dA¬L¦  «        }3t#          t          ‰dMd¦  «        pd¦  «        }4|2jG         H                    |2 I                    ¦   «         |4¬N¦  «        }5|3�|4r|5s|3 J                    dO|4i¦  «         w w w w # t          $ r t                               dP¦  «         Y w w xY wxY w)—zi
    Run a pre-built child agent. Called from within a thread.
    Returns a structured result dict.
    r‘  Nr   Ú_delegate_saved_tool_namesr:  Ú_swap_credentialz-Failed to bind child to leased credential: %sc                  óŽ  •— ‰                      t          ¦  «        �s¨‰€Œt          ‰dd ¦  «        } | sŒ2d‰› d�}	 ‰                     ¦   «         }|                     d¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     d¦  «        }|‰d         k    }|‰d         k    }|d uo‰d         d u p|‰d         k    }	|s|s|	r|‰d<   |‰d<   |�|‰d<   d‰d<   n‰dxx         d	z  cc<   |rt
          nt          }
‰d         |
k    r't                               d
‰‰d         |pd¦  «         d S |rd|› d|› d|› d�}n$|                     dd¦  «        }|rd|› d|› d|› d�}n# t          $ r Y nw xY w	  | |¦  «         n# t          $ r Y nw xY w‰                      t          ¦  «        �¯¦d S d S )NÚ_touch_activityzdelegate_task: subagent z workingÚcurrent_toolÚapi_call_countr   rÐ  Úlast_activity_tsr/   u_   Subagent %d appears stale (no progress for %d heartbeat cycles, tool=%s) â€” stopping heartbeatz<none>z delegate_task: subagent running z (iteration rÃ  rV   Úlast_activity_descr‚   )
ÚwaitÚ_HEARTBEAT_INTERVALrJ   r‹  r)   Ú_HEARTBEAT_STALE_CYCLES_IN_TOOLÚ_HEARTBEAT_STALE_CYCLES_IDLEr   r   rL   )ÚtouchÚdescÚchild_summaryÚ
child_toolÚ
child_iterÚ	child_maxÚchild_activity_tsÚiter_advancedÚtool_changedÚactivity_advancedÚstale_limitÚ
child_descÚ_heartbeat_stopÚ_last_seen_activity_tsÚ_last_seen_iterÚ_last_seen_toolÚ_stale_countrc  rh  r�  s               €€€€€€€€r    Ú_heartbeat_loopz*_run_single_child.<locals>._heartbeat_loopS  sú  ø€ Ø!×&Ò&Õ':Ñ;Ô;ñ L	ØÐ#ØÝ˜LÐ*;¸TÑBÔBˆEØð ØàB¨jÐBÐBÐBˆDð@Ø %× :Ò :Ñ <Ô <�Ø*×.Ò.¨~Ñ>Ô>�
Ø*×.Ò.Ð/?ÀÑCÔC�
Ø)×-Ò-Ð.>ÀÑBÔB�	Ø$1×$5Ò$5Ð6HÑ$IÔ$IÐ!ð !+¨_¸QÔ-?Ò ?�Ø)¨_¸QÔ-?Ò?�à%¨TÐ1ð à.¨qÔ1°TÐ9ð IØ,Ð/EÀaÔ/HÒHð	 "ð !ð ) Lð )Ð4Eð )Ø)3�O AÑ&Ø)3�O AÑ&Ø(Ð4Ø4EÐ.¨qÑ1Ø&'�L ‘O�Oà  �O�O”O qÑ(�O�O‘Oð "ð6Õ3Ð3å5ð ð
   ”? kÒ1Ð1Ý—N’NðLà"Ø$ QœØ"Ð. hñô ð ð �Eàð ð@¸:ð @ð @Ø&0ð@ð @Ø3<ð@ð @ð @ð �Dð
 "/×!2Ò!2Ð3GÈÑ!LÔ!L�JØ!ð ðD°zð Dð DØ*4ðDð DØ7@ðDð Dð Dð øøõ ð ð ð Ø�ðøøøðØ��d‘”��øÝð ð ð Ø�ðøøøðW "×&Ò&Õ':Ñ;Ô;ñ L	ð L	ð L	ð L	ð L	s*   »D
E; Å3E; Å;
FÆFÆF Æ
F%Æ$F%T)r(  r‘  rÞ  ©Úget_session_envÚHERMES_UI_SESSION_IDr‚   rÛ  r/   r6  r‹  Úrunning)r=   r‰  rŠ  rZ  r‹  Ú
started_atrß   r—  rD   rY   rZ   r[   r¤  r©  z"Progress callback start failed: %sz	subagent-rÜ  rÝ  Ú_current_task_id)Úget_session_cwdÚrecord_session_cwdÚregister_container_aliaszChild cwd seed failed: %s©ÚDaemonThreadPoolExecutor)Úmax_workersÚinitializerÚinitargsrs  Údeltar   c                 ó–   •— | r‰sd S 	  ‰d| ¬¦  «         d S # t           $ r&}t                               d|¦  «         Y d }~d S d }~ww xY w)Nr¨  r©  zChild text relay failed: %srí  )r  r   rî  s     €r    Ú_relay_child_textz,_run_single_child.<locals>._relay_child_text	  s�   ø€ ð ð Ð 1ð Ø�ð?Ø!Ð! /¸5ÐAÑAÔAÐAÐAÐAøÝð ?ð ?ð ?Ý—’Ð:¸AÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øøøøð?øøøs   ‰ ˜
A¢AÁAc            	      óò   •— t          j        ¦   «         ‰d<   ddlm}   | t	          t          ‰dd¦  «        pd¦  «        ¦  «        5  ‰                     ‰‰‰¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nrs  r   r  r•  r‚   ©Úuser_messageÚtask_idÚstream_callback)r…  Úcurrent_threadr4  r  rO   rJ   Úrun_conversation)r  r  Ú_worker_thread_holderrc  Úchild_task_idrZ  s    €€€€€r    Ú_run_with_thread_capturez3_run_single_child.<locals>._run_with_thread_capture	  sÙ   ø€ Ý)2Ô)AÑ)CÔ)CÐ! #Ñ&ØHÐHÐHÐHÐHÐHà(Ð(­­W°U¸LÈ"Ñ-MÔ-MÐ-SÐQSÑ)TÔ)TÑUÔUð ð Ø×-Ò-Ø!%Ø)Ø$5ð .ñ ô ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA,Á,A0Á3A0)ró   Ú_interrupt_requestedrV  zSubagent %d %s after %.1fsz	timed outzraised rç  ç        )rc  r�  ri  rj  rk  rZ  u;   Subagent %d 0-API-call timeout â€” diagnostic written to %sr§  zTimed out after rv  ró   rá   )r„   rß   rj  rÕ   zSubagent timed out after u˜   s without making any API call â€” the child never reached its first LLM request (prompt construction, credential resolution, or transport may be stuck).z Diagnostic: zs with ug    API call(s) completed â€” likely stuck on a slow API call, tool call, or unresponsive network request.Úbefore_first_llm_callÚafter_llm_callsr5  )r�  rß   rÕ   rá   Úexit_reasonÚ	api_callsrj  ri  Útimed_out_after_secondsÚtimeout_phaseÚ_child_roleÚdiagnostic_pathÚmissed_steerz2 [steer did not land before the subagent stopped: r·   F)rê  r“  rC   z&Failed to release credential lease: %sr  r  z/Could not remove child from active_children: %sÚclosez,Failed to close child agent after delegation)Úrelay_runtime)Úcreater•  )Úprofile_keyr•  r–  z4Failed to close child Relay session after delegationÚ_delegate_output_schema)Úbuild_retry_messageÚvalidate_outputÚfinal_responseÚinterruptedr  z(Subagent %d schema-retry turn failed: %sr   ry   Úpending_steerr™   rÀ  z"Progress callback flush failed: %sÚ	completedrx  rñ   rz   r{   r|   r~   rÂ   r   rÝ   )r€   rè   rç   r}   r€   r�   rà   )ré   rß   rƒ   rÕ  rÐ  rÃ  Úsession_completion_tokens)ÚinputÚoutputÚsession_estimated_cost_usd)r�  rß   rÕ   r   rj  r‹  r  ÚtokensrÛ   r#  Ú_child_cost_usdr6  é   Úcost_usdÚsession_cost_statusÚcost_statusz$Subagent did not produce a response.Úschema_validÚschema_retriesÚschema_errorsuL   [steer did not land â€” the subagent finished before it could be delivered: z

rÕ   c                 ó   — h | ]	}|D ]}|’ŒŒ
S r9   r9   )ri   ÚpathsÚps      r    rw  z$_run_single_child.<locals>.<setcomp>š
  s%   € ÐOÐOÐO˜uÈÐOÐOÀA˜ÐOÐOÐOÐOr"   uX   

[NOTE: subagent modified files the parent previously read â€” re-read before editing: r®  z (+z more)Ústale_pathsz%file_state sibling-write check failedr&  Úsession_reasoning_tokensr@  c                 ó0   •— h | ]\  }}|‰k    ¯|D ]}|’ŒŒS r9   r9   )ri   Útidr?  r@  r  s       €r    rw  z$_run_single_child.<locals>.<setcomp>À
  sC   ø€ ð ð ð á�C˜Ø˜-Ò'Ð'Øð (Ð'Øð à'Ð'Ð'Ð'r"   iX  rt   é    iô  )r„   rß   rj  rÕ   Úinput_tokensÚoutput_tokensÚreasoning_tokensr   Ú
files_readÚfiles_writtenÚoutput_tailz'Progress callback completion failed: %sr  z] failedz*Progress callback failure relay failed: %s©r�  rß   rÕ   rá   r   rj  r#  r±  )aÚtimeÚ	monotonicrJ   rã  r‡   Ú_last_resolved_tool_namesÚacquire_leaseÚcurrentr,  rã  rL   r   rM   r…  ÚEventÚThreadrN   rO   Úgateway.session_contextr  rd   rã   rå   rB   Ústartr)  r*  r+  Útools.terminal_toolr  r  r  r   Úknown_readsr  Útools.daemon_poolr
  Ú_set_subagent_approval_cbr-   ÚcontextvarsÚcopy_contextÚsubmitÚrunrw   rT   r   r  ÚFuturesTimeoutErrorr   Úroundr   ÚtyperF  r‹  r)   rª  rä   Úshutdownr-  r~  rœ   rG   Úrelease_leaser  Úremover½   ÚUnboundLocalErrorr&  rD   r'  Úget_runtimeÚSESSION_COORDINATORÚhas_active_turnÚcurrent_profile_keyÚunregister_subagentr†   Útools.delegation_output_schemar+  r,  rP   r  rÎ   rÀ  r‰   rÔ   rŒ   rŠ   r‹   r.  r5   Úwrites_sincerÏ   rq   rm   r•   ÚloggingÚ	exception)or�  rZ  rc  rh  rY   rZ   r[   Ú_kwargsÚchild_startrã  Ú_saved_tool_namesre  Úleased_cred_idÚleased_entryrS   rÿ  Ú_heartbeat_threadÚ_raw_sidrÞ  r  Ú
_raw_depthÚ
_tui_depthÚ_parent_sidr   r<  Úparent_task_idr  r  r  Ú
wall_startÚparent_reads_snapshotÚchild_timeoutr
  Ú_timeout_executorr  Ú_child_contextÚ_child_futurerw   Ú_timeout_excÚ_late_pending_steerr.  Ú
is_timeoutÚdurationr$  Úchild_api_callsÚ_summaryÚ_errÚ_error_entryÚsaved_tool_namesrf  r'  Úruntimer–  Úchild_turn_is_activeÚ_output_schemaÚ_schema_validÚ_schema_errorsÚ_schema_retriesr+  r,  Ú_first_textÚ_retry_resultÚ
_retry_excÚ_retry_textÚ_retry_messagesÚ_existing_pendingrÕ   r0  r   Ú_empty_sentinelrß   rÛ   Útrace_by_idry   r�   r‘   r“   rÂ   Úentry_tr’   r�   r…   Úresult_metar(  r  Ú_input_tokensÚ_output_tokensÚ_modelrß  Ú_cost_statusÚ_missed_steerÚ
_miss_noteÚsibling_writesÚ	mod_pathsÚreminderÚ	_cost_usdÚ_reasoning_tokensÚ_files_readÚ_files_written_mapÚ_files_writtenÚ_output_tailÚcomplete_kwargsrú  rû  rü  rý  r  rþ  r  rî  r  so   ````                                                                                                  @@@@@@@@@r    Ú_run_single_childr¨    sü&  øøøøøøøøøøøøø€ õ ”.Ñ"Ô"€Kõ   Ð'?ÀÑFÔFÐð ÐÐÐåØÐ+­T°+Ô2WÑ-XÔ-Xñô Ðõ ˜Ð 2°DÑ9Ô9€JØ€NØÐØ#×1Ò1Ñ3Ô3ˆØÐ%ðSØ)×1Ò1Ñ3Ô3�ØÐ+µ¸Ð?QÑ0RÔ0RÐ+Ø×*Ò*¨<Ñ8Ô8Ð8øøÝð Sð Sð SÝ—’ÐLÈcÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøõ  ”oÑ'Ô'€Oð �c€OØ�f€OØ"˜VÐØ�3€LðMð Mð Mð Mð Mð Mð Mð Mð Mð Mð Mð Mõ^ "Ô(°ÈÐMÑMÔMÐõ �u˜n¨dÑ3Ô3€HÝ)¨(µCÑ8Ô8ÐB�8�8¸d€LØñ &
ØÐ#ð(ØCÐCÐCÐCÐCÐCà#2 ?Ð3IÈ2Ñ#NÔ#NÐ#VÐRVÐ Ð øÝð (ð (ð (Ø#'Ð Ð Ð ð(øøøàð 	ØÐ#Ð';Ð'Cõ 1Ð1AÑBÔBñ 2ˆOÐ1õ ˜UÐ$5°qÑ9Ô9ˆ
Ý/9¸*ÅcÑ/JÔ/JÐQ•S˜˜J¨™NÑ+Ô+Ð+ÐPQˆ
Ý˜eÐ%:¸DÑAÔAˆÝà+Ý,6°{ÅCÑ,HÔ,HÐR˜[˜[ÈdØ#Øõ "¥'¨%°¸$Ñ"?Ô"?ÅÑEÔEð•G˜E 7¨DÑ1Ô1Ð1àå"œi™kœkØ#ØØð %5Ø#2Ø(<ð%ð ñ	
ô 	
ð 	
ð.@
QØ×ÒÑ!Ô!Ð!Øð 	FðFØ!Ð!Ð"2¸DÐAÑAÔAÐAÐAøÝð Fð Fð FÝ—’ÐAÀ1ÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøð 	ÐÐÐà$ÐXÐ(X°JÐ(XÐ(XÀÇÂÁÄÔARÐSUÐTUÐSUÔAVÐ(XÐ(XˆÝ  Ð/AÀ4ÑHÔHˆð	9ðð ð ð ð ð ð ð ð ð ð Ð˜}¨o¨o¸nÑ.MÔ.MÑNÔNÐNð
 %Ð$ ]°NÑCÔCÐCÐCøÝð 	9ð 	9ð 	9Ý�LŠLÐ4°aÑ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8øøøøð	9øøøå”Y‘[”[ˆ
à<JÐR�D•Ô'¨Ñ7Ô7Ñ8Ô8Ð8ÐPRð 	õ +Ñ,Ô,ˆð 	?Ð>Ð>Ð>Ð>Ð>Ø4Ð4Øõ
 2Ý5Ñ7Ô7Ð9ð
ñ 
ô 
Ðð ILÈTÀ{Ðð		?¥Sð 		?¨Tð 		?ð 		?ð 		?ð 		?ð 		?ð 		?ð		ð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		õ %Ô1Ñ3Ô3ˆØ)×0Ò0ØÔØ$ñ
ô 
ˆðx	3Ø"×)Ò)°-Ð)Ñ@Ô@ˆF‰FøÝð r	 ñ r	 ð r	 ð
 BNÐWÕ(¨°uÑ=Ô=Ð=ÐSWð  ðØ#¨4Ð/ÐQÕ4JÈ5Ñ4QÔ4Q�Ø"ð 6 uÐ'8½WÀUÐLbÑ=cÔ=cÐ'8Ø15�EÔ.øøÝð ð ð Ø�ðøøøõ $ LÕ3FÍÐ2UÑVÔVˆJÝ�Tœ^Ñ-Ô-°Ñ;¸QÑ?Ô?ˆHÝ�NŠNØ,ØØ)ÐV��Ð/V½¸lÑ9KÔ9KÔ9TÐ/VÐ/VØñ	ô ð ð .2ˆOØˆOðØ ×5Ò5Ñ7Ô7�Ý"% h§l¢lÐ3CÀQÑ&GÔ&GÐ&LÈ1Ñ"MÔ"M��øÝð ð ð Ø�ðøøøàð ˜o°Ò2Ð2Ý"CØØ)õ %*¨-Ð*>¸3Ñ$?Ô$?Ý%*¨8¡_¤_Ø"7×";Ò";¸CÑ"@Ô"@Øð	#ñ 	#ô 	#�ð #ð Ý—N’NØUØ"Ø'ñô ð ð !ð ðØ%Ð%Ø+ð  *ð3Ð:¨xÐ:Ð:Ð:Ð:å!$ \Ñ!2Ô!2à,6ÐC˜y˜y¸GØ)1Ø "ð
ñ 
ô 
ð 
ð 
øõ !ð ð ð Ø�Dðøøøð ð )Ø" aÒ'Ð'ðC°Mð Cð Cð Cð ð 'ð BØÐ A°Ð AÐ AÑA˜øð,°Mð ,ð ,Ø*ð,ð ,ð ,ð ð 'ð BØÐ A°Ð AÐ AÑA˜øå˜<Ñ(Ô(�ð )Ø'1Ð>˜)˜)°wØØØ,6ÐC˜y˜y¸GØ,Ø$,Ø4>Ð#H = =ÀDØ7AÐ+K¨8¨8Àtà/9ð ¸oÐQRÒ>RÐ>RÐ+Ð+Ø.8ð Ð*Ð*Øå& uÐ.>ÀÑEÔEØ#2ð!ð ˆLð$ #ð Ø/B�˜^Ñ,Ø˜WÐ%Ð%Ô%ð.Ø*ð.ð .ð .ñÐ%Ð%Ñ%ð  ÐÐÐÐÐð ×&Ò&¨EÐ&Ñ2Ô2Ð2ðb 	×ÒÑÔÐØÔ"Ð.Ø×"Ò"¨1Ð"Ñ-Ô-Ð-ð ð 	<Ý  °UÐ;Ñ;Ô;Ð;àÐ! nÐ&@ðLØ×(Ò(¨Ñ8Ô8Ð8Ð8øÝð Lð Lð LÝ—’ÐEÀsÑKÔKÐKÐKÐKÐKÐKÐKøøøøðLøøøð
 	ÐÐÐå" 5Ð*FÈÑMÔMÐÝÐ&­Ñ-Ô-ð 	KÝ48Ð9IÑ4JÔ4JˆKÔ1õ
 �<Ð!3Ñ4Ô4ð 		SðSÝ˜|Ð-DÀdÑKÔK�Øð @Øð Dð DØ$Ô5×<Ò<¸UÑCÔCÐCðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Døð !Ô1×8Ò8¸Ñ?Ô?Ð?øøÝÕ 1Ð2ð Sð Sð SÝ—’ÐNÐPQÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøð	IÝ�u˜gÑ&Ô&ð Ø—’‘”�øøÝð 	Ið 	Ið 	IÝ�LŠLÐGÑHÔHÐHÐHÐHð	Iøøøð	QØ+Ð+Ð+Ð+Ð+Ð+à#×/Ò/°uÐ/Ñ=Ô=ˆGÝ"¥7¨5°,ÀÑ#CÔ#CÐ#IÀrÑJÔJÐØ#0Ô#D×#TÒ#TØ)×=Ò=Ñ?Ô?Ø+ð $Uñ $ô $Ð ð Ð"Ð'7Ð"Ð@TÐ"Ø×+Ò+Ð-?ÐAQÐ,RÑSÔSÐSÐSð #Ð"Ð"øåð 	Qð 	Qð 	QÝ�LŠLÐOÑPÔPÐPÐPÐPð	QøøøøøøøðGr	 øøøð ðn ×&Ò&¨EÐ&Ñ2Ô2Ð2Ð2øÐ×&Ò&¨EÐ&Ñ2Ô2Ð2Ð2øøøõ ! Ð(AÀ4ÑHÔHˆØ(,ˆØ$&ˆØˆÝ�n¥dÑ+Ô+ñ 1	ðð ð ð ð ð ð ð ð
 !Ÿ*š*Ð%5Ñ6Ô6Ð<¸"ˆKØ,;¨OØ˜^ñ-ô -Ñ)ˆM˜>ð "ñ'à×%Ò%Ñ'Ô'ñ'ð Ÿ
š
 =°%Ñ8Ô8ñ'ð #$�Ø $�ðØ$)×$:Ò$:Ø%8Ð%8¸Ñ%HÔ%HØ -Ø(9ð %;ñ %ô %�M�Møõ
 !ð ð ð Ý—N’NØBØ"Ø"ñô ð ð ð ð ð ð øøøøðøøøõ ˜m­TÑ2Ô2ñ Ø"/×"3Ò"3Ð4DÑ"EÔ"EÐ"KÈ�KØ"×(Ò(Ñ*Ô*ð ?Ø3>˜Ð/Ñ0ðÝ.1Ø"ŸJšJ {°AÑ6Ô6Ð;¸!ñ/ô /å × 1Ò 1°+¸qÑ AÔ AÐ FÀQÑGÔGñ/H˜˜{Ñ+Ð+øõ &¥zÐ2ð ð ð Ø˜ðøøøà&3×&7Ò&7¸
Ñ&CÔ&C�OÝ! /µ4Ñ8Ô8ð R½ZØŸ
š
 :Ñ.Ô.µñ>ô >ð Rð .4°JÔ-?À/Ñ-Q˜˜zÑ*Ø4C°OØ# ^ñ5ô 5Ñ1�M >ð >JÐSÕ$ \°5Ñ9Ô9Ð9Ètð 	ð ð 	Ø &§
¢
¨?Ñ ;Ô ;Ðõ Ð/µÑ5Ô5ð)Ø:Kð)Ð$Ð=Ð=Ð(;Ð=Ð=Ð=à(ð �?Ñ#ð ð 	F¥Ð):¸HÑ!EÔ!Eð 	FðFØ!×(Ò(Ñ*Ô*Ð*Ð*øÝð Fð Fð FÝ—’ÐAÀ1ÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøõ �œÑ)Ô)¨KÑ7¸Ñ;Ô;ˆà—*’*Ð-Ñ.Ô.Ð4°"ˆØ—J’J˜{¨EÑ2Ô2ˆ	Ø—j’j °Ñ6Ô6ˆØ—J’J˜{¨AÑ.Ô.ˆ	ð "Ÿ-š-™/œ/¨YÒ6ˆàð 	Ø"ˆFˆFØð 	˜_ð 	ð !ˆFˆFàˆFð ,.ˆ
Ø13ˆØ—:’:˜jÑ)Ô)Ð/¨RˆÝ�h¥Ñ%Ô%ñ 	;Øð ;ñ ;�Ý! #¥tÑ,Ô,ð ØØ—7’7˜6‘?”? kÒ1Ð1Ø!Ÿgšg lÑ3Ô3Ð9°rð 9ð 9˜ØŸVšV J°Ñ3Ô3˜Ø$&§F¢F¨;¸Ñ$;Ô$;˜	à$&§F¢F¨6°9Ñ$=Ô$=Ý*-¨i©.¬.Ý-FÀyÑ-QÔ-Qð#ð #˜ð
 #×)Ò)¨'Ñ2Ô2Ð2Ø "§¢ t¡¤˜Ø ð 9Ø18˜K¨Ñ.øð9ð —W’W˜V‘_”_¨Ò.Ð.Ý5°c·g²g¸iÈÑ6LÔ6LÑMÔM�GÝ7¸Ñ@Ô@�Hå(+¨G©¬Ø-5Ð"? ' '¸4ð#ð #�Kð
  ŸGšG NÑ3Ô3�EØ7<ÐF˜[Ÿ_š_¨UÑ3Ô3Ð3À$�FØÐ)ØŸš kÑ2Ô2Ð2Ñ2Ø#ð ;à" 2œ×-Ò-¨kÑ:Ô:Ð:ùð ð 	+Ø'ˆKˆKØð 	+Ø%ˆKˆKà*ˆKõ   Ð'>ÀÑBÔBˆÝ  Ð(CÀQÑGÔGˆÝ˜ ¨Ñ.Ô.ˆð %ØØØ"Ø (Ý)¨&µ#Ñ6Ô6Ð@�V�V¸DØ&õ &0°ÅÅU¸|Ñ%LÔ%LÐS�M�MÐRSõ '1°Å#ÅuÀÑ&NÔ&NÐU�N�NÐTUðð ð %õ # 5Ð*:¸DÑAÔAõ Ý˜EÐ#?ÀÑEÔEÝ�%�Lñô ð••g˜eÐ%AÀ3ÑGÔGÐNÈ3ÑOÔOÐOð
 ðA"!
ð "!
ˆõP " %Ð(9Ô":¸AÑ>Ô>ˆˆjÑÝ˜uÐ&;¸TÑBÔBˆå& |µSÑ9Ô9ð ¸lð ˆLˆLØð 	ˆmÑð �XÒÐØ#ŸZšZ¨Ð1WÑXÔXˆE�'‰Nõ �n¥dÑ+Ô+ð 	8Ý$(¨Ñ$7Ô$7ˆE�.Ñ!Øð :Ø*9�Ð&Ñ'Ø ð 8 ^ð 8Ø)7��oÑ&ð Ÿ
š
 ?Ñ3Ô3ˆÝ�m¥SÑ)Ô)ð 	W¨m×.AÒ.AÑ.CÔ.Cð 	WØ$1ˆE�.Ñ!ð2Ø!.ð2ð 2ð 2ð ð @GÐV 'Ð;Ð;¨zÐ;Ð;Ð;ÈJˆE�)Ñð	QØð =Ð"7ð =Ý!+Ô!8Ø" JÐ0Eñ"ô "�ð "ð =Ý &ØOÐO¨×(=Ò(=Ñ(?Ô(?ÐOÑOÔOñ!ô !�Ið !ð =ðKà"Ÿiši¨	°"°1°"¬Ñ6Ô6ñ7õ
 $' y¡>¤>°AÒ#5Ð#5ð !A¥c¨)¡n¤n°qÑ&8Ð @Ð @Ð @Ð @à%'ñð "ñ"ð !ð !Ÿ9š9 YÑ/Ô/ð =Ø/4°YÔ/?À(Ñ/J˜E )Ñ,Ð,à3<˜E -Ñ0øøÝð 	Qð 	Qð 	QÝ�LŠLÐ@È4ˆLÑPÔPÐPÐPÐPð	Qøøøõ ˜EÐ#?ÀÑFÔFˆ	Ý# EÐ+EÀqÑIÔIÐð	Ý�zÔ5°mÑDÔDÑEÔEÀcÀrÀcÔJˆKˆKøÝð 	ð 	ð 	ØˆKˆKˆKð	øøøð	$Ý!+Ô!8Ø�J ñ"ô "ÐÐøõ ð 	$ð 	$ð 	$Ø!#ÐÐÐð	$øøøåðð ð ð à"4×":Ò":Ñ"<Ô"<ðñ ô ñ
ô 
ð ˆ2ˆ#ôˆõ ,¨FÀÈSÐQÑQÔQˆð )0ÐK�w˜t ˜t”}�}°U·Y²Y¸wÈÑ5KÔ5KØØ (Ø(/ÐK�w˜t ˜t”}�}°U·Y²Y¸wÈÑ5KÔ5Kå&0°ÅÅeÀÑ&MÔ&MÐT•�MÑ"Ô"Ð"ÐSTõ (2°.Å3ÍÀ,Ñ'OÔ'OÐV•�NÑ#Ô#Ð#ÐUVõ Ð/µ#µu°Ñ>Ô>ð•Ð%Ñ&Ô&Ð&àå+5°iÅ#ÅuÀÑ+NÔ+NÐU�˜Y™œ˜ÐTUØ%Ø+Ø'ð'+
ð +
ˆð* Ð ðÝ.3°IÑ.>Ô.>� 
Ñ+Ð+øÝ�zÐ*ð ð ð Ø�ðøøøð ð 	KðKØ!Ð!ÐIÐI¸ÐIÐIÐIÐIøÝð Kð Kð KÝ—’ÐFÈÑJÔJÐJÐJÐJÐJÐJÐJøøøøðKøøøð ðT 	×ÒÑÔÐØÔ"Ð.Ø×"Ò"¨1Ð"Ñ-Ô-Ð-ð ð 	<Ý  °UÐ;Ñ;Ô;Ð;àÐ! nÐ&@ðLØ×(Ò(¨Ñ8Ô8Ð8Ð8øÝð Lð Lð LÝ—’ÐEÀsÑKÔKÐKÐKÐKÐKÐKÐKøøøøðLøøøð
 	ÐÐÐå" 5Ð*FÈÑMÔMÐÝÐ&­Ñ-Ô-ð 	KÝ48Ð9IÑ4JÔ4JˆKÔ1õ
 �<Ð!3Ñ4Ô4ð 		SðSÝ˜|Ð-DÀdÑKÔK�Øð @Øð Dð DØ$Ô5×<Ò<¸UÑCÔCÐCðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Døð !Ô1×8Ò8¸Ñ?Ô?Ð?øøÝÕ 1Ð2ð Sð Sð SÝ—’ÐNÐPQÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøð	IÝ�u˜gÑ&Ô&ð Ø—’‘”�øøÝð 	Ið 	Ið 	IÝ�LŠLÐGÑHÔHÐHÐHÐHð	Iøøøð	QØ+Ð+Ð+Ð+Ð+Ð+à#×/Ò/°uÐ/Ñ=Ô=ˆGÝ"¥7¨5°,ÀÑ#CÔ#CÐ#IÀrÑJÔJÐØ#0Ô#D×#TÒ#TØ)×=Ò=Ñ?Ô?Ø+ð $Uñ $ô $Ð ð Ð"Ð'7Ð"Ð@TÐ"Ø×+Ò+Ð-?ÐAQÐ,RÑSÔSÐSÐSð #Ð"Ð"øåð 	Qð 	Qð 	QÝ�LŠLÐOÑPÔPÐPÐPÐPð	QøøøøõI ð  ñ  ð  à=IÐSÕ$ \°5Ñ9Ô9Ð9Ètð 	õ �œÑ)Ô)¨KÑ7¸Ñ;Ô;ˆÝÔÐ; zÐ;Ð;Ð;Ñ<Ô<Ð<Øð 
	Nð	NØ!Ð!Ø'Ý ™HœHØ#Ø%-Ý ™HœHðñ ô ð ð øõ ð Nð Nð NÝ—’ÐIÈ1ÑMÔMÐMÐMÐMÐMÐMÐMøøøøðNøøøð %ØØÝ˜‘X”XØØ (Ý" 5Ð*:¸DÑAÔAð
ð 
ˆð ð 	Ø+>ˆL˜Ñ(Ø˜Ð!Ð!Ô!ð*Ø&ð*ð *ð *ñÐ!Ð!Ñ!ð ÐÐÐÐÐð 	×ÒÑÔÐØÔ"Ð.Ø×"Ò"¨1Ð"Ñ-Ô-Ð-ð ð 	<Ý  °UÐ;Ñ;Ô;Ð;àÐ! nÐ&@ðLØ×(Ò(¨Ñ8Ô8Ð8Ð8øÝð Lð Lð LÝ—’ÐEÀsÑKÔKÐKÐKÐKÐKÐKÐKøøøøðLøøøð
 	ÐÐÐå" 5Ð*FÈÑMÔMÐÝÐ&­Ñ-Ô-ð 	KÝ48Ð9IÑ4JÔ4JˆKÔ1õ
 �<Ð!3Ñ4Ô4ð 		SðSÝ˜|Ð-DÀdÑKÔK�Øð @Øð Dð DØ$Ô5×<Ò<¸UÑCÔCÐCðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Døð !Ô1×8Ò8¸Ñ?Ô?Ð?øøÝÕ 1Ð2ð Sð Sð SÝ—’ÐNÐPQÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøð	IÝ�u˜gÑ&Ô&ð Ø—’‘”�øøÝð 	Ið 	Ið 	IÝ�LŠLÐGÑHÔHÐHÐHÐHð	Iøøøð	QØ+Ð+Ð+Ð+Ð+Ð+à#×/Ò/°uÐ/Ñ=Ô=ˆGÝ"¥7¨5°,ÀÑ#CÔ#CÐ#IÀrÑJÔJÐØ#0Ô#D×#TÒ#TØ)×=Ò=Ñ?Ô?Ø+ð $Uñ $ô $Ð ð Ð"Ð'7Ð"Ð@TÐ"Ø×+Ò+Ð-?ÐAQÐ,RÑSÔSÐSÐSð #Ð"Ð"øåð 	Qð 	Qð 	QÝ�LŠLÐOÑPÔPÐPÐPÐPð	QøøøøøøøðI øøøøðP 	×ÒÑÔÐØÔ"Ð.Ø×"Ò"¨1Ð"Ñ-Ô-Ð-ð ð 	<Ý  °UÐ;Ñ;Ô;Ð;àÐ! nÐ&@ðLØ×(Ò(¨Ñ8Ô8Ð8Ð8øÝð Lð Lð LÝ—’ÐEÀsÑKÔKÐKÐKÐKÐKÐKÐKøøøøðLøøøð
 	ÐÐÐå" 5Ð*FÈÑMÔMÐÝÐ&­Ñ-Ô-ð 	KÝ48Ð9IÑ4JÔ4JˆKÔ1õ
 �<Ð!3Ñ4Ô4ð 		SðSÝ˜|Ð-DÀdÑKÔK�Øð @Øð Dð DØ$Ô5×<Ò<¸UÑCÔCÐCðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Døð !Ô1×8Ò8¸Ñ?Ô?Ð?øøÝÕ 1Ð2ð Sð Sð SÝ—’ÐNÐPQÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøð	IÝ�u˜gÑ&Ô&ð Ø—’‘”�øøÝð 	Ið 	Ið 	IÝ�LŠLÐGÑHÔHÐHÐHÐHð	Iøøøð	QØ+Ð+Ð+Ð+Ð+Ð+à#×/Ò/°uÐ/Ñ=Ô=ˆGÝ"¥7¨5°,ÀÑ#CÔ#CÐ#IÀrÑJÔJÐØ#0Ô#D×#TÒ#TØ)×=Ò=Ñ?Ô?Ø+ð $Uñ $ô $Ð ð Ð"Ð'7Ð"Ð@TÐ"Ø×+Ò+Ð-?ÐAQÐ,RÑSÔSÐSÐSð #Ð"Ð"øåð 	Qð 	Qð 	QÝ�LŠLÐOÑPÔPÐPÐPÐPð	Qøøøøøøs÷  Â;C Ã
C0ÃC+Ã+C0Å$E9 Å9FÆFÉ)AX Ê J ÊAX Ê
J=ÊJ8Ê3AX Ê8J=Ê=AAX Ë?+L+ Ì*AX Ì+
MÌ5MÍAX ÍMÍB9AX ÐP, Ð*e Ð,d-Ð7d(Ñ.Q;Ñ:d(Ñ;
RÒd(ÒRÒA=d(Ô9U Ô?d(Õ 
UÕ
d(ÕUÕA/d(Ö=)W'×&d(×'
W4×1d(×3W4×4Bd(Úd-Úe ÚAX Û/\Ü
\4Ü\/Ü/\4Þ_)Þ_Þ6_)ß_	ß_)ß	_	ß
_)ß)`ß:`à`à#$aá$a/á.a/á3Bc>ã>$d%ä$d%ä(d-ä-e ä1AX åe å BAX ç2!h èAX è
ièh?è:AX è?iéA	AX êAk ëAX ëk1ë.AX ë0k1ë1CAX ïo ïAX ï
pï#pï>AX ðpðQ0AX ÁA9CAD; ÁD:AX ÁD;&AE$ÁE!AX ÁE#AE$ÁE$%AX ÁF
)AF4 ÁF3AX ÁF4AGÁG AX ÁGAGÁGAX ÁGAG ÁGAX ÁGAG-ÁG*AX ÁG,AG-ÁG-EAX ÁL4AM ÁMAX ÁMAMÁMAX ÁMAMÁMAX ÁM!AM* ÁM)AX ÁM*
ANÁM4ANÁNAX ÁNANÁNAX ÁO&AO<ÁO<
AP+ÁPAP&ÁP&AP+ÁQ=AS ÁRAR9ÁR-AS ÁR9AR=	ÁR=AS ÁS AR=	ÁSAS ÁS ATÁS1ATÁTATÁT$AT?ÁT?$AU&ÁU%AU&ÁU*BAW5ÁW5$AXÁXAXÁXAf(ÁX*AAf#ÁY=*AZ(ÁZ'Af#ÁZ(
A[ÁZ2A[Á[Af#Á[A[Á[AAf#Á\Af(Á\Af+ Á]*A^ Á^ 
A^/Á^
A^*Á^*A^/Á`Aa$Á`A`=Á`1Aa$Á`=Aa	ÁaAa$ÁaAa	ÁaAa$Áa$AbÁa5AbÁbAbÁb$AcÁc$Ac*Ác)Ac*Ác.BAe9Áe9$Af ÁfAf Áf#Af(Áf(Af+ Áf+A	Ap.Ág5AhÁh
Ap.Áh
Ah:ÁhAh5Áh0Ap.Áh5Ah:Áh:AAp.ÁjAk/Áj!AkÁj<Ak/ÁkAkÁkAk/ÁkAkÁkAk/Ák.Ap.Ák/Al%Ál Al ÁlAp.Ál Al%Ál%Ap.Ál)$AmÁmAp.Ám$Am5Ám2Ap.Ám4Am5Ám5Ap.Ám9BApÁp Ap.Áp$Ap+Áp(Ap.Áp*Ap+Áp+Ap.c                  óÆ   — ddl }t          5  t          |j        ¦  «        }	 t	          di | ¤Ž}||_        n# ||_        w xY w	 ddd¦  «         n# 1 swxY w Y   ||_        |S )zCBuild a child without leaking its resolved toolset into the parent.r   Nr9   )rã  Ú_CHILD_CONSTRUCTION_LOCKr‡   rO  rh  râ  )r   rã  r1  rc  s       r    Ú$_build_child_preserving_parent_toolsr«  Z  sÖ   € àÐÐÐå	!ð Fð FÝ  Ô!FÑGÔGÐð	FÝ&Ð0Ð0¨Ð0Ð0ˆEà4EˆKÔ1Ð1øÐ4EˆKÔ1ÐEÐEÐEÐEÐ1ðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fð (9€EÔ$Ø€Ls#   ŒA¢6®A¶	?¿AÁAÁAc                 ó8  — | €t           S t          | dd¦  «        }|�|S t          5  t          | dd¦  «        }|€It          j        ¦   «         }	 t          | d|¦  «         n## t          $ r t           cY cddd¦  «         S w xY wddd¦  «         n# 1 swxY w Y   |S )zBReturn the per-parent lock that serializes lifecycle side effects.NÚ_subagent_finalization_lock)Ú"_PARENT_FINALIZATION_FALLBACK_LOCKrJ   Ú_PARENT_FINALIZATION_LOCK_GUARDr…  ÚRLockÚsetattrrL   )rh  rf  s     r    Ú_parent_finalization_lockr²  h  s  € àÐÝ1Ð1Ý�<Ð!>ÀÑEÔE€DØÐØˆÝ	(ð :ð :Ý�|Ð%BÀDÑIÔIˆØˆ<Ý”?Ñ$Ô$ˆDð:Ý˜Ð&CÀTÑJÔJÐJÐJøÝð :ð :ð :Ý9Ð9Ð9ð:ð :ð :ð :ñ :ô :ð :ð :ð:øøøð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð €Ks5   ¦'BÁA ÁBÁ B Á1BÁ?B Â BÂBÂBÚ	task_listÚchildrenc                 ór  — t          |¦  «        5  t          | |¦  «         d„ |D ¦   «         }|rÖt          |dd¦  «        rÅ| D ]Â}	 |                     dd¦  «        }t	          |t
          ¦  «        r+d|cxk    rt          |¦  «        k     rn n||         d         nd}|                     |¦  «        }|j                             ||                     d	d¦  «        pdt          |d
d¦  «        ¬¦  «         Œ³# t          $ r Y Œ¿w xY wt          |d
d¦  «        }		 ddl
m}
 n# t          $ r d}
Y nw xY wd}| D �]W}|                     dd¦  «        }|                     dd¦  «        }	 |r|t          |¦  «        z  }n# t          t          f$ r Y nw xY w|
€Œ_	 |                     dd¦  «        }|                     |¦  «        } |
d|	t          |dd¦  «        pdt          |d
d¦  «        ||                     d	¦  «        |                     d¦  «        t!          |                     d¦  «        ¦  «        t          |                     d¦  «        pddz  ¦  «        ¬¦	  «	         �Œ,# t          $ r  t"                               dd¬¦  «         Y �ŒUw xY w|dk    rŒ	 t          t          |dd¦  «        pd¦  «        }||z   |_        t          |dd¦  «        dv rd|_        t          |dd ¦  «        d!v rd"|_        n,# t          $ r t"                               d#d¬¦  «         Y nw xY wddd¦  «         dS # 1 swxY w Y   dS )$z@Apply host-owned summary, memory, hook, and cost contracts once.c                 ó   — i | ]	\  }}}||“Œ
S r9   r9   )ri   ÚindexÚ_taskrc  s       r    rl   z+_finalize_child_results.<locals>.<dictcomp>ƒ  s!   € ÐKÐKÐKÑ+>¨5°%¸˜% ÐKÐKÐKr"   Ú_memory_managerNr�  rÕ  r   rZ  r‚   rÕ   r•  )Útaskrw   r–  r  r  r#  r6  Úsubagent_stopr  rß   rÛ   rj  rw  )r  r!  r–  r$  rð  Úchild_statusÚtool_call_historyÚduration_msz$subagent_stop hook invocation failedTr&  r4  Úsession_cost_sourcerÙ  >   Nr‚   rÙ  r  r9  rÝ   >   Nr‚   rÝ   Ú	estimatedzSubagent cost rollup failed)r²  rà  rJ   r)   rN   rã   r‰   r¹  Úon_delegationrL   Úhermes_cli.pluginsr  rF   rä   rÎ   r½   rî   r   rM   r4  r¿  r9  )rÏ  r³  r´  rh  Úchild_by_indexrß  r�  Ú	task_goalrc  r  r  Úchildren_cost_totalr$  Ú
child_costÚchild_indexrQ  s                   r    Ú_finalize_child_resultsrÈ  z  s²  € õ 
# <Ñ	0Ô	0ð NKð NKÝ˜g |Ñ4Ô4Ð4ØKÐKÀ(ÐKÑKÔKˆàð 	�G LÐ2CÀTÑJÔJð 	Ø ð ð �ðØ!&§¢¨<¸Ñ!<Ô!<�Jõ & jµ#Ñ6Ô6ð à Ð<Ð<Ò<Ð<­c°)©n¬nÒ<Ð<Ð<Ð<Ð<ð " *Ô-¨fÔ5Ð5ð  ð	 ð +×.Ò.¨zÑ:Ô:�EØ Ô0×>Ò>Ø&Ø$Ÿyšy¨°BÑ7Ô7Ð=¸2Ý)0°¸ÀbÑ)IÔ)Ið ?ñ ô ð ð øõ
 !ð ð ð Ø�Dðøøøõ $ L°,ÀÑEÔEÐð	ØEÐEÐEÐEÐEÐEÐEøÝð 	ð 	ð 	ØˆKˆKˆKð	øøøð "ÐØð 	Tñ 	TˆEØŸš =°$Ñ7Ô7ˆJØŸšÐ#4°cÑ:Ô:ˆJðØð =Ø'­5°Ñ+<Ô+<Ñ<Ð'øøÝ�zÐ*ð ð ð Ø�ðøøøàÐ"ØðTØ#Ÿiši¨°bÑ9Ô9�Ø&×*Ò*¨;Ñ7Ô7�Ø�Ø#Ø&7Ý#*¨<Ð9KÈRÑ#PÔ#PÐ#VÐTVÝ%,¨U°LÀ$Ñ%GÔ%GØ)Ø"'§)¢)¨IÑ"6Ô"6Ø!&§¢¨8Ñ!4Ô!4Ý&FØŸ	š	 ,Ñ/Ô/ñ'ô 'õ !$ U§Y¢YÐ/AÑ%BÔ%BÐ%GÀaÈ4Ñ$OÑ PÔ Pðñ ô ð ñ øõ ð Tð Tð TÝ—’ÐCÈd�ÑSÔSÐSÐSÑSðTøøøð  Ò$Ð$ðKÝÝ˜LÐ*FÈÑLÔLÐSÐPSñô �ð ;BÐDWÑ:W�Ô7Ý˜<Ð)>ÀÑGÔGð Lð ð ð
 8B�LÔ4Ý˜<Ð)>À	ÑJÔJð Oð ð ð
 8C�LÔ4øøÝð Kð Kð KÝ—’Ð:ÀT�ÑJÔJÐJÐJÐJðKøøøð[NKð NKð NKñ NKô NKð NKð NKð NKð NKð NKð NKð NKøøøð NKð NKð NKð NKð NKð NKsÈ   �4L,ÁB/C5Ã4L,Ã5
DÃ?L,ÄDÄL,ÄDÄL,ÄD-Ä*L,Ä,D-Ä-6L,Å$E9Å8L,Å9FÆ
L,ÆFÆL,ÆC
I ÉL,É &J
ÊL,Ê	J
Ê
	L,ÊAK3Ë2L,Ë3&LÌL,ÌLÌL,Ì,L0Ì3L0c                 óÂ   — t          | |||¦  «        }|                     d| ¦  «         d|i}t          |gd„ t          | ¦  «        D ¦   «         |gz   | ||fg|¦  «         |S )zFRun one child and apply the same host lifecycle used by delegate_task.r�  rZ  c                 ó   — g | ]}d di‘ŒS )rZ  r‚   r9   )ri   Ú_s     r    rp   z(_run_child_lifecycle.<locals>.<listcomp>Þ  s   € Ð1Ð1Ð1˜!ˆ&�"ˆÐ1Ð1Ð1r"   )r¨  r?   rÈ  Úrange)r�  rZ  rc  rh  rw   rº  s         r    Ú_run_child_lifecyclerÍ  Ò  s„   € õ ˜z¨4°¸ÑEÔE€FØ
×Ò�l JÑ/Ô/Ð/Ø�Dˆ>€DÝØ	ˆØ1Ð1�u ZÑ0Ô0Ð1Ñ1Ô1°T°FÑ:Ø
�d˜EÐ	"Ð#Øñ	ô ð ð €Mr"   Útasksc                 óD  — t          | t          ¦  «        sdS |                      ¦   «         }|sdS 	 t          j        |¦  «        }n)# t          j        $ r}d d|j        › d�fcY d }~S d }~ww xY wt          |t          ¦  «        sd dt          |¦  «        j	        › d�fS |d fS )Nra   )Nú7Provide either 'goal' (single task) or 'tasks' (batch).z`tasks must be a JSON array of task objects; received a string that could not be parsed as JSON (z).z3tasks must be a JSON array of task objects; parsed z	 instead.)
rN   rO   rP   rš   rÍ   ÚJSONDecodeErrorr�   r‡   r`  rF  )rÎ  ÚrawrÀ   rS   s       r    Ú_recover_tasks_from_json_stringrÓ  å  sù   € õ �e�SÑ!Ô!ð ØˆzØ
�+Š+‰-Œ-€CØð OØNÐNð
Ý”˜C‘”ˆˆøÝÔð 
ð 
ð 
Øð=Ø14´ð=ð =ð =ð
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøõ
 �f�dÑ#Ô#ð 
Øð0Ý�F‰|Œ|Ô$ð0ð 0ð 0ð
ð 	
ð �4ˆ<Ðs   ±A ÁA,ÁA'Á!A,Á'A,z^(todo|task\s*\d+)$z[<[A-Za-z][A-Za-z0-9]*(?:[ _-][A-Za-z0-9]+)+>|\{[A-Za-z][A-Za-z0-9]*(?:[ _-][A-Za-z0-9]+)+\}r   c                 óL  — t          | ¦  «        dk     r	 dS t          | ¦  «        D ]ý\  }}t          |                     dd¦  «        ¦  «                             ¦   «         }d                     |                     ¦   «                              ¦   «         ¦  «        }t           	                    |¦  «        rd|› d|›d�c S t                               |¦  «        }|rd|› d	|                     d
¦  «        ›d�c S t          |¦  «        t          k     rd|› d|›dt          › d�c S ŒþdS )a×  Validate a tasks=[...] batch beyond per-task goal presence.

    Returns an actionable error string, or None when the batch is valid.
    Batch-only by design: the single-`goal` form legitimately uses short
    goals, so these checks must never run on it.

    Duplicate goals are deliberately NOT rejected: identical-goal fan-outs
    are a legitimate pattern (best-of-N / ensemble sampling), and blocking
    them broke real workflows (post-merge audit of #81141).
    rV  z�Batch mode requires at least 2 tasks. For a single task, use the `goal` parameter instead of `tasks`: delegate_task(goal="...", context="...").rZ  r‚   r¦  úTask z has a placeholder goal (za). Replace it with a specific, self-contained description of what the subagent should accomplish.z. goal contains an unexpanded template marker (r   ud   ). Substitute the real value before calling delegate_task â€” subagents cannot resolve placeholders.z goal is too short (z5). Write a specific, self-contained goal of at least z5 characters so the subagent knows exactly what to do.N)r‰   r�  rO   r)   rP   rœ   rÐ   r�  Ú_PLACEHOLDER_GOAL_REÚmatchÚ_TEMPLATE_MARKER_REÚsearchÚgroupÚ_MIN_BATCH_GOAL_LEN)r³  Úirº  rZ  Ú
normalizedÚmarkers         r    Ú_validate_batch_tasksrß    s‹  € õ ˆ9�~„~˜ÒÐð8ð	
ð 	
õ ˜YÑ'Ô'ð ð ‰ˆˆ4Ý�4—8’8˜F BÑ'Ô'Ñ(Ô(×.Ò.Ñ0Ô0ˆØ—X’X˜dŸjšj™lœl×0Ò0Ñ2Ô2Ñ3Ô3ˆ
å×%Ò% jÑ1Ô1ð 	ð.˜ð .ð .°Dð .ð .ð .ðð ð õ
 %×+Ò+¨DÑ1Ô1ˆØð 	ð ˜ð  ð  Ø—L’L ‘O”Oð ð  ð  ðð ð õ ˆt‰9Œ9Õ*Ò*Ð*ð&˜ð &ð &¨tð &ð &å&ð&ð &ð &ðð ð ð +ð ˆ4r"   Ú
backgroundÚoutput_schemac                 ó&  ‡‡<‡=‡>‡?‡@‡A‡B‡C‡D‡E‡F‡G‡H‡I‡J‡K— ‰€t          d¦  «        S t          ¦   «         rt          d¦  «        S t          |¦  «        }|�t          |d¬¦  «        nd}t	          ‰dd¦  «        }	t          ¦   «         }
|	|
k    rt          d|	› d	|
› d
�¦  «        S t          ¦   «         }|                     dt          ¦  «        }|�"||k    rt           
                    d||¦  «         |}	 t          |‰¦  «        }n3# t          $ r&}t          t          |¦  «        ¦  «        cY d}~S d}~ww xY wt          ¦   «         ŠEt          |¦  «        \  }}|rt          |¦  «        S |�|}|rNt!          |t"          ¦  «        r9t%          |¦  «        ‰Ek    r#t          dt%          |¦  «        › d‰E› d�¦  «        S |ŠJnK| r:t!          | t          ¦  «        r%|                      ¦   «         r| ||dœ}|�||d<   |gŠJnt          d¦  «        S ‰Jst          d¦  «        S t)          ‰J¦  «        D ]�\  }}t!          |t*          ¦  «        s*t          d|› dt-          |¦  «        j        › d�¦  «        c S |                     dd¦  «                             ¦   «         st          d|› d�¦  «        c S Œ‚|�5t!          |t"          ¦  «        r t1          ‰J¦  «        }|rt          |¦  «        S ddlm} g }t)          ‰J¦  «        D ]o\  }}|                     d¦  «        }|€t%          ‰J¦  «        dk    r|�|} ||¦  «        \  }}|rt          d|› d|› �¦  «        c S |                     |¦  «         Œpt9          j        ¦   «         ŠGg ŠHt%          ‰J¦  «        ŠFd„ ‰JD ¦   «         ŠIddlm}m ŠKm!}  |‰J|¦  «        \  ŠBŠDŠCddl"m#}  |¦   «         }	 dd l$m%}  |d!d¦  «        Š@n# tL          $ r dŠ@Y nw xY wtO          ‰@¦  «        \  Š?Š>g ŠAt)          ‰J¦  «        D �]Ã\  }} t          |                      d"¦  «        p|¦  «        }!|t%          |¦  «        k     r||         nd}"|                      d#¦  «        }#|"�dd$lm(}$  |$|#|"¦  «        }#tS          dbi d%|“d| d         “d#|#“d&d“d'|d'         “d|“d(‰F“d)‰“d*|d+         “d,|d-         “d.|d/         “d0|d1         “d2|                     d3¦  «        “d4|                     d5¦  «        “d6|                     d7¦  «        “d8|                     d9¦  «        “d"|!“Ž}%|"�4	 |"|%_*        n+# tL          $ r t           
                    d:|¦  «         Y nw xY w|t%          ‰D¦  «        k     r‰D|         nd}&|&�9 |t	          |%d;d¦  «        |&¦  «        |%_+        t          |&j,        ¦  «        |%_-        ‰A                     || |%f¦  «         �ŒÅd<d=œd>t\          d?t*          fˆ>ˆ?ˆ@ˆAˆBˆCˆDˆEˆFˆGˆˆHˆIˆJˆKfd@„Š=|�rddAl"m/}' ddBl0m1}( 	 ddCl$m2})  |)¦   «         }*n# tL          $ r d<}*Y nw xY wd}+|*s!|}+|+rt           3                    dD|+¦  «         d<}*|*sTt           3                    dE¦  «          ‰=¦   «         },t!          |,t*          ¦  «        rdF|,dG<   ti          j5        |,d¬H¦  «        S  |(d¬¦  «        }-	 dd l$m%}  |dId¦  «        }. |d!d¦  «        p‰@Š@|.dJk    r$t          t	          ‰dKd¦  «        pd¦  «        }/|/r|/}-n# tL          $ r d}.Y nw xY w|-s$t          t	          ‰dKd¦  «        pd¦  «        }/|/r|/}-t	          ‰dKd¦  «        }0dL„ ‰AD ¦   «         Š<tm          ‰dM¦  «        rxt	          ‰dNd¦  «        }1‰<D ]d}2	 |1r5|15  ‰j7         8                    |2¦  «         ddd¦  «         n# 1 swxY w Y   n‰j7         8                    |2¦  «         ŒU# t          $ r Y Œaw xY wˆ=fdO„}3ˆ<fdP„}4ˆ<fdQ„}5dR„ ‰JD ¦   «         }6 |'|6|d||d'         |-‰@|+|0|3|4ts          ¦   «         ‰B|5¬S¦  «        }7|7                     dT¦  «        dUk    rZt%          |6¦  «        }8|8dk    rdVn|8› dW�}9dUdX|8|7dY         |6|9dZœ}:‰Crt#          ‰C¦  «        |:d[<   d\|:d]<   ti          j5        |:d¬H¦  «        S t           3                    d^|7                     d_d`¦  «        ¦  «          ‰=¦   «         };t!          |;t*          ¦  «        rda|;dG<   ti          j5        |;d¬H¦  «        S ti          j5         ‰=¦   «         d¬H¦  «        S )ca  
    Spawn one or more child agents to handle delegated tasks.

    Supports two modes:
      - Single: provide goal (+ optional context and role)
      - Batch:  provide tasks array [{goal, context, role}, ...]

    The 'role' parameter controls whether a child can further delegate:
    'leaf' (default) cannot; 'orchestrator' retains the delegation
    toolset and can spawn its own workers, bounded by
    delegation.max_spawn_depth.  Per-task role beats the top-level one.

    Returns JSON with results array, one entry per task.
    Nz.delegate_task requires a parent agent context.zzDelegation spawning is paused. Clear the pause via the TUI (`p` in /agents) or the `delegation.pause` RPC before retrying.Fr"  rÛ  r   z&Delegation depth limit reached (depth=z, max_spawn_depth=z‡). Raise delegation.max_spawn_depth in config.yaml if deeper nesting is required (no hard ceiling, but each level multiplies API cost).rÐ  zidelegate_task: ignoring caller-supplied max_iterations=%s; using delegation.max_iterations=%s from configzToo many tasks: z* provided, but max_concurrent_children is z‡. Either reduce the task count, split into multiple delegate_task calls, or increase delegation.max_concurrent_children in config.yaml.)rZ  r[  rz   rá  rÐ  zNo tasks provided.rÕ  z must be an object, got ú.rZ  r‚   z is missing a 'goal'.)Úcoerce_output_schemar/   z output_schema invalid: c                 ó.   — g | ]}|d          dd…         ‘ŒS )rZ  Nr@  r9   rr  s     r    rp   z!delegate_task.<locals>.<listcomp>Ù  s$   € Ð5Ð5Ð5 a�1�V”9˜S˜b˜S”>Ð5Ð5Ð5r"   )Úcreate_live_transcriptsÚupdate_manifest_statusesÚwrap_progress_callback)Ú_current_origin_session_idr   r  rz   r[  )Úappend_output_contractr�  rl  r‹  rŽ  rh  rÑ  rð  rÒ  rÉ  rÓ  rë  rÔ  rõ  rÕ  r  rÖ  Úmax_output_tokensr×  r   rØ  rž  z*Could not attach output schema to child %dr‘  T©Úhonor_parent_interruptrí  r   c                 óÜ	  •— ‰*dk    rA‰%d         \  }}}t          ||d         |‰,‰$pd‰#‰"¬¦  «        }‰-                     |¦  «         �nŽd}t          ‰,dd¦  «        }ddlm}  |‰)¬¦  «        5 }i }	‰%D ]N\  }
}}t          j        ¦   «         }|                     |j        t           |
|d         |‰,‰$pd‰#‰"¬	¦	  «	        }|
|	|<   ŒOd
„ ‰%D ¦   «         }t          |	 
                    ¦   «         ¦  «        }|�r·| rât          ‰,dd¦  «        du rÏ|D ]Ê}|	|         }|                     ¦   «         rf	 |                     ¦   «         }n|# t          $ rC}|ddt          |¦  «        ddt          |                     |¦  «        dd¦  «        dœ}Y d}~n4d}~ww xY w|dddddt          |                     |¦  «        dd¦  «        dœ}‰-                     |¦  «         |dz  }ŒË�nÓddlm}m}  ||d|¬¦  «        \  }}|D �]³}	 |                     ¦   «         }nX# t          $ rK}|	|         }|ddt          |¦  «        ddt          |                     |¦  «        dd¦  «        dœ}Y d}~nd}~ww xY w‰-                     |¦  «         |dz  }|d         }|t'          ‰.¦  «        k     r‰.|         nd|› �}|                     dd¦  «        }|                     dd¦  «        }|dk    rdnd}‰*|z
  }|› d|dz   › d‰*› d |› d!|› d"�
}|r:	 |                     |¦  «         n6# t          $ r t+          ‰,d#|› �¦  «         Y nw xY wt+          ‰,d#|› �¦  «         |r`|dk    rZ	 |                     d$|› d%|dk    rd&nd'› d(�¦  «         �Œ€# t          $ r&}t.                               d)|¦  «         Y d}~�Œ«d}~ww xY w�Œµ|�°·ddd¦  «         n# 1 swxY w Y   ‰-                     d*„ ¬+¦  «         t5          ‰-‰/‰%‰,¦  «         t7          t9          j        ¦   «         ‰+z
  d,¦  «        }‰-D ]·}|                     dd-¦  «        }t=          |t>          ¦  «        r%d|cxk    rt'          ‰(¦  «        k     rn n‰(|         nd} | �a	 |                       |¦  «         n,# t          $ r t.                               d.d¬/¦  «         Y nw xY w|t'          ‰'¦  «        k     r‰'|         |d0<   Œ¸ ‰0‰&‰-¦  «         ‰-|d1œ}!‰'rtC          ‰'¦  «        |!d2<   |!S )3uO  Run all built children (1 or N), join on them, aggregate results,
        fire subagent_stop hooks + cost rollup, and return the combined result
        dict. Used by BOTH the synchronous path and the background runner. In
        the background case this whole function runs on the daemon executor, so
        the parent turn isn't blocked â€” but the batch still JOINS on itself
        here (all children must finish) before producing ONE consolidated
        results block. That is the contract: fan-out runs in the background,
        waits on each other, and returns together.
        r/   r   rZ  NrX   r�  r	  )r  )r�  rZ  rc  rh  rY   rZ   r[   c                 ó   — i | ]	\  }}}||“Œ
S r9   r9   )ri   rÜ  rË  rc  s       r    rl   zAdelegate_task.<locals>._execute_and_aggregate.<locals>.<dictcomp>r  s    € Ð"JÐ"JÐ"J±°°A°u 1 eÐ"JÐ"JÐ"Jr"   r  FTrá   r5  rL  r.  u9   Parent agent interrupted â€” child did not finish in time)rê  ÚFIRST_COMPLETEDr=  )ró   Úreturn_whenr�  rÕ  rj  rß   rØ  r0  u   âœ“u   âœ—z [rÃ  r’  z  (zs)ry  r°  z taskrv  r‚   z
 remainingzSpinner update_text failed: %sc                 ó   — | d         S )Nr�  r9   )ro   s    r    ú<lambda>z?delegate_task.<locals>._execute_and_aggregate.<locals>.<lambda>Ò  s
   €  q¨¤€ r"   )r­   rV  rÕ  zLive transcript finalize failedr&  Úlive_transcript)rÏ  Útotal_duration_secondsÚlive_transcripts)"r¨  rŒ   rJ   rX  r
  rZ  r[  r\  r]  r-  rÒ   Údonerw   rL   rO   r)   Úconcurrent.futuresrê  rð  r‰   r²  r‡  Úupdate_textr   rM   ÚsortrÈ  r_  rM  rN  rN   rã   Úfinalizer‡   )1rí  Ú_iÚ_trc  rw   Úcompleted_countÚspinner_refr
  ÚexecutorÚfuturesrÜ  rs  Úchild_contextÚfutureÚ_child_by_indexrR   Úfrr  rß  rS   Ú_cf_waitrð  r÷  ÚlabelÚdurrß   ÚiconÚ	remainingÚcompletion_liner   Útotal_durationÚ_idxru  ÚcombinedÚ_origin_owner_session_recordÚ_origin_owner_transportÚ_origin_ui_session_idr´  Úlive_deleg_idÚ
live_pathsÚlive_writersÚmax_childrenÚn_tasksÚoverall_startrh  rÏ  Útask_labelsr³  rç  s1                                     €€€€€€€€€€€€€€€r    Ú_execute_and_aggregatez-delegate_task.<locals>._execute_and_aggregate:  sa  ø€ ð �aŠ<ˆ<à$ QœK‰MˆB��EÝ&ØØ�6”
ØØØ!6Ð!>¸$Ø 7Ø%Aðñ ô ˆFð �NŠN˜6Ñ"Ô"Ð"Ñ"ð  ˆOÝ! ,Ð0CÀTÑJÔJˆKð
 CÐBÐBÐBÐBÐBØ)Ð)°lÐCÑCÔCð uRÀxØ�Ø#+ð (ð (‘K�A�q˜%Ý$/Ô$<Ñ$>Ô$>�MØ%Ÿ_š_Ø%Ô)Ý)Ø#$Ø˜vœYØ#Ø%1Ø)>Ð)FÀ$Ø(?Ø-Ið -ñ 
ô 
�Fð '(�G˜F‘O�Oð #KÐ"JÀÐ"JÑ"JÔ"J�å˜gŸlšl™nœnÑ-Ô-�Øñ ZRà.ð&å# LÐ2HÈ%ÑPÔPÐTXÐXÐXð
 ")ð 1ð 1˜AØ")¨!¤*˜CØ Ÿvšv™xœxð "ð!&Ø,-¯HªH©J¬J E EøÝ'0ð !&ð !&ð !&à69Ø29Ø37Ý14°S±´Ø56Ø<=Ý7>Ø,;×,?Ò,?ÀÑ,DÔ,DÐFVÐX\ñ8*ô 8*ð
-&ð 
-& E E E E E Eøøøøð!&øøøð 36Ø.;Ø/3Ø-hØ12Ø89Ý3:Ø(7×(;Ò(;¸CÑ(@Ô(@ÐBRÐTXñ4&ô 4&ð
)"ð 
)" ð $ŸNšN¨5Ñ1Ô1Ð1Ø+¨qÑ0˜O˜OÙàTÐTÐTÐTÐTÐTÐTÐTà$, HØ¨¸/ð%ñ %ô %‘M�D˜'ð #'ð ,Rñ ,R˜ðØ$*§M¢M¡O¤O˜E˜EøÝ(ð ð ð Ø")¨&¤/˜Cà.1Ø*1Ø+/Ý),¨S©¬Ø-.Ø45Ý/6Ø$3×$7Ò$7¸Ñ$<Ô$<Ð>NÐPTñ0"ô 0"ð
%ð 
%˜E˜E˜E˜E˜E˜Eøøøøðøøøð  Ÿš uÑ-Ô-Ð-Ø'¨1Ñ,˜ð $ LÔ1˜à03µc¸+Ñ6FÔ6FÒ0FÐ0F˜K¨Ô,Ð,ÈMÐTWÈMÈMð ð $ŸišiÐ(:¸AÑ>Ô>˜Ø!&§¢¨8°SÑ!9Ô!9˜Ø(.°+Ò(=Ð(=˜u˜uÀ5˜Ø$+¨oÑ$=˜	Ø-1Ð*YÐ*Y°S¸±UÐ*YÐ*Y¸WÐ*YÐ*YÈÐ*YÐ*YÐRUÐ*YÐ*YÐ*Y˜Ø&ð Wð[Ø +× 7Ò 7¸Ñ HÔ HÐ HÐ HøÝ#,ð [ð [ð [Ý 4°\ÐCYÈÐCYÐCYÑ ZÔ ZÐ ZÐ ZÐ Zð[øøøõ 1°Ð?UÀOÐ?UÐ?UÑVÔVÐVð 'ð R¨9°qª=¨=ðRØ +× 7Ò 7Ø$e¨IÐ$eÐ$eÀ9ÐPQÂ>À>¸C¸CÐWYÐ$eÐ$eÐ$eñ!"ô !"ð !"ñ !"øõ $-ð Rð Rð RÝ &§¢Ð-MÈqÑ QÔ QÐ QÐ QÐ QÐ QÐ QÑ QøøøøðRøøøùðs ñ ZRð7uRð uRð uRñ uRô uRð uRð uRð uRð uRð uRð uRøøøð uRð uRð uRð uRðp �LŠLÐ6Ð6ˆLÑ7Ô7Ð7õ 	  ¨°H¸lÑKÔKÐKå�tœ~Ñ/Ô/°-Ñ?ÀÑCÔCˆð ð 	@ð 	@ˆEØ—9’9˜\¨2Ñ.Ô.ˆDõ ˜d¥CÑ(Ô(ðØ-.°$Ð-JÐ-JÒ-JÐ-J½¸\Ñ9JÔ9JÒ-JÐ-JÐ-JÐ-JÐ-Jð ˜TÔ"Ð"àð ð
 ˆ~ðSØ—K’K Ñ&Ô&Ð&Ð&øÝ ð Sð Sð SÝ—L’LÐ!BÈT�LÑRÔRÐRÐRÐRðSøøøà�#˜j™/œ/Ò)Ð)Ø/9¸$Ô/?�EÐ+Ñ,øØ Ð  °Ñ8Ô8Ð8ð Ø&4ð$
ð $
ˆð ð 	<Ý+/°
Ñ+;Ô+;ˆHÐ'Ñ(ØˆsÊ   Á.B9N5Ä(D=Ä<N5Ä=
F
Å9FÆ N5ÆF
Æ
A*N5Ç5H
È	N5È

IÈAIÉN5ÉIÉBN5Ë6LÌN5ÌL,Ì)N5Ì+L,Ì,N5Í$M1Í/N5Í1
N!Í;NÎN5ÎN!Î!N5Î5N9Î<N9Ñ&Q<Ñ<&R%Ò$R%)Údispatch_async_delegation_batch)Úget_current_session_key)Úasync_delivery_supporteduÜ   delegate_task: async delivery unsupported on this session, but a session id is bound (%s) â€” dispatching in the background and waking the session via self-post when it completes instead of forcing synchronous execution.zkdelegate_task: async delivery unsupported on this session runtime; running the batch synchronously instead.u  background=true is not available in this session â€” it cannot receive a detached subagent result after the turn ends (a one-shot runner such as `hermes -z`, a cron job, a Kanban worker, or a stateless HTTP endpoint). The subagent(s) ran SYNCHRONOUSLY and the result is included above.Únote)r—   ÚHERMES_SESSION_SOURCEÚtuir•  c                 ó   — g | ]\  }}}|‘Œ	S r9   r9   )ri   rË  rÔ  s      r    rp   z!delegate_task.<locals>.<listcomp>\  s   € Ð5Ð5Ð5™y  1 a˜Ð5Ð5Ð5r"   r  r  c                  ó   •—  ‰ d¬¦  «        S )NFrì  r9   )r  s   €r    Ú_batch_runnerz$delegate_task.<locals>._batch_runnerm  s   ø€ ð *Ð)ÀÐGÑGÔGÐGr"   c                  ó†   •— ‰D ]<} 	 t          | d¦  «        }|st          | d¦  «        rd| _        Œ-# t          $ r Y Œ9w xY wd S )NzAsync delegation cancelledr  T)r   r,  r  rL   )Ú_cr.  Ú_child_agentss     €r    Ú_batch_interruptz'delegate_task.<locals>._batch_interruptr  st   ø€ Ø#ð ð �ðÝ"8¸Ð=YÑ"ZÔ"Z�KØ&ð 7­7°2Ð7MÑ+NÔ+Nð 7Ø26˜Ô/øøÝ ð ð ð Ø�Dðøøøðð s   ‡)1±
>½>c                  óv  •— g } d}‰D ]¡}	 |                      ¦   «         }|                     d¦  «        }|                      |                     dd¦  «        ||                     d¦  «        f¦  «         |pt          |¦  «        }Œ}# t          $ r |                      d ¦  «         Y Œžw xY wt          | ¦  «        |fS )NFræ  rç  r   rè  )r‹  r)   rŒ   r5   rL   r.  )r�   Úin_toolr$  r„  Ú_toolr%  s        €r    Ú_batch_progressz&delegate_task.<locals>._batch_progress{  sÝ   ø€ ð ˆEØˆGØ#ð 'ð '�ð'Ø!×6Ò6Ñ8Ô8�HØ$ŸLšL¨Ñ8Ô8�EØ—L’Là$ŸLšLÐ)9¸1Ñ=Ô=Ø!Ø$ŸLšLÐ);Ñ<Ô<ðñô ð ð &Ð4­¨e©¬�G�GøÝ ð 'ð 'ð 'Ø—L’L Ñ&Ô&Ð&Ð&Ð&ð'øøøå˜‘<”< Ð(Ð(s   ‹A9BÂB'Â&B'c                 ó   — g | ]
}|d          ‘ŒS )rZ  r9   rr  s     r    rp   z!delegate_task.<locals>.<listcomp>›  s   € Ð/Ð/Ð/ �!�F”)Ð/Ð/Ð/r"   )Úgoalsr[  rl  rz   r‹  Úsession_keyÚorigin_ui_session_idÚorigin_session_idr  ÚrunnerÚinterrupt_fnr	  Údelegation_idÚprogress_fnrß   Ú
dispatchedu¾   Subagent is running in the background. You and the user can keep working; its full result re-enters the conversation as a new message when it finishes. Do not wait or poll â€” just continue.uý    subagents are running in parallel in the background. You and the user can keep working; they wait on each other and their consolidated results re-enter the conversation as a single message once ALL of them finish. Do not wait or poll â€” just continue.rà  r2  )rß   Úmoderµ  r2  r,  r  rö  zÈEach subagent streams a human-readable transcript of its operations to the file listed above (append-only, one per task). Read or `tail -f` these paths at any time to watch a child work while it runs.Úlive_transcripts_hintzZdelegate_task: async pool at capacity (%s); running the whole batch synchronously instead.rá   Úrejecteda  The background delegation pool was at capacity (delegation.max_concurrent_children), so the subagent(s) ran SYNCHRONOUSLY and the result is included above. Raise delegation.max_concurrent_children in config.yaml to allow more concurrent background delegations.r9   ):Ú
tool_errorr:   rý   r   rJ   r  r(   r)   ÚDEFAULT_MAX_ITERATIONSr   rM   Ú_resolve_delegation_credentialsr½   rO   r  rÓ  rN   r‡   r‰   rP   r�  r†   r`  rF  rß  rj  rä  rŒ   rM  rN  Útools.delegation_live_logræ  rç  rè  Útools.async_delegationré  rT  r  rL   rd   rê  r«  r*  r‘  r£   Ú_live_transcript_pathr5   r  Útools.approvalr  r  Úinforš   r›   r,  r  rc  r  )LrZ  r[  rÎ  rÐ  rz   rà  rá  rh  Útop_rolerŠ  r=  r+   Údefault_max_iterÚeffective_max_iterÚcredsrS   Úrecovered_tasksÚtasks_errorÚsingle_taskrÜ  rº  Úbatch_errorrä  Útask_schemasÚ
raw_schemaÚcoerced_schemaÚ
schema_errræ  rè  ré  Ú_origin_wake_sidr  rs  r?  Ú_task_schemar}  rê  rc  Ú_writerr  r  r  Ú	_async_okÚ	_wake_sidÚ_sync_resultÚ_session_keyÚ_sourceÚ_agent_session_idÚ_parent_session_idÚ_ac_lockr$  r"  r&  r*  Ú_goalsÚdispatchÚnr  rŸ  Ú_cap_resultr%  r  r  r  r  r´  r  r  r  r  r  r  rÏ  r  r³  rç  sL          `                                                    @@@@@@@@@@@@@@@@r    r   r   <  s  øøøøøøøøøøøøøøøøø€ ð0 ÐÝÐJÑKÔKÐKõ
 ÑÔð 
ÝðNñ
ô 
ð 	
õ ˜tÑ$Ô$€Hð @JÐ?U• °UÐ;Ñ;Ô;Ð;Ð[`€Jõ �LÐ"3°QÑ7Ô7€EÝ$Ñ&Ô&€IØ�	ÒÐÝð%°Uð %ð %Ø(ð%ð %ð %ñ
ô 
ð 	
õ ‰.Œ.€CØ—w’wÐ/Õ1GÑHÔHÐð Ð! nÐ8HÒ&HÐ&HÝ�Šð=àÐ,ñ	
ô 	
ð 	
ð
 *Ðð$Ý/°°\ÑBÔBˆˆøÝð $ð $ð $Ý�#˜c™(œ(Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#øøøøð$øøøõ 0Ñ1Ô1€LÝ#BÀ5Ñ#IÔ#IÑ €O�[Øð 'Ý˜+Ñ&Ô&Ð&ØÐ"Øˆàð U•˜E¥4Ñ(Ô(ð UÝˆu‰:Œ:˜Ò$Ð$ÝðF¥3 u¡:¤:ð Fð FØ.:ðFð Fð Fñô ð ð ˆ	ˆ	Ø	ð U•*˜T¥3Ñ'Ô'ð U¨D¯JªJ©L¬Lð UØ/3ÀÐQYÐ&ZÐ&ZˆØÐ$Ø+8ˆK˜Ñ(Ø �Mˆ	ˆ	åÐSÑTÔTÐTàð 0ÝÐ.Ñ/Ô/Ð/õ ˜YÑ'Ô'ð @ð @‰ˆˆ4Ý˜$¥Ñ%Ô%ð 	ÝØI˜ÐIÐIµ4¸±:´:Ô3FÐIÐIÐIñô ð ð ð ð �xŠx˜ Ñ#Ô#×)Ò)Ñ+Ô+ð 	@ÝÐ> aÐ>Ð>Ð>Ñ?Ô?Ð?Ð?Ð?ð	@ð Ð�Z¨­tÑ4Ô4ÐÝ+¨IÑ6Ô6ˆØð 	+Ý˜kÑ*Ô*Ð*ð DÐCÐCÐCÐCÐCà35€LÝ˜YÑ'Ô'ð ,ð ,‰ˆˆ4Ø—X’X˜oÑ.Ô.ˆ
ØÐ¥# i¡.¤.°AÒ"5Ð"5¸-Ð:SØ&ˆJØ%9Ð%9¸*Ñ%EÔ%EÑ"ˆ˜
Øð 	OÝÐM aÐMÐMÀÐMÐMÑNÔNÐNÐNÐNØ×Ò˜NÑ+Ô+Ð+Ð+å”NÑ$Ô$€MØ€Gå�)‰nŒn€Gà5Ð5¨9Ð5Ñ5Ô5€Kðð ð ð ð ð ð ð ð ð ð /FÐ.EØ�7ñ/ô /Ñ+€M�< ð BÐAÐAÐAÐAÐAà1Ð1Ñ3Ô3Ðð#Ø;Ð;Ð;Ð;Ð;Ð;à / Ð0FÈÑ KÔ KÐÐøÝð #ð #ð #Ø "ÐÐÐð#øøøõ 	)Ð)>Ñ?Ô?ñ :ÐÐ9ð €HÝ˜)Ñ$Ô$ð 3'ñ 3'‰ˆˆ1õ )¨¯ª¨v©¬Ð)B¸(ÑCÔCˆð +,­c°,Ñ.?Ô.?Ò*?Ð*?�| A”�ÀTˆØŸš˜yÑ)Ô)ˆØÐ#ØMÐMÐMÐMÐMÐMà3Ð3°NÀLÑQÔQˆNÝ4ð 
ð 
ð 
Ø�qð
à�6”�ð
ð #�Nð
ð �Tð
ð ˜”.�.ð
ð .Ð-ð
ð �wð
ð &˜ð
ð $ JÔ/Ð/ð
ð $ JÔ/Ð/ð
ð # 9Ô-Ð-ð
ð $ JÔ/Ð/ð
ð (-§y¢yÐ1DÑ'EÔ'EÐ'Eð
ð  !&§	¢	Ð*=Ñ >Ô >Ð >ð!
ð" "'§¢¨9Ñ!5Ô!5Ð!5ð#
ð$ $Ÿiši¨Ñ/Ô/Ð/ð%
ð&  �ð'
ˆð. Ð#ðNØ0<�Ô-Ð-øÝð Nð Nð NÝ—’ÐIÈ1ÑMÔMÐMÐMÐMðNøøøð &'­¨\Ñ):Ô):Ò%:Ð%:�,˜q”/�/ÀˆØÐØ+AÐ+AÝ˜Ð7¸Ñ>Ô>Àñ,ô ,ˆEÔ(õ +.¨g¬lÑ*;Ô*;ˆEÔ'Ø�Š˜˜A˜u˜Ñ&Ô&Ð&Ñ&àAEð |ð |ð |½$ð |Í$ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ðJ ñ c;ØJÐJÐJÐJÐJÐJØ:Ð:Ð:Ð:Ð:Ð:ð	ØHÐHÐHÐHÐHÐHØ0Ð0Ñ2Ô2ˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøð ˆ	Øð 	!ð )ˆIØð 	!Ý—’ð!ð
 ñô ð ð !�	àð 	@Ý�KŠKðDñô ð ð 2Ð1Ñ3Ô3ˆLÝ˜,­Ñ-Ô-ð ðFð ˜VÑ$õ ”:˜l¸Ð?Ñ?Ô?Ð?à.Ð.°rÐ:Ñ:Ô:ˆð	Ø?Ð?Ð?Ð?Ð?Ð?à%�oÐ&=¸rÑBÔBˆGð  �Ð 6¸Ñ;Ô;ÐTÐ?Tð "ð ˜%ÒÐÝ$'­°¸lÈBÑ(OÔ(OÐ(UÐSUÑ$VÔ$VÐ!Ø$ð 5Ø#4�LøøÝð 	ð 	ð 	ØˆGˆGˆGð	øøøàð 	1õ !$¥G¨L¸,ÈÑ$KÔ$KÐ$QÈrÑ RÔ RÐØ ð 1Ø0�Ý$ \°<ÀÑFÔFÐØ5Ð5¨HÐ5Ñ5Ô5ˆõ
 �<Ð!3Ñ4Ô4ð 
	Ý˜|Ð-DÀdÑKÔKˆHØ#ð ð �ðØð AØ%ð Eð EØ(Ô9×@Ò@ÀÑDÔDÐDðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eøð %Ô5×<Ò<¸RÑ@Ô@Ð@øøÝ!ð ð ð Ø�Dðøøøð	Hð 	Hð 	Hð 	Hð 	Hð
	ð 	ð 	ð 	ð 	ð	)ð 	)ð 	)ð 	)ð 	)ð@ 0Ð/ YÐ/Ñ/Ô/ˆØ2Ð2ØØð ØØ˜”.Ø$Ø!6Ø'Ø0Ø Ø)Ý6Ñ8Ô8ð (Ø'ð%
ñ 
ô 
ˆð* �<Š<˜Ñ!Ô! \Ò1Ð1Ý�F‘”ˆAð ˜’6�6ð	ð ð
 ð &ð &ð &ð ð 'Ø$ØØ!)¨/Ô!:ØØðð ˆGð ð Ý.2°:Ñ.>Ô.>�Ð*Ñ+ð2ð Ð/Ñ0õ ”:˜g°EÐ:Ñ:Ô:Ð:õ
 	�Šð+à�LŠL˜ *Ñ-Ô-ñ	
ô 	
ð 	
ð
 -Ð,Ñ.Ô.ˆÝ�k¥4Ñ(Ô(ð 	ð:ð ˜Ñõ Œz˜+°EÐ:Ñ:Ô:Ð:õ Œ:Ð,Ð,Ñ.Ô.¸UÐCÑCÔCÐCs�   Ã/D  Ä 
D0Ä
D+Ä%D0Ä+D0Î>O ÏO ÏO Ô&T.Ô.%UÕUØ X ØX ØX Ú+A
[6 Û6\Ü\Ý1_Ý5^Þ_Þ^ 	Þ _Þ#^ 	Þ$_ß
_ß_rM  rN  c                 óŠ  — | st          |dd¦  «        S t          |dd¦  «        pd}t          |dd¦  «        }| dk    r�	 ddlm}m}  ||¦  «        }|€dS  |t          |dd¦  «        ¦  «        }|�|dk    r
|�||k    r|S  ||¦  «        }	|	�|	                     ¦   «         r|	S n3# t
          $ r&}
t                               d	||
¦  «         Y d}
~
nd}
~
ww xY wdS |�| |k    r|S 	 dd
lm}  || ¦  «        }	|	�|	                     ¦   «         r|	S n3# t
          $ r&}
t                               d| |
¦  «         Y d}
~
nd}
~
ww xY wdS )aÁ  Resolve a credential pool for the child agent.

    Rules:
    1. Same provider as the parent -> share the parent's pool so cooldown state
       and rotation stay synchronized.
    2. Different provider -> try to load that provider's own pool.
    3. No pool available -> return None and let the child keep the inherited
       fixed credential behavior.

    Custom endpoints are a special case: every direct ``delegation.base_url``
    runtime collapses to ``provider="custom"``, so bare provider equality would
    treat two *different* custom endpoints as interchangeable and let the child
    inherit the parent's pool. Leasing from that pool then overwrites the
    child's delegated ``base_url`` with the parent's endpoint (issue #7833).
    We therefore resolve custom runtimes by endpoint identity (the
    ``custom:<name>`` pool key derived from the base_url) and only share the
    parent's pool when both resolve to the *same* custom endpoint.
    r:  Nrð  r‚   r   r   )Úget_custom_provider_pool_keyÚ	load_poolrÉ  zDCould not resolve custom credential pool for child endpoint '%s': %s)r]  z:Could not load credential pool for child provider '%s': %s)rJ   Úagent.credential_poolr\  r]  Úhas_credentialsrL   r   rM   )rM  rh  rN  Úparent_providerÚparent_poolr\  r]  Ú	child_keyÚ
parent_keyÚpoolrS   s              r    r9  r9  è  s  € ð. ð ?Ý�|Ð%7¸Ñ>Ô>Ð>å˜l¨J¸Ñ=Ô=ÐCÀ€OÝ˜,Ð(:¸DÑAÔA€Kð
 ˜XÒ%Ð%ð	ØUÐUÐUÐUÐUÐUÐUÐUà4Ð4Ð5GÑHÔHˆIØÐ ð
 �tð 6Ð5Ý˜ j°$Ñ7Ô7ñô ˆJð Ð'Ø# xÒ/Ð/ØÐ*Ø )Ò+Ð+à"Ð"à�9˜YÑ'Ô'ˆDØÐ D×$8Ò$8Ñ$:Ô$:ÐØ�øøÝð 	ð 	ð 	Ý�LŠLØVØ"Øñô ð ð ð ð ð ð øøøøð	øøøð ˆtàÐÐ#5¸Ò#HÐ#HØÐð
Ø3Ð3Ð3Ð3Ð3Ð3àˆyÐ+Ñ,Ô,ˆØÐ × 4Ò 4Ñ 6Ô 6ÐØˆKøøÝð 
ð 
ð 
Ý�ŠØHØØñ	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøð ˆ4s;   ¿B& Á+B& Â"B& Â&
CÂ0CÃCÃ&(D Ä
E ÄD;Ä;E r+   c                 ó^  — t          |                      d¦  «        pd¦  «                             ¦   «         pd}t          |                      d¦  «        pd¦  «                             ¦   «         pd}t          |                      d¦  «        pd¦  «                             ¦   «         pd}t          |                      d¦  «        pd¦  «                             ¦   «         pd}t          |                      d¦  «        pd¦  «                             ¦   «                              ¦   «         pd}h d£}|pd                     ¦   «                              ¦   «         }||v }	|rw|	su|}
d	d
lm} |                     ¦   «         }d} ||¦  «        pd}t          |¦  «        dk    r	d|v rd}d}n t          |¦  «        dk    rd}d}nd|v rd}d}|dv r|}||||
|dœS |s
|dddddddœS 	 d	dlm}  |||¬¦  «        }n)# t          $ r}t          d|› d|› d�¦  «        |‚d}~ww xY w|                     dd¦  «        }
|
st          d|› d�¦  «        ‚|p|                     d¦  «        pd|                     d¦  «        t          k    r|n|                     d¦  «        |                     d¦  «        |
|                     d¦  «        t          |                     d¦  «        pi ¦  «        |                     d ¦  «        |                     d!¦  «        t          |                     d"¦  «        pg ¦  «        d#œ	S )$u  Resolve credentials for subagent delegation.

    If ``delegation.base_url`` is configured, subagents use that direct
    OpenAI-compatible endpoint. ``delegation.api_key`` overrides the key; when
    omitted, ``api_key`` is returned as ``None`` so ``_build_child_agent``
    inherits the parent agent's key (``effective_api_key = override_api_key or
    parent_api_key``). This lets providers that store their key outside
    ``OPENAI_API_KEY`` (e.g. ``MINIMAX_API_KEY``, ``DASHSCOPE_API_KEY``) work
    without a duplicate config entry.

    Otherwise, if ``delegation.provider`` is configured, the full credential
    bundle (base_url, api_key, api_mode, provider) is resolved via the runtime
    provider system â€” the same path used by CLI/gateway startup. This lets
    subagents run on a completely different provider:model pair.

    If neither base_url nor provider is configured, returns None values so the
    child inherits everything from the parent agent.

    Raises ValueError with a user-friendly message on credential failure.
    r‹  r‚   Nrð  rÉ  rë  rõ  >   úgoogle-genaiÚgoogleÚvertexÚbedrockr   )Ú_detect_api_mode_for_urlr   rø  zchatgpt.comz/backend-api/codexzopenai-codexÚcodex_responseszapi.anthropic.comÚ	anthropicÚanthropic_messageszapi.kimi.com/coding>   rk  rø  rm  )r‹  rð  rÉ  rë  rõ  )r‹  rð  rÉ  rë  rõ  r  rë  )Úresolve_runtime_provider)Ú	requestedÚtarget_modelz$Cannot resolve delegation provider 'z': zÒ. Check that the provider is configured (API key set, valid provider name), or set delegation.base_url/delegation.api_key for a direct endpoint. Available providers: openrouter, nous, zai, kimi-coding, minimax.zDelegation provider 'z]' resolved but has no API key. Set the appropriate environment variable or run 'hermes auth'.r  rë  r   rž  )	r‹  rð  rÉ  rë  rõ  r  rë  r   rž  )rO   r)   rP   rÐ   Úhermes_cli.runtime_providerrj  r   rn  rL   r½   Ú_RUNTIME_PROVIDER_CUSTOMr†   r‡   )r+   rh  Úconfigured_modelÚconfigured_providerÚconfigured_base_urlÚconfigured_api_keyÚconfigured_api_modeÚ_NATIVE_SDK_PROVIDERSÚ_provider_lowerÚ_is_native_sdk_providerrë  rj  Ú
base_lowerrð  rõ  rn  rˆ  rS   s                     r    r:  r:  =  s  € õ* ˜3Ÿ7š7 7Ñ+Ô+Ð1¨rÑ2Ô2×8Ò8Ñ:Ô:ÐB¸dÐÝ˜cŸgšg jÑ1Ô1Ð7°RÑ8Ô8×>Ò>Ñ@Ô@ÐHÀDÐÝ˜cŸgšg jÑ1Ô1Ð7°RÑ8Ô8×>Ò>Ñ@Ô@ÐHÀDÐÝ˜SŸWšW YÑ/Ô/Ð5°2Ñ6Ô6×<Ò<Ñ>Ô>ÐFÀ$ÐÝ˜cŸgšg jÑ1Ô1Ð7°RÑ8Ô8×>Ò>Ñ@Ô@×FÒFÑHÔHÐPÈDÐð LÐKÐKÐØ*Ð0¨b×7Ò7Ñ9Ô9×?Ò?ÑAÔA€OØ-Ð1FÐFÐàð ,
Ð#:ð ,
ð %ˆð 	IÐHÐHÐHÐHÐHà(×.Ò.Ñ0Ô0ˆ
ØˆØ+Ð+Ð,?Ñ@Ô@ÐVÐDVˆåÐ1Ñ2Ô2°mÒCÐCØ$¨
Ð2Ð2à%ˆHØ(ˆHˆHÝÐ2Ñ3Ô3Ð7JÒJÐJØ"ˆHØ+ˆHˆHØ" jÐ0Ð0ØˆHØ+ˆHð Ð"_Ð_Ð_Ø*ˆHð &Ø Ø+ØØ ð
ð 
ð 	
ð ð 

ð &ØØØØØ!%Ø!%ð
ð 
ð 	
ð
ØHÐHÐHÐHÐHÐHà*Ð*Ð5HÐWgÐhÑhÔhˆˆøÝð ð ð ÝðQÐ3Fð Qð QÈ3ð Qð Qð Qñ
ô 
ð
 ð	øøøøðøøøð �kŠk˜) RÑ(Ô(€GØð 
ÝðNÐ$7ð Nð Nð Nñ
ô 
ð 	
ð "ÐA W§[¢[°Ñ%9Ô%9ÐA¸TØ+2¯;ª;°zÑ+BÔ+BÕF^Ò+^Ð+^Ð'Ð'Ðdk×doÒdoÐpzÑd{Ôd{Ø—K’K 
Ñ+Ô+ØØ—K’K 
Ñ+Ô+Ý! '§+¢+Ð.AÑ"BÔ"BÐ"HÀbÑIÔIØ$Ÿ[š[Ð)<Ñ=Ô=Ø—;’;˜yÑ)Ô)Ý�W—[’[ Ñ(Ô(Ð.¨BÑ/Ô/ð
ð 
ð 
s   Ç!G5 Ç5
HÇ?HÈHc                  ó~  — t           j                             d¦  «        dk    } | sP	 ddlm}  |¦   «         }|                     d¦  «        pi }t          |t          ¦  «        r|S n# t          $ r Y nw xY w	 ddlm	} |                     d¦  «        pi }t          |t          ¦  «        r|ni S # t          $ r i cY S w xY w)aÇ  Load delegation config from the active Hermes config.

    Prefer the shared persistent loader because it follows the active
    HERMES_HOME/profile. ``cli.CLI_CONFIG`` is a legacy fallback for entry
    points that cannot import the shared loader; importing it first can return
    an old default ``delegation`` block and hide user-set keys such as
    ``max_concurrent_children``.

    Uses ``load_config_readonly()``: every consumer of this dict is read-only
    (``.get()`` lookups), and this runs on each ``get_definitions()`` schema
    rebuild via ``_get_max_concurrent_children``, so skipping the defensive
    deepcopy matters. Do NOT mutate the returned dict.

    ``HERMES_IGNORE_USER_CONFIG=1`` (``hermes chat --ignore-user-config``) is
    only honored by the legacy ``cli`` loader, not the shared one, so when the
    flag is set we keep ``cli.CLI_CONFIG`` authoritative to preserve the
    flag's contract of suppressing user config.yaml settings.
    ÚHERMES_IGNORE_USER_CONFIGr  r   )Úload_config_readonlyrn  )Ú
CLI_CONFIG)
r  Úenvironr)   Úhermes_cli.configr~  rN   r†   rL   Úclir  )Úprefer_legacyr~  Úfullr+   r  s        r    r(   r(   ½  s  € õ& ”J—N’NÐ#>Ñ?Ô?À3ÒF€MØð 	ð	Ø>Ð>Ð>Ð>Ð>Ð>à'Ð'Ñ)Ô)ˆDØ—(’(˜<Ñ(Ô(Ð.¨BˆCÝ˜#�tÑ$Ô$ð Ø�
ðøåð 	ð 	ð 	ØˆDð	øøøðØ"Ð"Ð"Ð"Ð"Ð"à�nŠn˜\Ñ*Ô*Ð0¨bˆÝ  ¥dÑ+Ô+Ð3ˆsˆs°Ð3øÝð ð ð Øˆ	ˆ	ˆ	ðøøøs#   §=A& Á&
A3Á2A3Á75B- Â-B<Â;B<c                  ó   — 	 dS )a  Compose the delegate_task tool description.

    Deliberately carries ONLY guidance that exists nowhere else in the
    schema. Batch/concurrency limits live in the 'tasks' parameter
    description and the nesting clause lives in the 'role' parameter
    description (both rebuilt per get_definitions() call with the user's
    actual delegation.max_concurrent_children / max_spawn_depth), so the
    top-level text stays static and duplication-free. If you add text
    here, check it is not already stated in a parameter description.
    up  Spawn subagents in isolated contexts; each gets its own conversation, terminal session, and toolset, and only its final summary returns to you. Provide 'goal' for a single task or 'tasks' for a parallel batch (limits and nesting rules are in the parameter descriptions).

Runs in the background: dispatch returns immediately with live transcript paths, and the completed result (one consolidated message for a batch) re-enters the conversation on its own. Do NOT wait or poll; continue other work.

USE FOR: reasoning-heavy subtasks, work that would flood your context with intermediate data, or independent parallel workstreams.
DO NOT USE FOR (use these instead):
- Mechanical multi-step work with no reasoning needed -> execute_code
- A single tool call -> call the tool directly
- Tasks needing user interaction -> subagents cannot ask questions
- Durable work that must survive this session -> cronjob or terminal(background=True, notify_on_complete=True); /stop, /new, or process exit discards running subagents.

RULES:
- Children know nothing of this conversation: pass everything needed via 'context', including any required output language, tone, or style (e.g. "respond in Chinese").
- Child summaries are SELF-REPORTS, not verified facts: a child claiming "uploaded successfully" or "file written" may be wrong. For external side effects (uploads, remote writes, publishing), require a verifiable handle (URL, ID, absolute path) and verify it yourself â€” fetch the URL, stat the file, read back the content â€” before telling the user the operation succeeded.
- Leaf children (the default) cannot call delegate_task, clarify, memory, send_message, or cronjob; orchestrators regain only delegate_task.
- Children inherit the parent model and fallback chain unless pinned globally via delegation.provider / delegation.model in config.yaml. Results are returned as an array, one entry per task.r9   r9   r"   r    Ú_build_top_level_descriptionr†  é  s   € ð 	@ð"ð "r"   c                  ó\   — 	 t          ¦   «         } n# t          $ r
 t          } Y nw xY wd| › d�S )zICompose the 'tasks' parameter description with current concurrency limit.z,Batch mode: tasks to run in parallel (up to z» for this user, set via delegation.max_concurrent_children). Each gets its own subagent with isolated context and terminal session. When provided, top-level goal/context/role are ignored.)r  rL   r  )r  s    r    Ú_build_tasks_param_descriptionrˆ    sW   € ð8Ý3Ñ5Ô5ˆˆøÝð 8ð 8ð 8Ý7ˆˆˆð8øøøð	B°|ð 	Bð 	Bð 	Bðs   ‚ ‘%¤%c                  óê   — 	 t          ¦   «         } n# t          $ r
 t          } Y nw xY w	 t          ¦   «         }n# t          $ r d}Y nw xY w| dk    r|rd| › d| dz
  › d�}n| dk    r|sd}nd| › d	�}d
|› �S )zHCompose the 'role' parameter description with current spawn-depth limit.TrV  z2Nesting IS enabled for this user (max_spawn_depth=z7): orchestrator children can themselves delegate up to r/   z more level(s) deep.zsNesting is currently disabled (delegation.orchestrator_enabled=false); 'orchestrator' is silently forced to 'leaf'.z.Nesting is OFF for this user (max_spawn_depth=zj); 'orchestrator' is silently forced to 'leaf'. Raise delegation.max_spawn_depth in config.yaml to enable.z–Role of the child agent. 'leaf' (default) = focused worker, cannot delegate further. 'orchestrator' = can use delegate_task to spawn its own workers. )r  rL   r  r  )Ú	max_depthÚorchestrator_onÚnesting_notes      r    Ú_build_role_param_descriptionr�  '  sÿ   € ðÝ(Ñ*Ô*ˆ	ˆ	øÝð ð ð Ýˆ	ˆ	ˆ	ðøøøðÝ3Ñ5Ô5ˆˆøÝð ð ð Øˆˆˆðøøøð �A‚~€~˜/€~ð"Àð "ð "ØCLÈqÁ=ð"ð "ð "ð 	ˆð
 
�aŠˆ ˆð)ð 	ˆðC¸Yð Cð Cð Cð 	ð	Fà7Cð	Fð 	Fðs   ‚ ‘%¤%©8 ¸AÁAc                  ó  — i t           d         ¥} d„ t           d         d                              ¦   «         D ¦   «         | d<   t          ¦   «         | d         d         d<   t          ¦   «         | d         d         d<   t	          ¦   «         | dœS )zÚReturn per-call schema overrides reflecting current config.

    Plugged into ToolEntry.dynamic_schema_overrides so every
    get_definitions() pass rewrites the description fields to the user's
    actual limits.
    Ú
parametersc                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r9   )r†   rh   s      r    rl   z3_build_dynamic_schema_overrides.<locals>.<dictcomp>W  s1   € ð &ð &ð &Ù�q˜!ˆ�4�‰7Œ7ð&ð &ð &r"   Ú
propertiesrÎ  r   rz   )r   r�  )ÚDELEGATE_TASK_SCHEMArm   rˆ  r�  r†  )Úoverrides_paramss    r    Ú_build_dynamic_schema_overridesr”  L  s§   € ðÝ
˜|Ô
,ðÐð&ð &Ý3°LÔAÀ,ÔO×UÒUÑWÔWð&ñ &ô &Ð�\Ñ"õ >\Ñ=]Ô=]Ð�\Ô" 7Ô+¨MÑ:Ý<YÑ<[Ô<[Ð�\Ô" 6Ô*¨=Ñ9õ 4Ñ5Ô5Ø&ðð ð r"   r   z™Spawn one or more subagents in isolated contexts. Description is rebuilt at every get_definitions() call to reflect the user's current delegation limits.ÚobjectÚstringz‚What the subagent should accomplish. Be specific and self-contained -- the subagent knows nothing about your conversation history.)r`  r   z£Background information the subagent needs: file paths, error messages, project structure, constraints. The more specific you are, the better the subagent performs.Úarrayz	Task goalzTask-specific contextrû   z;Per-task role override. See top-level 'role' for semantics.)r`  Úenumr   aM  Optional JSON Schema the subagent's final answer must validate against. The child is told the contract up front; the parent validates the final answer and allows one bounded correction retry. The result entry gains schema_valid (and schema_errors on final failure). Keep schemas forgiving: require only fields you will actually read.)rZ  r[  rz   rá  )r`  r‘  Úrequiredz#(rebuilt at get_definitions() time))r`  rm   r   u‘   Optional JSON Schema for the single-goal form â€” the subagent's final answer must validate against it (same semantics as tasks[].output_schema).Úbooleanum  DEPRECATED / IGNORED. Top-level single and batch delegations run in the background automatically â€” you do not need to (and cannot) opt in or out. A single result or consolidated batch result re-enters the conversation when the work finishes; just continue working in the meantime. Setting this has no effect; the parameter remains only for backward compatibility.)rZ  r[  rÎ  rz   rá  rà  )r   r   r�  )r%  r8  rž  c                 ó2   — t          |dd¦  «        dk    }| S )uÀ  Background flag for the MODEL-facing dispatch path (registry fallback).

    Delegations from the top-level agent always run in the background â€” the
    model does not choose. This applies to both a single task and a fan-out
    batch (the whole batch is one async unit that joins on all children and
    returns one consolidated result). The one
    exception is a delegation from an orchestrator subagent (depth > 0), which
    needs its workers' results within its own turn. The live path is
    ``run_agent._dispatch_delegate_task``; this lambda mirrors it for the rare
    case the intercept is bypassed. Direct Python callers of ``delegate_task``
    keep the historical synchronous default.
    rÛ  r   )rJ   )rž  rh  Úis_subagents      r    Ú_model_background_valuer�  Ì  s#   € õ ˜,Ð(9¸1Ñ=Ô=ÀÒA€KØˆ?Ðr"   rö  r÷  c                 óN  — t          | t          ¦  «        s| S g }d}| D ]‚}t          |t          ¦  «        s|                     |¦  «         Œ-d„ |                     ¦   «         D ¦   «         }|pt          |¦  «        t          |¦  «        k    }|                     |¦  «         Œƒ|r|n| S )NFc                 ó,   — i | ]\  }}|t           v¯||“ŒS r9   )Ú_MODEL_HIDDEN_TASK_FIELDS)ri   r­   r®   s      r    rl   z3_strip_model_hidden_task_fields.<locals>.<dictcomp>é  s4   € ð 
ð 
ð 
á��UØÕ3Ð3Ð3ð �à3Ð3Ð3r"   )rN   r‡   r†   rŒ   rm   r‰   )rÎ  Ústripped_tasksÚchangedrº  Ústrippeds        r    Ú_strip_model_hidden_task_fieldsr¤  à  sÄ   € Ý�e�TÑ"Ô"ð ØˆØ€NØ€GØð 
(ð 
(ˆÝ˜$¥Ñ%Ô%ð 	Ø×!Ò! $Ñ'Ô'Ð'Øð
ð 
à"Ÿjšj™lœlð
ñ 
ô 
ˆð
 Ð7�S ™]œ]­c°$©i¬iÒ7ˆØ×Ò˜hÑ'Ô'Ð'Ð'Ø$Ð/ˆ>ˆ>¨%Ð/r"   rn  c                 ó–  — t          |                      d¦  «        |                      d¦  «        t          |                      d¦  «        ¦  «        |                      d¦  «        |                      d¦  «        t          | |                     d¦  «        ¦  «        |                      d¦  «        |                     d¦  «        ¬¦  «        S )	NrZ  r[  rÎ  rÐ  rz   rh  rá  )rZ  r[  rÎ  rÐ  rz   rà  rá  rh  )r   r)   r¤  r�  )rž  r˜  s     r    ró  ró  ÷  s    € �}Ø�XŠX�fÑÔØ—’˜Ñ#Ô#Ý-¨d¯hªh°wÑ.?Ô.?Ñ@Ô@Ø—x’xÐ 0Ñ1Ô1Ø�XŠX�fÑÔÝ*¨4°·²¸Ñ1GÔ1GÑHÔHØ—h’h˜Ñ/Ô/Ø—V’V˜NÑ+Ô+ð	 ñ 	 ô 	 € r"   u   ðŸ”€)r   ÚtoolsetÚschemaÚhandlerÚcheck_fnr¹  Údynamic_schema_overridesr8   )r/   )	NNNNNNNNrú   ra   )NNNNNNNN)˜rI  r˜  rZ  rš   rl  ÚreÚ	getLoggerrF  r   r  r…  rM  rø  r   r^  Útypingr   r   r   r   Úurllib.parser   r	   rl  r
   Úagent.interrupt_compatr   rr  r,  r   rV  r   rY  Úutilsr   r   r{  rq  rO   r!   r%   r-   r  r  r  r  ÚLockr4   r0   r5   Ú__annotations__r@   r1   r6   r:   rB   rG   rT   rW   r_   r.  rd   rr   rã   r•   rŠ   rÑ   r¸   r²   rÔ   rÚ   rî   r‹   rý   r  r
  r  rä   r  r  r  r#  r)  r-  r6  r;  r9  rÚ  rÆ  rÅ  r  rë  rí  rì  r-  ÚEnumrE  rN  rO  rP  rK  rS  rU  r^  rk  r|  r�  r‡  rK   rÁ  rÅ  rÏ  rh  rS  rª  r¯  r¾  rÎ  rà  r¨  r¯  r°  r®  rª  r«  r²  rÈ  rÍ  rÓ  ÚcompileÚ
IGNORECASErÖ  rØ  rÛ  rß  r   r9  r†   r:  r(   r†  rˆ  r�  r”  r’  r&  r%  r8  r�  r   r¤  Úregisterr9   r"   r    ú<module>r·     sp  ððð ð ð$ €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	à	ˆÔ	˜8Ñ	$Ô	$€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€ðð ð ð ð ð ð -Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à Ð Ð Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ð
 $Ð Ø Ð Ð Ð Ð Ð Ø RÐ RÐ RÐ RÐ RÐ RØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4ð #˜ðð ð ñô Ð ð8 ð °3ð ÀSð ð ð ð ð
 Cð 
°cð 
Èð 
ð 
ð 
ð 
ðð ð ð" $%Ð  ð !Ð Ø€	ð Ð ð #�I”NÑ$Ô$Ð Ø€ˆtÐ Ð Ñ à'˜œÑ)Ô)Ð ð 02Ð �4˜˜T # s (œ^Ð+Ô,Ð 1Ð 1Ñ 1ð	˜Tð 	 dð 	ð 	ð 	ð 	ð˜ð ð ð ð ð
(˜t C¨ Hœ~ð (°$ð (ð (ð (ð (ð <@ð 5ð 5ð 5 cð 5°Sð 5ÀDð 5ð 5ð 5ð 5ðQ¨#ð Q°cð Q¸hÀs¼mð Qð Qð Qð Qð0 Cð ¨Dð ð ð ð ð8 '+ØØ $ð-ð -ð -Øð-à
ð-ð ˜s”mð	-ð
 ð-ð ð-ð 
ð-ð -ð -ð -ð`Ø˜s”mðà
ˆ3�ˆ8„_ðð ð ð ð$
˜t D¨¨c¨¤NÔ3ð 
ð 
ð 
ð 
ð6 Øð	4ð 4ð 4Ø��c�ŒNð4ð ð4ð ð	4ð
 
ˆ$ˆs�CˆxŒ.Ôð4ð 4ð 4ð 4ðn Sð ¨Sð ð ð ð ð8 $˜)ð %ð %ð %ñ ô Ð ð  !�yÐ!<Ð!<Ð!<Ñ=Ô=Ð ð˜sð ¨3ð °3ð ð ð ð ð>7¨ð 7°°c¸3°h´ð 7ð 7ð 7ð 7ð.A¨#ð A°$°s¸C°x´.ð Að Að Að Að,°ð ¸¸dÀ3ÈÀ8¼nÔ9Mð ð ð ð ð<! cð !¨dð !ð !ð !ð !ðH�x ”}ð ¨ð ð ð ð ð"&, cð &,ð &,ð &,ð &,ðR !Ð ð* ð *ð *ð *ð *ð6'!˜H UœOð '!ð '!ð '!ð '!ðT$˜cð $ð $ð $ð $ðN 4ð ð ð ð ð"J 4ð Jð Jð Jð Jð;˜sð ; tð ;ð ;ð ;ð ;ð¨Sð °Sð ð ð ð ð>Ø˜”IðØ03°C´ðà	ˆ#„Yðð ð ð ð Ð ð "Ð ð
 !Ð ð Ð ð *.Ð �x ”Ð -Ð -Ñ -ØÐ ð  "Ð Ø"$Ð Ø.Ð.Ð.Ð ð4ð 4ð 4ð 4ð 4�C˜œñ 4ô 4ð 4ð0 Ô,Ø(Ô6Ø!Ô3Ø#Ô7Ø&Ô4ð/ð /Ð �4˜˜]Ð*Ô+ð ð ñ ð Tð ð ð ð ð "ðKð %)ØØØðKð Kð KØ
ðKà�cŒ]ðKð ˜S”Mð	Kð
 ðKð ðKð ðKð 	ðKð Kð Kð Kð\¨X°c¬]ð ð ð ð ð6C 4¨¤9ð C°°c´ð Cð Cð Cð Cð* Sð ¨T°#¬Yð ð ð ð ð*¨Sð °Tð ð ð ð ð, ð	Gð "&Ø#ØØØ$(Ø,0ðGð Gð GØðGà
ðGð ð	Gð ˜#”ðGð ˜Œ}ðGð �CŒ=ðGð �CŒ=ðGð �t˜C”yÔ!ðGð ˜$˜s C˜xœ.Ô)ðGð ˆhÔðGð Gð Gð GðT0 3ð 0¨3ð 0ð 0ð 0ð 0ð%¸hÀs¼mð %ÐPXÐY\ÔP]ð %ð %ð %ð %ðX (,Ø'+Ø&*Ø'+Ø;?Ø)-à*.Ø-1ð ð-að aØðaà
ðað �cŒ]ðað �t˜C”yÔ!ð	að
 �CŒ=ðað ðað ðað   ”}ðað   ”}ðað ˜s”mðað   ”}ðað !)¨¨c°3¨h¬Ô 8ðað " #œðað" # 3œ-ð#að$    S¤	Ô*ð%að, ð-að að að aðHmàðmð ðmð ð	mð
 ðmð ˜IÔ,Ô-ðmð ðmð ˆc„]ðmð mð mð mð` sð °Sð ¸XÀc¼]ð ð ð ð ð24"Øð4"Øð4"Ø(+ð4"à
ˆ3�˜”ÐÔð4"ð 4"ð 4"ð 4"ðn%¸3ð %À8ÈCÄ=ð %ð %ð %ð %ðP4
 4¨¨S°#¨X¬Ô#7ð 4
È$ð 4
ð 4
ð 4
ð 4
ðt Øð	vQð '+ØØ $ðvQð vQð vQØðvQà
ðvQð ˜s”mðvQð ðvQð ðvQð 
ˆ#ˆsˆ(„^ðvQð vQð vQð vQðr #1 )¤.Ñ"2Ô"2Ð Ø%4 Y¤_Ñ%6Ô%6Ð "Ø*˜9œ?Ñ,Ô,Ð ðð ð ð¨y¬ð ð ð ð ð$UKØ�$�s˜C�x”.Ô!ðUKà�D˜˜c˜”NÔ#ðUKð �5˜˜d 3¨ 8œn¨cÐ1Ô2Ô3ðUKð
 
ðUKð UKð UKð UKðv Øð	ð Øðà
ðð
 
ˆ#ˆsˆ(„^ðð ð ð ð&Øðà
ˆ8�D˜˜c 3˜hœÔ(Ô)¨8°C¬=Ð8Ô9ðð ð ð ðB "�r”zÐ"8¸"¼-ÑHÔHÐ Ø �b”jð7ñô Ð ð Ð ð+ T¨$¨s°C¨x¬.Ô%9ð +¸hÀs¼mð +ð +ð +ð +ð^ Ø!Ø,0Ø$(ØØ!%Ø.2Øði
Dð i
DØ
�3Œ-ði
Dà�cŒ]ði
Dð �D˜˜c 3˜hœÔ(Ô)ði
Dð ˜S”Mð	i
Dð
 �3Œ-ði
Dð ˜”ði
Dð ˜D  c œNÔ+ði
Dð 	ði
Dð i
Dð i
Dð i
Dð^ )-ðRð RØ  œðRð ! œðRð Rð Rð Rðj}¨ð }Àð }ð }ð }ð }ð@$�dð $ð $ð $ð $ðX- cð -ð -ð -ð -ð`¨ð ð ð ð ð" sð "ð "ð "ð "ðJ¨ð ð ð ð ð0 ð	0ð
 ð !ð,ðð ð !ðJðð ð  à$à)1À+Ð NÐ Nà$,Ø+Bð$ð $ð
 %-Ø%+¨^Ð$<Ø+hð!ð !ð %-ð!Nð*ð *ð#ð #ð2 "( ð7ð ð@  EðE#ð #ðJ !Ø Ð0ØDðð ð !ðAðð ð "ð.ðð ðEN
ð N
ð^ ðcRð Rðbð bÐ ðL 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /ðð  $ð ¸dð ð ð ð ð" +¨JÐ7Ð ð0¨3ð 0°3ð 0ð 0ð 0ð 0ð& €Ô Ø	ØØð	ð 	ð )Ø
Ø<ð!ñ ô ð ð ð r"   