§
    ‰eîi¿� ã                   ó¼  — U d 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mZmZ ddlmZmZmZmZ ddlm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# eh d£¦  «        Z$ e%d„  ej&        ¦   «         D ¦   «         ¦  «        Z'd (                    d„ e'D ¦   «         ¦  «        Z)dZ*dZ+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e ddfd„Z8de de1fd „Z9deee ef                  fd!„Z:d"d#d$œd%ee ef         d&e;d'e;deee ef                  fd(„Z<d)e de1fd*„Z=d+ee          de fd,„Z>de;fd-„Z?de@fd.„ZAde;fd/„ZBde1fd0„ZCde1fd1„ZDd2e de1fd3„ZEd4ee          d5eFe          dee          fd6„ZGd7ZHd8ZId9ZJd:ZKd;ZLg d<¢ZM G d=„ d>e ejN        ¦  «        ZOeOjP        eOjP        eOjQ        eOjR        eOjS        d?œZTee eOf         e2d@<   de1fdA„ZU	 d�ddBdCddDœdEe dFee          dGee          dHe dIe;dJe;de fdK„ZVdee          fdL„ZWdMee          dee          fdN„ZX	 d�ddddddOœdPe;dEe dQe;dee          dRee          dSee;         dTee          dMeee                   deeY         fdU„ZZ	 	 	 	 	 	 	 d‘dPe;dEe dFee          dMeee                   dTee          dVe;dQe;dWee          dXee          dYee          dZee          d[ee          d\eee                   dHe fd]„Z[d^edPe;d_e@d`e@daeej\                 dEe dee          fdb„Z]	 	 d’dPe;dEe dee ef         fdc„Z^	 	 	 	 	 	 	 	 	 d“dEee          dFee          dMeee                   ddeeee ef                           dVee;         deee          dfeee                   dHee          de fdg„Z_dhee          fdi„Z`djeadeafdk„Zbdeafdl„Zcdmdndodpdqdrœdpdsdrœdtdudpidve)› dw�dxœdtdodpdydrœdpdzdrœdtdudpid{e)› d|�dxœdpd}drœdtdudpid~dxœdpdBdgd€d�œd‚œdEgdƒœd„dxœdpdBdgd…d�œdpd†drœdtdudpid‡dxœdˆœg dƒœd‰œZdddŠlemfZfmgZg  efjh        dmd‹eddŒ„ eUd�¬Ž¦  «         dS )”aƒ  
Delegate Tool -- Subagent Architecture

Spawns child AIAgent instances with isolated context, restricted toolsets,
and their own terminal sessions. Supports single-task and batch (parallel)
modes. The parent blocks until all children complete.

Each child gets:
  - A fresh conversation (no parent history)
  - Its own task_id (own terminal session, file ops cache)
  - A restricted toolset (configurable, with blocked tools always 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)ÚThreadPoolExecutorÚTimeoutErrorÚas_completed)ÚAnyÚDictÚListÚOptional)ÚTOOLSETS)Ú
file_state)Úset_approval_callback)Úbase_url_hostnameÚis_truthy_value)Údelegate_taskÚclarifyÚmemoryÚsend_messageÚexecute_codeÚ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      ú5/home/div/.hermes/hermes-agent/tools/delegate_tool.pyÚ_subagent_auto_denyr   E   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   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+   `   s=   € õ ‰.Œ.€CØ
�'Š'Ð)¨5Ñ
1Ô
1€CÝ�sÑÔð &Ý%Ð%ÝÐr    >   ÚrlÚmoaÚsafeÚ	debuggingÚ
delegationc              #   ó¶   K  — | ]T\  }}|t           v¯|                     d ¦  «        °#t          d„ |                     dg ¦  «        D ¦   «         ¦  «        °P|V — ŒUdS )zhermes-c              3   ó(   K  — | ]}|t           v V — Œd S ©N)ÚDELEGATE_BLOCKED_TOOLS©Ú.0Úts     r   ú	<genexpr>z<genexpr>.<genexpr>|   s(   è è € ÐKÐK°�Õ+Ð+ÐKÐKÐKÐKÐKÐKr    ÚtoolsN)Ú_EXCLUDED_TOOLSET_NAMESÚ
startswithÚallr'   )r6   ÚnameÚdefns      r   r8   r8   w   s   è è € ð ð áˆˆdØÕ*Ð*Ð*Ø�OŠO˜IÑ&Ô&ð +åÐKÐK°T·X²X¸gÀrÑ5JÔ5JÐKÑKÔKÑKÔKð +ð 	à*Ð*Ð*Ð*ðð r    ú, c              #   ó"   K  — | ]
}d |› d �V — ŒdS )ú'N© )r6   Úns     r   r8   r8   ~   s*   è è € ÐCÐC¨1˜h !˜h˜h˜hÐCÐCÐCÐCÐCÐCr    é   é   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ÚboolrF   )rH   s    r   Úset_spawn_pausedrL   š   s|   € õ 
ð ð Ý˜V™œˆÝðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ˆ+«/²/c                  óR   — t           5  t          cd d d ¦  «         S # 1 swxY w Y   d S r3   )rJ   rF   rB   r    r   Úis_spawn_pausedrN   ¦   so   € Ý	ð ð Ýðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ˆœ £ Úrecordc                 óŒ   — |                       d¦  «        }|sd S t          5  | t          |<   d d d ¦  «         d S # 1 swxY w Y   d S )NÚsubagent_id)r'   Ú_active_subagents_lockrG   )rO   Úsids     r   Ú_register_subagentrT   «   s•   € Ø
�*Š*�]Ñ
#Ô
#€CØð ØˆÝ	ð (ð (Ø!'Õ˜#Ñð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (s   ¡9¹=Á =rQ   c                 ó|   — t           5  t                               | d ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r3   )rR   rG   Úpop)rQ   s    r   Ú_unregister_subagentrW   ³   s‚   € Ý	ð 1ð 1Ý×Ò˜k¨4Ñ0Ô0Ð0ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1s   ˆ1±5¸5c                 óP  — t           5  t                               | ¦  «        }ddd¦  «         n# 1 swxY w Y   |sdS |                     d¦  «        }|€dS 	 |                     d| › d�¦  «         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.
    NFÚagentzInterrupted via TUI (ú)z!interrupt_subagent(%s) failed: %sT)rR   rG   r'   Ú	interruptÚ	Exceptionr   Údebug)rQ   rO   rY   Úexcs       r   Úinterrupt_subagentr_   ¸   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ðØ�ŠÐ>°Ð>Ð>Ð>Ñ?Ô?Ð?Ð?øÝð ð ð Ý�ŠÐ8¸+ÀsÑKÔKÐKØˆuˆuˆuˆuˆuøøøøðøøøð ˆ4s$   ˆ/¯3¶3ÁA2 Á2
B#Á<BÂB#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 k    ¯||“ŒS )rY   rB   )r6   ÚkÚvs      r   ú
<dictcomp>z4list_active_subagents.<locals>.<listcomp>.<dictcomp>×   s#   € Ð8Ð8Ð8‘d�a˜¨1°ª<¨<ˆQ�¨<¨<¨<r    )Úitems)r6   Úrs     r   ú
<listcomp>z)list_active_subagents.<locals>.<listcomp>Ö   s>   € ð 
ð 
ð 
àð 9Ð8˜aŸgšg™iœiÐ8Ñ8Ô8ð
ð 
ð 
r    N)rR   rG   ÚvaluesrB   r    r   Úlist_active_subagentsrj   Ï   s–   € õ 
 ð 
ð 
ð
ð 
å&×-Ò-Ñ/Ô/ð
ñ 
ô 
ð
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s   ˆ#8¸<¿<é   i@  ©Úmax_entriesÚ	max_charsÚresultrm   rn   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ŒF|                     d
¦  «        pd}
t          |
t          ¦  «        st	          |
¦  «        }
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Úfunctionr=   ÚtoolÚcontentÚ Útool_call_id)rw   ÚpreviewÚis_error)
Ú
isinstanceÚdictr'   ÚlistÚstrÚreversedÚlenÚ_looks_like_error_outputÚappendÚreverse)ro   rm   rn   rq   ÚtailÚpending_call_by_idÚmsgÚtcÚtc_idÚfnrx   r|   Ú	tool_namer{   s                 r   Ú_extract_output_tailr�   Ü   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ØØ—'’'˜)Ñ$Ô$Ð*¨ˆÝ˜'¥3Ñ'Ô'ð 	#Ý˜'‘l”lˆGÝ+¨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    rx   c                 ó  — | 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Ú{Ú[ÚerrorTÚstatusry   >   r‘   ÚfailedÚfailureÚtimeoutr   zerror:zfailed:z
traceback z
exception:)Úlstripr;   ÚjsonÚloadsr}   r~   r'   r€   ÚstripÚlowerr\   Ú
splitlines)rx   ÚheadÚparsedr’   Úfirsts        r   rƒ   rƒ     s�  € ð ð Øˆ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 rg   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')r€   r™   rš   r   r   )rg   Úr_norms     r   Ú_normalize_roler£   4  s\   € ð 	€y˜€yØˆvÝ�‰VŒV�\Š\‰^Œ^×!Ò!Ñ#Ô#€FØÐ)Ð)Ð)ØˆÝ
‡N‚NÐFÈÑJÔJÐJØˆ6r    c                  óþ  — t          ¦   «         } |                      d¦  «        }|�€	 t          dt          |¦  «        ¦  «        }|dk    r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_childrenNrE   é
   zxdelegation.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'   ÚmaxÚintr   r   Ú	TypeErrorÚ
ValueErrorÚ _DEFAULT_MAX_CONCURRENT_CHILDRENÚosÚgetenv)r)   r*   ro   Úenv_vals       r   Ú_get_max_concurrent_childrenr°   E  s#  € õ ‰.Œ.€CØ
�'Š'Ð+Ñ
,Ô
,€CØ
€ð	4Ý˜�C ™HœHÑ%Ô%ˆFØ˜Š{ˆ{Ý—’ðIàñô ð ð
 ˆ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' Á'9B#Â"B#Â=C ÃC5Ã4C5c                  ó¶  — t          ¦   «         } |                      d¦  «        }|�V	 t          dt          |¦  «        ¦  «        S # t          t
          f$ r$ t                               d|t          ¦  «         Y nw xY wt          j
        d¦  «        }|r5	 t          dt          |¦  «        ¦  «        S # t          t
          f$ r Y nw xY wt          t          ¦  «        S )zÂRead delegation.child_timeout_seconds from config.

    Returns the number of seconds a single child agent is allowed to run
    before being considered stuck.  Default: 600 s (10 minutes).
    Úchild_timeout_secondsNg      >@zKdelegation.child_timeout_seconds=%r is not a valid number; using default %dÚ DELEGATION_CHILD_TIMEOUT_SECONDS)r&   r'   r¨   Úfloatrª   r«   r   r   ÚDEFAULT_CHILD_TIMEOUTr­   r®   )r)   r*   r¯   s      r   Ú_get_child_timeoutr¶   k  só   € õ ‰.Œ.€CØ
�'Š'Ð)Ñ
*Ô
*€CØ
€ð	Ý�t�U 3™ZœZÑ(Ô(Ð(øÝ�:Ð&ð 	ð 	ð 	Ý�NŠNð#àÝ%ñ	ô ð ð ð ð	øøøõ ŒiÐ:Ñ;Ô;€GØð ð	Ý�t�U 7™^œ^Ñ,Ô,Ð,øÝ�:Ð&ð 	ð 	ð 	ØˆDð	øøøåÕ&Ñ'Ô'Ð's#   §A Á2A9Á8A9ÂB0 Â0CÃCc                  óª  — t          ¦   «         } |                      d¦  «        }|€t          S 	 t          |¦  «        }n?# t          t
          f$ r+ t                               d|t          ¦  «         t          cY S w xY wt          t          t          t          |¦  «        ¦  «        }||k    r(t                               d|t          t          |¦  «         |S )aL  Read delegation.max_spawn_depth from config, clamped to [1, 3].

    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 or 3 to unlock nested orchestration. role="orchestrator"
    removes the toolset strip for depth-1 children when
    max_spawn_depth >= 2, enabling them to spawn their own workers.
    Úmax_spawn_depthNzFdelegation.max_spawn_depth=%r is not a valid integer; using default %dzCdelegation.max_spawn_depth=%d out of range [%d, %d]; clamping to %d)r&   r'   Ú	MAX_DEPTHr©   rª   r«   r   r   r¨   Ú_MIN_SPAWN_DEPTHÚminÚ_MAX_SPAWN_DEPTH_CAP)r)   r*   ÚivalÚclampeds       r   Ú_get_max_spawn_depthr¿   †  sÛ   € õ ‰.Œ.€CØ
�'Š'Ð#Ñ
$Ô
$€CØ
€{ÝÐðÝ�3‰xŒxˆˆøÝ•zÐ"ð ð ð Ý�ŠØWØÝñ	
ô 	
ð 	
õ
 ÐÐÐðøøøõ Õ"¥CÕ(<¸dÑ$CÔ$CÑDÔD€GØ�$‚€Ý�ŠØTØÝÝ Øñ	
ô 	
ð 	
ð €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)ÚtrueÚ1ÚyesÚon)r&   r'   r}   rK   r€   r™   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©Údefault)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)r€   r;   Útools.registryrÍ   Úget_toolset_alias_targetr\   rK   )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Úchild_toolsetsÚparent_toolsetsc                 ó˜   — t          | ¦  «        }t          |¦  «        D ]*}t          |¦  «        r||vr|                     |¦  «         Œ+|S )zFAppend any parent MCP toolsets that are missing from a narrowed child.)r   ÚsortedrÑ   r„   )rÒ   rÓ   Ú	preservedÚtoolset_names       r   Ú_preserve_parent_mcp_toolsetsrØ   Ò  s]   € õ �^Ñ$Ô$€IÝ˜Ñ/Ô/ð +ð +ˆÝ Ñ-Ô-ð 	+°,ÀiÐ2OÐ2OØ×Ò˜\Ñ*Ô*Ð*øØÐr    é2   éX  é   é   é   )Ú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_COMPLETEDrB   r    r   râ   râ   ñ  sA   € € € € € ð	ð 	ð +€LØ,€MØ.€NØ(€KØ,€MØ/ÐØ3ÐÐÐr    râ   )Ú	_thinkingzreasoning.availableztool.startedztool.completedÚsubagent_progressÚ_LEGACY_EVENT_MAPc                  ó   — dS )z<Delegation has no external requirements -- always available.TrB   rB   r    r   Úcheck_delegate_requirementsrò     s   € àˆ4r    r    é   ©Úworkspace_pathrr   r¸   Úchild_depthÚgoalÚcontextrõ   rr   r¸   rö   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.ry   zYOUR TASK:
z

CONTEXT:
z
WORKSPACE PATH:
zg
Use this exact path for local repository/workdir operations unless the task explicitly says otherwise.a5  
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.

Be thorough but concise -- your response is returned to the parent agent as a summary.r¡   rE   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™   r„   r€   Újoin)r÷   rø   rõ   rr   r¸   rö   ÚpartsÚ
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_cwdÚcwd)
r­   r®   ÚgetattrÚpathÚabspathÚ
expanduserr€   r\   ÚisabsÚisdir)Úparent_agentÚ
candidatesÚ	candidateÚtexts       r   Ú_resolve_workspace_hintr  b  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                 ó(   ‡— h d£Šˆfd„| D ¦   «         S )z0Remove toolsets that contain only blocked tools.>   r   r   r0   Úcode_executionc                 ó   •— g | ]}|‰v¯|‘Œ	S rB   rB   )r6   r7   Úblocked_toolset_namess     €r   rh   z(_strip_blocked_tools.<locals>.<listcomp>…  s$   ø€ ÐBÐBÐB�! 1Ð,AÐ#AÐ#AˆAÐ#AÐ#AÐ#Ar    rB   )r  r  s    @r   Ú_strip_blocked_toolsr  }  s2   ø€ ðð ð Ðð CÐBÐBÐB�xÐBÑBÔBÐBr    ©rQ   Ú	parent_idÚdepthÚmodelr  Ú
task_indexÚ
task_countr  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_callbackrE   r�   ú] ry   rÜ   r   r   c                  óŠ   •	— ‰‰‰dœ} ‰�‰| d<   ‰�‰| d<   ‰�‰| d<   ‰�‰| d<   ‰	�t          ‰	¦  «        | d<   ‰d         | d<   | S )	N)r  r  r÷   rQ   r  r  r  r  r   Ú
tool_count)r   )
ÚkwÚ_tool_countr  Ú
goal_labelr  r  rQ   r  r  r  s
    €€€€€€€€€r   Ú_identity_kwargsz8_build_child_progress_callback.<locals>._identity_kwargs²  s   ø€ à$Ø$Øð
ð 
ˆð
 Ð"Ø +ˆBˆ}ÑØÐ Ø'ˆBˆ{‰OØÐØˆBˆw‰KØÐØˆBˆw‰KØÐÝ! (™^œ^ˆBˆz‰NØ& 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)Úupdater\   r   r]   )	r&  rŒ   r{   Úargsr   ÚpayloadÚer%  Ú	parent_cbs	          €€r   Ú_relayz._build_child_progress_callback.<locals>._relayÅ  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 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{   ry   úsubagent.completeu   â”œâ”€ ðŸ’­ "ú"zsubagent.thinking©r{   rï   z Parent callback relay failed: %sr   rE   r!  Ú	last_toolé#   )Úget_tool_emojiu   â”œâ”€ z  "zsubagent.toolr?   úsubagent.progressõ   ðŸ”€ )r/  ©r2  )r‚   Úprint_abover\   r   r]   r}   râ   rð   r'   r«   rª   rë   rí   rè   rR   rG   Úagent.displayr7  r„   rû   Úclear)r&  rŒ   r{   r)  r   Úshortr+  Úeventr  Úsummary_textÚrecr7  ÚemojiÚlineÚsummaryÚ_BATCH_SIZEÚ_batchr-  r#  r$  r,  ÚprefixÚspinnerrQ   s                  €€€€€€€€€r   Ú	_callbackz1_build_child_progress_callback.<locals>._callbackÑ  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õ �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:ÃC$ Ã$C9Ã8C9Ä7E Å
FÅE>Å>FÇG Ç
HÇ(HÈHÈH$ È$
IÈ.IÉIÉ1/J,Ê,J0Ê3J0Ì	L Ì
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?   r8  r9  r4  N)rû   r=  )rD  rF  r-  r,  rG  s    €€€€r   Ú_flushz._build_child_progress_callback.<locals>._flush8  sl   ø€ àð 	˜ð 	Ø—i’i Ñ'Ô'ˆGØˆFÐ&Ð0I¸Ð0IÀÐ0IÐ0IÐJÑJÔJÐJØ�LŠL‰NŒNˆNˆNˆNð	ð 	ð 	ð 	r    )NNN)r  r™   r   r€   r   rK  )r  r÷   r  r  rQ   r  r  r  r  rI  rK  rE  rF  r%  r-  r#  r$  r,  rG  rH  s   `  ``````  @@@@@@@@@r   Ú_build_child_progress_callbackrL  ˆ  sà  øøøøøøøøøøøøøøøø€ õ6 �lÐ$7¸Ñ>Ô>€GÝ˜Ð&>ÀÑEÔE€Iàð ˜9ð Øˆtð (2°A¢~ ~Ð#�˜a‘Ð#Ð#Ð#Ð#¸2€FØ�*˜"×#Ò#Ñ%Ô%€Jð €KØ€FØ�#€Kð�d¥3­ 8œnð ð ð ð ð ð ð ð ð ð ð ð ð ð ð( KOð
:ð 
:Ýð
:Ý$'ð
:Ý9<ð
:ð 
:ð 
:ð 
:ð 
:ð 
:ð 
:ð FJðeð eÝ"ðeÝ47ðeð eð eð eð eð eð eð eð eð eð eð eð eð eðNð ð ð ð ð ð ð ð €IÔØÐr    Úmax_iterationsÚoverride_providerÚoverride_base_urlÚoverride_api_keyÚoverride_api_modeÚoverride_acp_commandÚoverride_acp_argsc                 ól
  ‡1‡2‡3‡4— 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          |¦  «        Š3n?|r)t          |d¦  «        rddlŠ2ˆ2ˆ4fd„|j        D ¦   «         Š3nt          t          ¦  «        Š3|r<ˆ3fd„|D ¦   «         }t          ¦   «         rt!          |‰3¦  «        }t#          |¦  «        }nG|r|�t#          |¦  «        }n3‰3rt#          t%          ‰3¦  «        ¦  «        }nt#          t          ¦  «        }|dk    rd|vr|                     d¦  «         t)          |¦  «        }t+          ||||||¬¦  «        }t          |dd¦  «        }|s*t          |d¦  «        r|j                             d¦  «        }|pt          |dd¦  «        }t1          | ||||||||¬¦	  «	        Š1d}‰1rdt2          ddfˆ1fd„} | }|p|j        }!|pt          |dd¦  «        }"|	p|j        }#|
p|}$|pt          |dd¦  «        }%|pt          |dd¦  «        }&t9          |�|nt          |dg ¦  «        pg ¦  «        }'|rd}"d}%t          |dd¦  «        }(|(})	 t3          |                     d ¦  «        pd!¦  «                             ¦   «         }*|*r1dd"lm}+  |+|*¦  «        },|,�|,})nt@           !                    d#|*¦  «         n2# tD          $ r%}-t@           #                    d$|-¦  «         Y d}-~-nd}-~-ww xY w |dDi d%|#“d|$“d|!“d|"“d|%“d|&“d|'“d&|“d't          |d'd¦  «        “d|)“d(t          |d(d¦  «        “d|“d)d*“d+|“d,d-| › d.�“d/|j$        “d0d*“d1d*“d2d“d3|“d4t          |d5d¦  «        “d6t          |d7d¦  «        “d8|j%        “d9|j&        “d:|j'        “d;|j(        “d<‰1“d=d“Ž}.t          |d>d¦  «        |._)        ||._*        ||._+        ||._,        ||._-        ||._.        t_          |"|¦  «        }/|/�|/|._0        t          |d?¦  «        rbt          |d@d¦  «        }0|0r5|05  |j1                             |.¦  «         ddd¦  «         n# 1 swxY w Y   n|j1                             |.¦  «         ‰1rA	  ‰1dA|¬B¦  «         n2# tD          $ r%}-t@           #                    dC|-¦  «         Y d}-~-nd}-~-ww xY w|.S )Ea«  
    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_depthrE   r¡   r    zsa-Ú-é   Ú_subagent_idÚenabled_toolsetsÚvalid_tool_namesc                 óB   •— h | ]}‰                      |¦  «        xŠ®‰’ŒS r3   )Úget_toolset_for_tool)r6   r=   Úmodel_toolsÚtss     €€r   ú	<setcomp>z%_build_child_agent.<locals>.<setcomp>†  s<   ø€ ð 
ð 
ð 
àØ!×6Ò6°tÑ<Ô<Ð<�ÐIð àIÐIÐIr    c                 ó   •— g | ]}|‰v ¯|‘Œ	S rB   rB   )r6   r7   rÓ   s     €r   rh   z&_build_child_agent.<locals>.<listcomp>�  s#   ø€ ÐFÐFÐF °°oÐ1EÐ1E˜!Ð1EÐ1EÐ1Er    r0   rô   Úapi_keyÚ_client_kwargsr  r  r  r   c                 ó�   •— | sd S 	  ‰d| ¦  «         d S # t           $ r&}t                               d|¦  «         Y d }~d S d }~ww xY w)Nrî   z(Child thinking callback relay failed: %s)r\   r   r]   )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ÚproviderÚapi_modeÚacp_commandÚacp_argszcopilot-acpÚchat_completionsÚreasoning_configÚreasoning_effortry   )Úparse_reasoning_effortzAUnknown delegation.reasoning_effort '%s', inheriting parent levelz.Could not load delegation reasoning_effort: %sÚbase_urlrM  Ú
max_tokensÚprefill_messagesÚ
quiet_modeTÚephemeral_system_promptÚ
log_prefixú
[subagent-Ú]ÚplatformÚskip_context_filesÚskip_memoryÚclarify_callbackÚthinking_callbackÚ
session_dbÚ_session_dbÚparent_session_idÚ
session_idÚproviders_allowedÚproviders_ignoredÚproviders_orderÚprovider_sortr  Úiteration_budgetÚ	_print_fnÚ_active_childrenÚ_active_children_lockzsubagent.spawn_requestedr4  z spawn_requested relay failed: %srB   )2Ú	run_agentrU  Úuuidr  r¿   rÆ   Úuuid4Úhexr¨   r&   ÚsetÚhasattrr^  r[  ÚDEFAULT_TOOLSETSrË   rØ   r  rÕ   r„   r  rþ   rc  r'   rL  r€   r  ro  r   r™   Úhermes_constantsrn  r   r   r\   r]   rw  r€  r�  r‚  rƒ  r…  rV  Ú_delegate_rolerY  Ú_parent_subagent_idÚ_subagent_goalÚ_resolve_child_credential_poolÚ_credential_poolr†  )5r  r÷   rø   r  r  rM  r  r  rN  rO  rP  rQ  rR  rS  rr   rU  Ú_uuidrö   Ú	max_spawnÚorchestrator_okÚeffective_rolerQ   Úparent_subagent_idÚ	tui_depthÚdelegation_cfgÚparent_enabledrÒ   Úworkspace_hintÚchild_promptÚparent_api_keyÚeffective_model_for_cbÚchild_thinking_cbrf  Úeffective_modelÚeffective_providerÚeffective_base_urlÚeffective_api_keyÚeffective_api_modeÚeffective_acp_commandÚeffective_acp_argsÚparent_reasoningÚchild_reasoningÚdelegation_effortrn  r�   r^   ÚchildÚ
child_poolÚlockre  r^  rÓ   r_  s5                                                    @@@@r   Ú_build_child_agentr¯  C  s?  øøøø€ ð> "Ð!Ð!Ð!Ð!Ð!ØÐÐÐõ ˜,Ð(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ð
ñ 
ô 
ˆˆõ Õ.Ñ/Ô/ˆàð @àFÐFÐFÐF XÐFÑFÔFˆÝ$Ñ&Ô&ð 	Ý:Ø ñô ˆNõ .¨nÑ=Ô=ˆˆØ	ð @˜.Ð4Ý-¨nÑ=Ô=ˆˆØ	ð @Ý-­f°_Ñ.EÔ.EÑFÔFˆˆå-Õ.>Ñ?Ô?ˆð ˜Ò'Ð'¨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Ðõ
 7ØØØØØØ$ØØ$Øð
ñ 
ô 
Ðð" ÐØð 
,ð	L¥#ð 	L¨$ð 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð ,Ðð Ð1˜|Ô1€OØ*ÐU­g°lÀJÐPTÑ.UÔ.UÐØ*ÐC¨lÔ.CÐØ(Ð:¨NÐØ*ÐU­g°lÀJÐPTÑ.UÔ.UÐØ0ð µGØ�m Tñ5ô 5Ðõ àÐ(ð 	Ðå�l J°Ñ3Ô3Ð9°rñô Ðð ð 0ð +ÐØ/Ðõ ˜|Ð-?ÀÑFÔFÐØ&€OðLÝ × 2Ò 2Ð3EÑ FÔ FÐ LÈ"ÑMÔM×SÒSÑUÔUÐØð 
	Ø?Ð?Ð?Ð?Ð?Ð?à+Ð+Ð,=Ñ>Ô>ˆFØÐ!Ø"(��å—’ØWØ%ñô ð øøõ ð Lð Lð LÝ�ŠÐEÀsÑKÔKÐKÐKÐKÐKÐKÐKøøøøðLøøøð ˆGð ð ð Ø#Ð#ðà!Ð!ðð ˆoðð $Ð#ð	ð
 $Ð#ðð *Ð)ðð $Ð#ðð &�~ðõ ˜<¨°tÑ<Ô<Ð<ðð )˜ðõ ! Ð/AÀ4ÑHÔHÐHðð (˜ðð �4ðð !- ðð . 
Ð-Ð-Ð-Ð-ðð  Ô&Ð&ð!ð"  ˜4ð#ð$ �Dð%ð& ˜ð'ð( ,Ð+ð)õ* ˜<¨¸Ñ=Ô=Ð=ð+õ, " ,°¸dÑCÔCÐCð-ð. 'Ô8Ð8ð/ð0 'Ô8Ð8ð1ð2 %Ô4Ð4ð3ð4 #Ô0Ð0ð5ð6  1Ð0ð7ð8 ˜ð9€Eõ< ˜l¨K¸Ñ>Ô>€E„Oà'€EÔð *€EÔð %€EÔØ 2€EÔØ€EÔõ 0Ð0BÀLÑQÔQ€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øøøð €LsC   ËA)M Í
M7ÍM2Í2M7Ò$SÓSÓSÓ4T Ô
T1ÔT,Ô,T1r¬  Útimeout_secondsÚduration_secondsÚworker_threadc                 óN  ‡!— 	 ddl m} 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 Š!dFd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¦  «        }|rU |d(t          |¦  «        › �¦  «         	  |d)t          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@¦  «          |dA¦  «          |dB¦  «          |dC¦  «         |                     d;                     ‰!¦  «        d.¬D¦  «         t          |¦  «        S # t          $ r&}t>                                dE|¦  «         Y d}~dS d}~ww xY w)Ga,  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_okrY  Úidxz%Y%m%d_%H%M%Szsubagent-timeout-rW  z.logry   rC  r   c                 ó2   •— ‰                      | ¦  «         d S r3   )r„   )rC  Úliness    €r   Ú_wz-_dump_subagent_timeout_diagnostic.<locals>._wi  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]z(empty)z## Child config)r  rg  rh  ro  rM  rr  ry  rx  rw  r�  rV  ro  ú  z: z: <unreadable>z## ToolsetsrZ  z  enabled_toolsets:  r[  z  loaded tool count: z  loaded tools:      z## Prompt / schema sizesrs  Úsystem_promptz  system_prompt_bytes: zutf-8zn/az  system_prompt_chars: z  system_prompt: <error: Ú>r9   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## 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)ry   )!r�  r´  ÚdatetimeÚsysÚ	tracebackÚmkdirr\   r  ÚnowÚstrftimer€   Ú	isoformatr™   r‚   r}   rÕ   r   Úencoder—   ÚdumpsÚget_activity_summaryrf   Úis_aliveÚ_current_framesr'   ÚidentÚformat_stackÚrstripÚsplitÚ
write_textrû   r   r   )"r¬  r  r°  r±  r²  r÷   r´  Ú_dtÚ_sysÚ
_tracebackÚhermes_homeÚlogs_dirrQ   r_  Ú	dump_pathr»  Ú_goal_previewÚattrr*   ÚenabledÚ
tool_namesÚ
sys_promptr^   Útools_schemaÚ_schema_jsonrD  rc   rd   ÚframesÚworker_frameÚstackÚ
frame_lineÚsubrº  s"                                    @r   Ú!_dump_subagent_timeout_diagnosticrå  C  s  ø€ ð(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ðØ�ÐE­6µ$°zÑ2BÔ2BÑ+CÔ+CÐEÐEÑFÔFÐFÐFøÝð ð ð Ø�ðøøøà
ˆˆ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‰Œˆà
ˆˆ:‰ŒˆØ
ˆÐ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øøøøðøøøs  ƒ!W4 ¥= ¼W4 ½
AÁW4 Á
AÁE)W4 Æ5>G4Ç3W4 Ç4HÈW4 ÈHÈA&W4 É7(J  ÊW4 Ê 
J-Ê*W4 Ê,J-Ê-W4 ËBM# Í"W4 Í#
NÍ-NÍ<W4 ÎNÎW4 Î
A7P ÐW4 Ð
P%ÐP ÐW4 Ð P%Ð%W4 Ð??Q? Ñ>W4 Ñ?
R"Ò	RÒW4 ÒR"Ò"EW4 ×4
X$×>XØX$c                 óÀ(  ‡ ‡‡‡‡G‡H‡I‡J‡K‡L— t          j        ¦   «         }t          ‰dd¦  «        }d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        ¦   «         ŠGdgŠHdgŠIdgŠJˆGˆHˆIˆJˆˆˆ fd„}t          j        |d	¬
¦  «        }|                     ¦   «          t          ‰dd¦  «        }t#          |t$          ¦  «        r|nd}|rÂ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œ	¦  «         	 |rA	  |d‰¬¦  «         n2# t          $ r%}t                               d|¦  «         Y d}~nd}~ww xY wddl}|p&d‰ › d|                     ¦   «         j        dd…         › �ŠLt          ‰dd¦  «        }t          j         ¦   «         }|r!t	          t3          j        |¦  «        ¦  «        ng }t7          ¦   «         }t9          dt:          t=          ¦   «         f¬¦  «        }ddiŠKˆKˆˆLˆfd„}|                     |¦  «        }	 |                      |¬¦  «        }�nþ# t          $ �rð}	 t          ‰d¦  «        r‰ !                    ¦   «          nt          ‰d¦  «        rd	‰_"        n# t          $ r Y nw xY wt#          |tF          tH          f¦  «        }tK          t          j        ¦   «         |z
  d¦  «        } t           &                    d ‰ |rd!nd"tO          |¦  «        j(        › �| ¦  «         d}!d}"	 ‰ )                    ¦   «         }#t'          |# *                    d#d¦  «        pd¦  «        }"n# t          $ r Y nw xY w|rf|"dk    r`tW          ‰‰ tY          |¦  «        tY          | ¦  «        ‰K *                    d¦  «        ‰¬$¦  «        }!|!rt           &                    d%‰ |!¦  «         |r;	  |d&|rd'| › d(�nt%          |¦  «        |rd)nd*| d+¬,¦  «         n# t          $ r Y nw xY w|r!|"dk    rd-|› d.�}$|!r|$d/|!› �z  }$nd-|› d0|"› d1�}$nt%          |¦  «        }$‰ |rd)nd*d|$|rd)nd*|"| t          ‰d2d¦  «        |!d3œ	cY d}~| -                    d4¬5¦  «         ‰G .                    ¦   «          | /                    d6¬¦  «         |rta          |¦  «         |	�K|
�I	 |	 1                    |
¦  «         n2# t          $ r%}t                               d7|¦  «         Y d}~nd}~ww xY wddl}t          ‰dd¦  «        }%t#          |%t          ¦  «        rt	          |%¦  «        |_        t          ‰d8¦  «        r�	 t          ‰d9d¦  «        }&|&r5|&5  ‰j2         3                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j2         3                    ‰¦  «         n9# th          tj          f$ r%}t                               d:|¦  «         Y d}~nd}~ww xY w	 t          ‰d;¦  «        r‰ 6                    ¦   «          S S # t          $ r t                               d<¦  «         Y S w xY wd}~ww xY w	 | -                    d4¬5¦  «         n# | -                    d4¬5¦  «         w xY w|rXt          |d=¦  «        rH	 | 7                    ¦   «          n2# t          $ r%}t                               d>|¦  «         Y d}~nd}~ww xY wtK          t          j        ¦   «         |z
  d¦  «        } | *                    d?¦  «        pd+}'| *                    d@d4¦  «        }(| *                    dAd4¦  «        })| *                    dBd¦  «        }*|)rdA}+n|'rd@}+ndC}+g },i }-| *                    dD¦  «        pg }.t#          |.t          ¦  «        �r¨|.D �]¤}/t#          |/tp          ¦  «        sŒ|/ *                    dE¦  «        dFk    rœ|/ *                    dG¦  «        pg D ]ƒ}0|0 *                    dHi ¦  «        }1|1 *                    dIdJ¦  «        ts          |1 *                    dKd+¦  «        ¦  «        dLœ}2|, :                    |2¦  «         |0 *                    dM¦  «        }3|3r|2|-|3<   Œ„ŒÎ|/ *                    dE¦  «        dNk    r½|/ *                    dOd+¦  «        }4tw          |4od*|4ddP…          <                    ¦   «         v ¦  «        }5ts          |4¦  «        |5rd*ndQdRœ}6|/ *                    dS¦  «        }3|3r|- *                    |3¦  «        nd}7|7�|7 =                    |6¦  «         �Œ‡|,r|,dT          =                    |6¦  «         �Œ¦|)rdA}8n|(rd@}8ndU}8t          ‰dVd¦  «        }9t          ‰dWd¦  «        }:t          ‰dd¦  «        };‰ |+|'|*| t#          |;t$          ¦  «        r|;nd|8t#          |9t&          tX          f¦  «        r|9ndt#          |:t&          tX          f¦  «        r|:nddXœ|,t          ‰d2d¦  «        dYœ
}<|+dCk    r| *                    d*dZ¦  «        |<d*<   	 |r¿|r½t3          j>        |||¦  «        }=|=r¥t          d[„ |= @                    ¦   «         D ¦   «         ¦  «        }>|>rxd\d] /                    |>dd…         ¦  «        z   ts          |>¦  «        dk    rd^ts          |>¦  «        dz
  › d_�nd+z   d`z   }?|< *                    da¦  «        r|<da         |?z   |<da<   n|>|<db<   n,# t          $ r t                               dcd	¬d¦  «         Y nw xY wt          ‰ded¦  «        }@t          ‰dfd¦  «        }A	 t	          t3          j        ‰L¦  «        ¦  «        ddg…         }Bn# t          $ r g }BY nw xY w	 t3          j>        d+|g ¦  «        }Cn# t          $ r i }CY nw xY wt          ˆLfdh„|C A                    ¦   «         D ¦   «         ¦  «        ddg…         }Dt…          |ddi¬j¦  «        }E|'r
|'ddk…         n|< *                    d*d+¦  «        |+| |'r
|'ddl…         n|< *                    d*d+¦  «        t#          |9t&          tX          f¦  «        rt'          |9¦  «        ndt#          |:t&          tX          f¦  «        rt'          |:¦  «        ndt#          |At&          tX          f¦  «        rt'          |A¦  «        ndt#          |*t&          tX          f¦  «        rt'          |*¦  «        nd|B|D|Edmœ}F|@�+	 tY          |@¦  «        |Fdn<   n# t†          th          f$ r Y nw xY w|r<	  |dti |F¤Ž n2# t          $ r%}t                               do|¦  «         Y d}~nd}~ww xY w|<‰G .                    ¦   «          | /                    d6¬¦  «         |rta          |¦  «         |	�K|
�I	 |	 1                    |
¦  «         n2# t          $ r%}t                               d7|¦  «         Y d}~nd}~ww xY wddl}t          ‰dd¦  «        }%t#          |%t          ¦  «        rt	          |%¦  «        |_        t          ‰d8¦  «        r�	 t          ‰d9d¦  «        }&|&r5|&5  ‰j2         3                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j2         3                    ‰¦  «         n9# th          tj          f$ r%}t                               d:|¦  «         Y d}~nd}~ww xY w	 t          ‰d;¦  «        r‰ 6                    ¦   «          S S # t          $ r t                               d<¦  «         Y S w xY w# t          $ �r�}tK          t          j        ¦   «         |z
  d¦  «        } t‰          jE        dp‰ › dq�¦  «         |r^	  |d&t%          |¦  «        dC| t%          |¦  «        ¬,¦  «         n2# t          $ r%}t                               dr|¦  «         Y d}~nd}~ww xY w‰ d*dt%          |¦  «        d| t          ‰d2d¦  «        dsœcY d}~‰G .                    ¦   «          | /                    d6¬¦  «         |rta          |¦  «         |	�K|
�I	 |	 1                    |
¦  «         n2# t          $ r%}t                               d7|¦  «         Y d}~nd}~ww xY wddl}t          ‰dd¦  «        }%t#          |%t          ¦  «        rt	          |%¦  «        |_        t          ‰d8¦  «        r�	 t          ‰d9d¦  «        }&|&r5|&5  ‰j2         3                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j2         3                    ‰¦  «         n9# th          tj          f$ r%}t                               d:|¦  «         Y d}~nd}~ww xY w	 t          ‰d;¦  «        r‰ 6                    ¦   «          S S # t          $ r t                               d<¦  «         Y S w xY wd}~ww xY w# ‰G .                    ¦   «          | /                    d6¬¦  «         |rta          |¦  «         |	�K|
�I	 |	 1                    |
¦  «         n2# t          $ r%}t                               d7|¦  «         Y d}~nd}~ww xY wddl}t          ‰dd¦  «        }%t#          |%t          ¦  «        rt	          |%¦  «        |_        t          ‰d8¦  «        r�	 t          ‰d9d¦  «        }&|&r5|&5  ‰j2         3                    ‰¦  «         ddd¦  «         n# 1 swxY w Y   n‰j2         3                    ‰¦  «         n9# th          tj          f$ r%}t                               d:|¦  «         Y d}~nd}~ww xY w	 t          ‰d;¦  «        r‰ 6                    ¦   «          w w # t          $ r t                               d<¦  «         Y w w xY wxY w)uzi
    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          ¦  «        �sp‰€Œt          ‰dd ¦  «        } | sŒ2d‰› d�}	 ‰                     ¦   «         }|                     d¦  «        }|                     dd¦  «        }|                     dd¦  «        }|‰d         k    }|‰d         k    }|s|r|‰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          ¦  «        �¯nd S d S )NÚ_touch_activityzdelegate_task: subagent z workingÚcurrent_toolÚapi_call_countr   rM  rE   u_   Subagent %d appears stale (no progress for %d heartbeat cycles, tool=%s) â€” stopping heartbeatz<none>z delegate_task: subagent running z (iteration ú/rZ   Úlast_activity_descry   )
ÚwaitÚ_HEARTBEAT_INTERVALr  rË  r'   Ú_HEARTBEAT_STALE_CYCLES_IN_TOOLÚ_HEARTBEAT_STALE_CYCLES_IDLEr   r   r\   )ÚtouchÚdescÚchild_summaryÚ
child_toolÚ
child_iterÚ	child_maxÚiter_advancedÚtool_changedÚstale_limitÚ
child_descÚ_heartbeat_stopÚ_last_seen_iterÚ_last_seen_toolÚ_stale_countr¬  r  r  s             €€€€€€€r   Ú_heartbeat_loopz*_run_single_child.<locals>._heartbeat_loop  s–  ø€ Ø!×&Ò&Õ':Ñ;Ô;ñ B	ØÐ#ØÝ˜LÐ*;¸TÑBÔBˆEØð ØàB¨jÐBÐBÐBˆDð6Ø %× :Ò :Ñ <Ô <�Ø*×.Ò.¨~Ñ>Ô>�
Ø*×.Ò.Ð/?ÀÑCÔC�
Ø)×-Ò-Ð.>ÀÑBÔB�	ð !+¨_¸QÔ-?Ò ?�Ø)¨_¸QÔ-?Ò?�Ø ð ) Lð )Ø)3�O AÑ&Ø)3�O AÑ&Ø&'�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‘”��øÝð ð ð Ø�ðøøøðC "×&Ò&Õ':Ñ;Ô;ñ B	ð B	ð B	ð B	ð B	s*   »CE Ä3E Å
EÅEÅE  Å 
E-Å,E-T)rÐ   ÚdaemonrY  rV  rE   r‘  r  Úrunning)	rQ   r  r  r÷   r  Ú
started_atr’   r!  rY   r/  r4  z"Progress callback start failed: %sz	subagent-rW  rX  Ú_current_task_id)Úmax_workersÚinitializerÚinitargsr7   c                  ó^   •— t          j        ¦   «         ‰ d<   ‰                     ‰‰¬¦  «        S )Nr7   )Úuser_messageÚtask_id)Ú	threadingÚcurrent_threadÚrun_conversation)Ú_worker_thread_holderr¬  Úchild_task_idr÷   s   €€€€r   Ú_run_with_thread_capturez3_run_single_child.<locals>._run_with_thread_capture‹  s:   ø€ Ý)2Ô)AÑ)CÔ)CÐ! #Ñ&Ø×)Ò)Ø!Ø%ð *ñ ô ð r    )r•   r[   Ú_interrupt_requestedró   zSubagent %d %s after %.1fsz	timed outzraised rì  )r¬  r  r°  r±  r²  r÷   u;   Subagent %d 0-API-call timeout â€” diagnostic written to %sr2  zTimed out after r¼  r•   r‘   ry   )r{   r’   r±  rD  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 u[    API call(s) completed â€” likely stuck on a slow API call or unresponsive network request.r�  )	r  r’   rD  r‘   Úexit_reasonÚ	api_callsr±  Ú_child_roleÚdiagnostic_pathF)rï  rÜ   z&Failed to release credential lease: %sr†  r‡  z/Could not remove child from active_children: %sÚclosez,Failed to close child agent after delegationrK  z"Progress callback flush failed: %sÚfinal_responseÚ	completedÚinterruptedr  r“   rq   rr   rs   rt   rv   r=   ÚunknownÚ	arguments)rw   Ú
args_bytesru   rw   rx   éP   Úok)Úresult_bytesr’   rz   éÿÿÿÿrM  Úsession_prompt_tokensÚsession_completion_tokens)ÚinputÚoutput)
r  r’   rD  r  r±  r  r  ÚtokensÚ
tool_tracer  z$Subagent did not produce a response.c                 ó   — h | ]	}|D ]}|’ŒŒ
S rB   rB   )r6   ÚpathsÚps      r   r`  z$_run_single_child.<locals>.<setcomp>d  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)rv  rD  Ústale_pathsz%file_state sibling-write check failed©Úexc_infoÚsession_estimated_cost_usdÚsession_reasoning_tokensé(   c                 ó0   •— h | ]\  }}|‰k    ¯|D ]}|’ŒŒS rB   rB   )r6   Útidr)  r*  r  s       €r   r`  z$_run_single_child.<locals>.<setcomp>Š  sC   ø€ ð ð ð á�C˜Ø˜-Ò'Ð'Øð (Ð'Øð à'Ð'Ð'Ð'r    rÚ   rl   é    iô  )r{   r’   r±  rD  Úinput_tokensÚoutput_tokensÚreasoning_tokensr  Ú
files_readÚfiles_writtenÚoutput_tailÚcost_usdz'Progress callback completion failed: %sru  z] failedz*Progress callback failure relay failed: %s©r  r’   rD  r‘   r  r±  r  r:  )FÚtimeÚ	monotonicr  r^  r   Ú_last_resolved_tool_namesÚacquire_leaseÚcurrentr�  rè  r\   r   r]   r  ÚEventÚThreadÚstartr}   r€   r©   r¨   rT   r‰  rŠ  r‹  r   Úknown_readsr¶   r   Ú_set_subagent_approval_cbr+   Úsubmitro   r[   r  ÚFuturesTimeoutErrorr   Úroundr   Útyperã   rË  r'   rå  r´   ÚshutdownrŒ  rû   rW   Úrelease_leaser†  Úremover«   ÚUnboundLocalErrorr  rK  r~   r‚   r„   rK   rš   r(  Úwrites_sincerÕ   ri   rf   r�   rª   ÚloggingÚ	exception)Mr  r÷   r¬  r  Ú_kwargsÚchild_startre  r^  Ú_saved_tool_namesr­  Úleased_cred_idÚleased_entryr^   r  Ú_heartbeat_threadÚ_raw_sidrY  Ú
_raw_depthÚ
_tui_depthÚ_parent_sidr+  r•  Úparent_task_idÚ
wall_startÚparent_reads_snapshotÚchild_timeoutÚ_timeout_executorr  Ú_child_futurero   Ú_timeout_excÚ
is_timeoutÚdurationr  Úchild_api_callsÚ_summaryÚ_errÚsaved_tool_namesr®  rD  r  r  r  r’   r'  Útrace_by_idrq   rˆ   r‰   r‹   Úentry_trŠ   rx   r|   Úresult_metarÐ   r  Ú_input_tokensÚ_output_tokensÚ_modelÚentryÚ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  sM   ````                                                                   @@@@@@r   Ú_run_single_childry  Ó  sz  øøøøøøøøøø€ õ ”.Ñ"Ô"€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Ø�3€LðCð Cð Cð Cð Cð Cð Cð Cð Cð Cð CõJ "Ô(°ÈÐMÑMÔMÐØ×ÒÑÔÐõ �u˜n¨dÑ3Ô3€HÝ)¨(µCÑ8Ô8ÐB�8�8¸d€LØð 
Ý˜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Ø#ØØðð ñ	
ô 	
ð 	
ð$VIØð 	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ˆÝ”Y‘[”[ˆ
à<JÐR�D•Ô'¨Ñ7Ô7Ñ8Ô8Ð8ÐPRð 	õ +Ñ,Ô,ˆÝ.Øõ
 2Ý5Ñ7Ô7Ð9ð
ñ 
ô 
Ðð ILÈTÀ{Ðð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð *×0Ò0Ð1IÑJÔJˆð`	3Ø"×)Ò)°-Ð)Ñ@Ô@ˆF‰FøÝð Z	ñ Z	ð Z	ðÝ˜5 +Ñ.Ô.ð 6Ø—O’OÑ%Ô%Ð%Ð%Ý˜UÐ$:Ñ;Ô;ð 6Ø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ØØ)Ý$)¨-Ñ$8Ô$8Ý%*¨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˜øðU°Mð Uð UØ*ðUð Uð Uð �Dõ ˜<Ñ(Ô(�ð )Ø'1Ð>˜)˜)°wØØØ,6ÐC˜y˜y¸GØ,Ø$,Ý& uÐ.>ÀÑEÔEØ#2ð
ð 
ð 
ð 
ð 
ð 
ð 
ð ×&Ò&¨EÐ&Ñ2Ô2Ð2ð~ 	×ÒÑÔÐØ×Ò qÐÑ)Ô)Ð)ð ð 	/Ý  Ñ.Ô.Ð.àÐ! 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øøøøøøøðOZ	øøøð ð~ ×&Ò&¨EÐ&Ñ2Ô2Ð2Ð2øÐ×&Ò&¨EÐ&Ñ2Ô2Ð2Ð2øøøð ð 	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Ñ.Ô.ˆ	àð 	Ø"ˆ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¨6°9Ñ$=Ô$=Ý*-¨b¯fªf°[À"Ñ.EÔ.EÑ*FÔ*Fð#ð #˜ð #×)Ò)¨'Ñ2Ô2Ð2Ø "§¢ t¡¤˜Ø ð 9Ø18˜K¨Ñ.øð	9ð —W’W˜V‘_”_¨Ò.Ð.Ø!Ÿgšg i°Ñ4Ô4�GÝ# GÐ$O°¸7À3ÀBÀ3¼<×;MÒ;MÑ;OÔ;OÐ0OÑPÔP�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ð)!
ð !
ˆð, �XÒÐØ#ŸZšZ¨Ð1WÑXÔXˆE�'‰Nð	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øøøð ð: 	×ÒÑÔÐØ×Ò qÐÑ)Ô)Ð)ð ð 	/Ý  Ñ.Ô.Ð.àÐ! 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øøøøõK ð 
ñ 
ð 
Ý�œÑ)Ô)¨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ð
ð 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	×ÒÑÔÐØ×Ò qÐÑ)Ô)Ð)ð ð 	/Ý  Ñ.Ô.Ð.àÐ! 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øøøøøøøðK
øøøøð6 	×ÒÑÔÐØ×Ò qÐÑ)Ô)Ð)ð ð 	/Ý  Ñ.Ô.Ð.àÐ! 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øøøøøøsv  Â;B> Â>
C-ÃC(Ã(C-È0; È3I É ; É
I0ÉI+É&; É+I0É0C; Ì=M Í]+ Í]Í!<NÎ]Î
N+Î(]Î*N+Î+A=]Ð)9Q#Ñ"]Ñ#
Q0Ñ-]Ñ/Q0Ñ0A-]Ó)TÔ]Ô
TÔ]ÔTÔA]Õ,]Õ-]+ Õ1; ×W×
X×'XØXÙ[Ù3ZÚ[ÚZ	Ú[Ú!Z	Ú"[Û[7Û[2Û2[7Û;$\!Ü!$]Ý]Ý]Ý]+ Ý; Ý+^Þ; Þ^. Þ-; Þ.
_Þ8_ß; ß_ßL5; ìCo ï; ï&o>ï;; ï=o>ï>%; ð$)q ñ; ñqñ; ñqñ; ñ!q8 ñ7; ñ8rò; òròE; ÷w! ÷ ; ÷!w5÷2; ÷4w5÷5; ÷;x ø; ø
x3øx.ø); ø.x3ø3; ù7zú
z<úz7ú7z<ü}1ü#}
ü>}1ý
}	ý}1ý}	ý}1ý1~'þ~"þ"~'þ+$ÿ$8ÿ78ÿ;AJÁ@>AJÁA*AA0ÁA/AJÁA0
ABÁA:ABÁBAJÁBABÁB(AJÁCAJÁCAJ ÁDAD"ÁD"
AEÁD,AEÁEAEÁF#AHÁF8AGÁGAHÁGAG#	ÁG#AHÁG&AG#	ÁG'AHÁHAH<ÁHAH7ÁH7AH<ÁI $AI&ÁI&$AJÁJAJÁJAJÁJAJ ÁJA AQÁKAK/ÁK.AQÁK/
ALÁK9ALÁLAQÁLALÁLAAQÁM0AOÁNAN,ÁN AOÁN,AN0ÁN0AOÁN3AN0ÁN4AOÁOAQÁOAP	ÁO$APÁO?AQÁPAP	ÁP	AQÁP$AP3ÁP1AQÁP3$AQÁQAQÁQAQÁQAQÚtasksri  rj  c	                 óV  — |€t          d¦  «        S t          ¦   «         rt          d¦  «        S t          |¦  «        }	t          |dd¦  «        }
t	          ¦   «         }|
|k    r%t          j        dd|
› d|› d	t          › d
�i¦  «        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!          ¦   «         }|rNt#          |t$          ¦  «        r9t'          |¦  «        |k    r#t          dt'          |¦  «        › d|› d�¦  «        S |}nC| r2t#          | t          ¦  «        r|                      ¦   «         r	| |||	dœg}nt          d¦  «        S |st          d¦  «        S t+          |¦  «        D ]B\  }}| 	                    dd¦  «                             ¦   «         st          d|› d�¦  «        c S ŒCt-          j        ¦   «         }g }t'          |¦  «        }d„ |D ¦   «         }ddl}t%          |j        ¦  «        }g }	 t+          |¦  «        D �]\  }}d|v r| 	                    d¦  «        nd}t          | 	                    d¦  «        p|	¦  «        }t5          ||d         | 	                    d¦  «        | 	                    d¦  «        p||d         ||||d         |d         |d         |d          | 	                    d!¦  «        p|p| 	                    d"¦  «        |�|n|�|n| 	                    d#¦  «        |¬$¦  «        }||_        |                     |||f¦  «         �Œ	 ||_        n# ||_        w xY w|d%k    r;|d         \  } }!}t;          d|!d         ||¦  «        }"|                     |"¦  «         �njd}#t          |d&d¦  «        }$t=          |¬'¦  «        5 }%i }&|D ]0\  }}}|%                     t:          ||d         ||¬(¦  «        }'||&|'<   Œ1d)„ |D ¦   «         }(tA          |& !                    ¦   «         ¦  «        })|)�r³t          |d*d+¦  «        d,u rÏ|)D ]Ê}*|&|*         }+|* "                    ¦   «         rf	 |* #                    ¦   «         },n|# tH          $ rC}|+ddt          |¦  «        ddt          |( 	                    |+¦  «        d-d¦  «        d.œ},Y d}~n4d}~ww xY w|+d/dd0ddt          |( 	                    |+¦  «        d-d¦  «        d.œ},|                     |,¦  «         |#d%z  }#ŒË�nÑdd1l%m&}-m'}.  |-|)d2|.¬3¦  «        \  }/})|/D �]±}'	 |' #                    ¦   «         },nX# tH          $ rK}|&|'         }+|+ddt          |¦  «        ddt          |( 	                    |+¦  «        d-d¦  «        d.œ},Y d}~nd}~ww xY w|                     |,¦  «         |#d%z  }#|,d4         }+|+t'          |¦  «        k     r||+         nd|+› �}0|, 	                    d5d¦  «        }1|, 	                    d6d7¦  «        }2|2d8k    rd9nd:}3||#z
  }4|3› d;|+d%z   › d<|› d=|0› d>|1› d?�
}5|$r9	 |$ (                    |5¦  «         n4# tH          $ r tS          d@|5› �¦  «         Y nw xY wtS          d@|5› �¦  «         |$r`|4dk    rZ	 |$ *                    dA|4› dB|4d%k    rdCnd› dD�¦  «         �Œ~# tH          $ r&}6t                               dE|6¦  «         Y d}6~6�Œ©d}6~6ww xY w�Œ³|)�°³ddd¦  «         n# 1 swxY w Y   | +                    dF„ ¬G¦  «         |rËtY          |dH¦  «        r»|j-        r´|D ]±},	 |,d4         t'          |¦  «        k     r||,d4                  d         nd}7|j-         .                    |7|, 	                    dId¦  «        pd|,d4         t'          |¦  «        k     r#t          ||,d4                  dJ         dKd¦  «        nd¬L¦  «         Œ¢# tH          $ r Y Œ®w xY wt          |dKd¦  «        }8	 ddMl/m0}9 n# tH          $ r d}9Y nw xY w|D ]¤},|, 1                    dNd¦  «        }:|9€Œ	  |9dO|8|:|, 	                    dI¦  «        |, 	                    d6¦  «        te          |, 	                    d5¦  «        pddPz  ¦  «        ¬Q¦  «         Œy# tH          $ r t                               dRd,¬S¦  «         Y Œ¡w xY wtg          t-          j        ¦   «         |z
  dJ¦  «        };t          j        ||;dTœd+¬U¦  «        S )Va-  
    Spawn one or more child agents to handle delegated tasks.

    Supports two modes:
      - Single: provide goal (+ optional context, toolsets, role)
      - Batch:  provide tasks array [{goal, context, toolsets, 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.rV  r   r‘   z&Delegation depth limit reached (depth=z, max_spawn_depth=zW). Raise delegation.max_spawn_depth in config.yaml if deeper nesting is required (cap: z).rM  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.)r÷   rø   r  rr   z7Provide either 'goal' (single task) or 'tasks' (batch).zNo tasks provided.r÷   ry   zTask z is missing a 'goal'.c                 ó.   — g | ]}|d          dd…         ‘ŒS )r÷   Nr0  rB   r5   s     r   rh   z!delegate_task.<locals>.<listcomp>r  s$   € Ð5Ð5Ð5 a�1�V”9˜S˜b˜S”>Ð5Ð5Ð5r    rj  rr   rø   r  r  rg  ro  rb  rh  ri  r   r)  )r  r÷   rø   r  r  rM  r  r  rN  rO  rP  rQ  rR  rS  rr   rE   r  )r  )r  r÷   r¬  r  c                 ó   — i | ]	\  }}}||“Œ
S rB   rB   )r6   ÚiÚ_r¬  s       r   re   z!delegate_task.<locals>.<dictcomp>À  s    € ÐFÐFÐF©M¨Q°°5˜q %ÐFÐFÐFr    r  FTr�  r;  r  u9   Parent agent interrupted â€” child did not finish in time)rï  ÚFIRST_COMPLETEDg      à?)r•   Úreturn_whenr  r±  r’   ú?r  u   âœ“u   âœ—z [rí  r  z  (zs)r¾  r9  z taskr¼  z
 remainingzSpinner update_text failed: %sc                 ó   — | d         S )Nr  rB   )rg   s    r   ú<lambda>zdelegate_task.<locals>.<lambda>  s
   €  1 \¤?€ r    )ÚkeyÚ_memory_managerrD  ró   r  )Útaskro   Úchild_session_id)Úinvoke_hookr  Úsubagent_stopr½  )r~  Ú
child_rolerõ  Úchild_statusÚduration_msz$subagent_stop hook invocation failedr,  )ÚresultsÚtotal_duration_seconds)Úensure_ascii)4Ú
tool_errorrN   r£   r  r¿   r—   rÊ  r¼   r&   r'   ÚDEFAULT_MAX_ITERATIONSr   r]   Ú_resolve_delegation_credentialsr«   r€   r°   r}   r   r‚   r™   Ú	enumerater<  r=  r^  r>  r¯  rç  r„   ry  r   rF  rŒ  ÚkeysÚdonero   r\   Úconcurrent.futuresrï  r€  r;  ÚprintÚupdate_textÚsortr�  r†  Úon_delegationÚhermes_cli.pluginsr‰  rV   r©   rH  )<r÷   rø   r  rz  rM  ri  rj  rr   r  Útop_roler  r–  r)   Údefault_max_iterÚeffective_max_iterÚcredsr^   Úmax_childrenÚ	task_listr~  r‡  Úoverall_startrŽ  Ún_tasksÚtask_labelsÚ_model_toolsÚ_parent_tool_namesÚchildrenr7   Útask_acp_argsr˜  r¬  Ú_iÚ_tro   Úcompleted_countÚspinner_refÚexecutorÚfuturesÚfutureÚ_child_by_indexÚpendingÚfr¸  rn  Ú_cf_waitr€  r–  ÚlabelÚdurr’   ÚiconÚ	remainingÚcompletion_liner+  Ú
_task_goalÚ_parent_session_idÚ_invoke_hookr‹  Útotal_durations<                                                               r   r   r      s¯  € ð2 ÐÝÐJÑKÔKÐKõ
 ÑÔð 
ÝðNñ
ô 
ð 	
õ ˜tÑ$Ô$€Hõ �LÐ"3°QÑ7Ô7€EÝ$Ñ&Ô&€IØ�	ÒÐÝŒzàðJ¸Uð Jð JØ'0ðJð Jõ 2FðJð Jð Jðñ	
ô 	
ð 		
õ ‰.Œ.€CØ—w’wÐ/Õ1GÑHÔHÐð Ð! nÐ8HÒ&HÐ&HÝ�Šð=àÐ,ñ	
ô 	
ð 	
ð
 *Ðð$Ý/°°\ÑBÔBˆˆøÝð $ð $ð $Ý�#˜c™(œ(Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#øøøøð$øøøõ 0Ñ1Ô1€LØð U•˜E¥4Ñ(Ô(ð UÝˆu‰:Œ:˜Ò$Ð$ÝðF¥3 u¡:¤:ð Fð FØ.:ðFð Fð Fñô ð ð ˆ	ˆ	Ø	ð U•*˜T¥3Ñ'Ô'ð U¨D¯JªJ©L¬Lð Uà g¸8ÈXÐVÐVð
ˆ	ˆ	õ ÐSÑTÔTÐTàð 0ÝÐ.Ñ/Ô/Ð/õ ˜YÑ'Ô'ð @ð @‰ˆˆ4Ø�xŠx˜ Ñ#Ô#×)Ò)Ñ+Ô+ð 	@ÝÐ> aÐ>Ð>Ð>Ñ?Ô?Ð?Ð?Ð?ð	@õ ”NÑ$Ô$€MØ€Gå�)‰nŒn€Gà5Ð5¨9Ð5Ñ5Ô5€Kð
 'Ð&Ð&Ð&å˜lÔDÑEÔEÐð
 €Hð"DÝ˜iÑ(Ô(ð 	+ñ 	+‰DˆAˆqØ1;¸q°°˜AŸEšE *Ñ-Ô-Ð-ÀdˆMõ -¨Q¯UªU°6©]¬]Ð-F¸hÑGÔGˆNÝ&ØØ�v”YØŸš˜iÑ(Ô(ØŸš˜zÑ*Ô*Ð6¨hØ˜G”nØ1Ø"Ø)Ø"'¨
Ô"3Ø"'¨
Ô"3Ø!& yÔ!1Ø"'¨
Ô"3Ø%&§U¢U¨=Ñ%9Ô%9ð &(Øð&(à—9’9˜YÑ'Ô'ð %Ð0ð "�Mà&.Ð&:˜(˜(ÀÇ	Â	È&Ñ@QÔ@Qà#ð+ñ ô ˆEð0 0BˆEÔ,Ø�OŠO˜Q  5˜MÑ*Ô*Ð*Ñ*ð=	+ðB 2DˆÔ.Ð.øÐ1CˆÔ.ÐCÐCÐCÐCà�!‚|€|à  œ‰ˆˆB�Ý" 1 b¨¤j°%¸ÑFÔFˆØ�Š�vÑÔÐÑð ˆÝ˜lÐ,?ÀÑFÔFˆå¨LÐ9Ñ9Ô9ð m	N¸XØˆGØ'ð $ð $‘��1�eØ!ŸšÝ%Ø Ø˜6œØØ!-ð )ñ ô �ð #$�˜‘�ð GÐF¸XÐFÑFÔFˆOå˜'Ÿ,š,™.œ.Ñ)Ô)ˆGØñ WNÝ˜<Ð)?ÀÑGÔGÈ4ÐOÐOð %ð -ð -˜Ø% aœj˜ØŸ6š6™8œ8ð ð"Ø()¯ª©
¬
  øÝ#,ð "ð "ð "à25Ø.5Ø/3Ý-0°©X¬XØ12Ø89Ý3:Ø(7×(;Ò(;¸CÑ(@Ô(@ÐBRÐTXñ4&ô 4&ð
)"ð 
)"      øøøøð"øøøð /2Ø*7Ø+/Ø)dØ-.Ø45Ý/6Ø$3×$7Ò$7¸Ñ$<Ô$<Ð>NÐPTñ0"ô 0"ð
%ð 
%˜Eð  Ÿš uÑ-Ô-Ð-Ø'¨1Ñ,˜˜ÙàPÐPÐPÐPÐPÐPÐPÐPà ( Ø S°oð!ñ !ô !‘��gð #ð ,Nñ ,N�FðØ &§¢¡¤˜˜øÝ$ð ð ð Ø% fœo˜à*-Ø&-Ø'+Ý%(¨¡X¤XØ)*Ø01Ý+2Ø /× 3Ò 3°CÑ 8Ô 8Ð:JÈDñ,ô ,ð
!ð 
!˜˜˜˜˜˜øøøøðøøøð —N’N 5Ñ)Ô)Ð)Ø# qÑ(�Oð   Ô-�Cà,/µ#°kÑ2BÔ2BÒ,BÐ,B˜ CÔ(Ð(ÈÐPSÈÈð ð  Ÿ)š)Ð$6¸Ñ:Ô:�CØ"ŸYšY x°Ñ5Ô5�FØ$*¨kÒ$9Ð$9˜5˜5¸u�DØ '¨/Ñ 9�IØ)-Ð&UÐ&U°°Q±Ð&UÐ&U¸Ð&UÐ&UÀEÐ&UÐ&UÈcÐ&UÐ&UÐ&U�OØ"ð 6ð:Ø'×3Ò3°OÑDÔDÐDÐDøÝ(ð :ð :ð :Ý!Ð"8 Ð"8Ð"8Ñ9Ô9Ð9Ð9Ð9ð:øøøõ Ð4 ?Ð4Ð4Ñ5Ô5Ð5ð #ð N y°1¢} }ðNØ'×3Ò3Ø a¨	Ð aÐ a¸yÈAº~¸~¸¸ÐSUÐ aÐ aÐ añô ð ñ øõ  )ð Nð Nð NÝ"ŸLšLÐ)IÈ1ÑMÔMÐMÐMÐMÐMÐMÑMøøøøðNøøøùðm ñ WNð-m	Nð m	Nð m	Nñ m	Nô m	Nð m	Nð m	Nð m	Nð m	Nð m	Nð m	Nøøøð m	Nð m	Nð m	Nð m	Nð` 	�ŠÐ2Ð2ˆÑ3Ô3Ð3ð 	ðå�LÐ"3Ñ4Ô4ðð Ô(ðð
 ð 	ð 	ˆEðð ˜\Ô*­S°©^¬^Ò;Ð;ð ˜e LÔ1Ô2°6Ô:Ð:àð ð
 Ô,×:Ò:Ø#Ø Ÿ9š9 Y°Ñ3Ô3Ð9°rð ! Ô.µ°X±´Ò>Ð>õ   ¨¨|Ô)<Ô =¸aÔ @À,ÐPRÑSÔSÐSàð ;ñ ô ð ð øõ ð ð ð Ø�ðøøøõ ! ¨|¸TÑBÔBÐðØBÐBÐBÐBÐBÐBÐBøÝð ð ð Øˆˆˆðøøøàð Pð PˆØ—Y’Y˜}¨dÑ3Ô3ˆ
ØÐØð
	PØˆLØØ"4Ø%Ø#Ÿiši¨	Ñ2Ô2Ø"ŸYšY xÑ0Ô0Ý §¢Ð+=Ñ!>Ô!>Ð!CÀ!ÀtÑ KÑLÔLðñ ô ð ð øõ ð 	Pð 	Pð 	PÝ�LŠLÐ?È$ˆLÑOÔOÐOÐOÐOð	Pøøøõ �4œ>Ñ+Ô+¨mÑ;¸QÑ?Ô?€NåŒ:àØ&4ð	
ð 	
ð ðñ ô ð s  ÃC) Ã)
DÃ3DÄDÄDÉ+D$N Î	N!ÐB\-Ò"R7Ò6\-Ò7
TÓ9S?Ó:\-Ó?TÔA*\-Õ/VÖ\-Ö
WÖAW×\-×W×B\-Ù0ZÚ\-ÚZ%Ú"\-Ú$Z%Ú%\-Û$[)Û'\-Û)
\Û3\Ü\-Ü\Ü\-Ü-\1Ü4\1Ý-B`à
`à`à.`5 à5aáaá%Acã&c+ã*c+r£  c                 óD  — | st          |dd¦  «        S t          |dd¦  «        pd}t          |dd¦  «        }|�| |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 )ah  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.
    r”  Nrg  ry   r   )Ú	load_poolz:Could not load credential pool for child provider '%s': %s)r  Úagent.credential_poolr¿  Úhas_credentialsr\   r   r]   )r£  r  Úparent_providerÚparent_poolr¿  Úpoolr^   s          r   r“  r“  ^  s   € ð ð ?Ý�|Ð%7¸Ñ>Ô>Ð>å˜l¨J¸Ñ=Ô=ÐCÀ€OÝ˜,Ð(:¸DÑAÔA€KØÐÐ#5¸Ò#HÐ#HØÐð
Ø3Ð3Ð3Ð3Ð3Ð3àˆyÐ+Ñ,Ô,ˆØÐ × 4Ò 4Ñ 6Ô 6ÐØˆKøøÝð 
ð 
ð 
Ý�ŠØHØØñ	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøð ˆ4s   Á(A- Á-
BÁ7BÂB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}|r–|p&t          j        dd¦  «                             ¦   «         }|st          d¦  «        ‚|                     ¦   «         }d	}d
}	t          |¦  «        dk    r	d|v rd}d}	n t          |¦  «        dk    rd}d}	nd|v rd	}d}	|||||	dœS |s|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�¦  «        ‚||                     d¦  «        |                     d¦  «        ||                     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. 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  ry   Nrg  ro  rb  ÚOPENAI_API_KEYzeDelegation base_url is configured but no API key was found. Set delegation.api_key or OPENAI_API_KEY.Úcustomrk  zchatgpt.comz/backend-api/codexzopenai-codexÚcodex_responseszapi.anthropic.comÚ	anthropicÚanthropic_messageszapi.kimi.com/coding)r  rg  ro  rb  rh  r   )Úresolve_runtime_provider)Ú	requestedz$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'.rh  r   r)  )r  rg  ro  rb  rh  r   r)  )r€   r'   r™   r­   r®   r«   rš   r   Úhermes_cli.runtime_providerrË  r\   r   )r)   r  Úconfigured_modelÚconfigured_providerÚconfigured_base_urlÚconfigured_api_keyrb  Ú
base_lowerrg  rh  rË  Úruntimer^   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À$Ðàð 
Ø$ÐO­¬	Ð2BÀBÑ(GÔ(G×(MÒ(MÑ(OÔ(OˆØð 	Ýð<ñô ð ð
 )×.Ò.Ñ0Ô0ˆ
ØˆØ%ˆåÐ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à*Ð*Ð5HÐIÑIÔIˆˆøÝð ð ð ÝðQÐ3Fð Qð QÈ3ð Qð Qð Qñ
ô 
ð
 ð	øøøøðøøøð �kŠk˜) RÑ(Ô(€GØð 
ÝðNÐ$7ð Nð Nð Nñ
ô 
ð 	
ð "Ø—K’K 
Ñ+Ô+Ø—K’K 
Ñ+Ô+ØØ—K’K 
Ñ+Ô+Ø—;’;˜yÑ)Ô)Ý�W—[’[ Ñ(Ô(Ð.¨BÑ/Ô/ðð ð s   ÆF Æ
F=Æ!F8Æ8F=c                  óØ   — 	 ddl m}  |                      di ¦  «        }|r|S n# t          $ r Y nw xY w	 ddlm}  |¦   «         }|                     di ¦  «        S # t          $ r i cY S w xY w)aN  Load delegation config from CLI_CONFIG or persistent config.

    Checks the runtime config (cli.py CLI_CONFIG) first, then falls back
    to the persistent config (hermes_cli/config.py load_config()) so that
    ``delegation.model`` / ``delegation.provider`` are picked up regardless
    of the entry point (CLI, gateway, cron).
    r   )Ú
CLI_CONFIGr0   )Úload_config)ÚclirÕ  r'   r\   Úhermes_cli.configrÖ  )rÕ  r)   rÖ  Úfulls       r   r&   r&   Ü  s¸   € ðØ"Ð"Ð"Ð"Ð"Ð"à�nŠn˜\¨2Ñ.Ô.ˆØð 	ØˆJð	øåð ð ð ØˆðøøøðØ1Ð1Ð1Ð1Ð1Ð1àˆ{‰}Œ}ˆØ�xŠx˜ bÑ)Ô)Ð)øÝð ð ð Øˆ	ˆ	ˆ	ðøøøs   ‚# £
0¯0´%A ÁA)Á(A)r   a'  Spawn one or more subagents to work on tasks in isolated contexts. Each subagent gets its own conversation, terminal session, and toolset. Only the final summary is returned -- intermediate tool results never enter your context window.

TWO MODES (one of 'goal' or 'tasks' is required):
1. Single task: provide 'goal' (+ optional context, toolsets)
2. Batch (parallel): provide 'tasks' array with up to delegation.max_concurrent_children items (default 3, configurable via config.yaml, no hard ceiling). All run concurrently and results are returned together. Nested delegation requires role='orchestrator' and delegation.max_spawn_depth >= 2.

WHEN TO USE delegate_task:
- Reasoning-heavy subtasks (debugging, code review, research synthesis)
- Tasks that would flood your context with intermediate data
- Parallel independent workstreams (research A and B simultaneously)

WHEN NOT TO USE (use these instead):
- Mechanical multi-step work with no reasoning needed -> use execute_code
- Single tool call -> just call the tool directly
- Tasks needing user interaction -> subagents cannot use clarify

IMPORTANT:
- Subagents have NO memory of your conversation. Pass all relevant info (file paths, error messages, constraints) via the 'context' field.
- Leaf subagents (role='leaf', the default) CANNOT call: delegate_task, clarify, memory, send_message, execute_code.
- Orchestrator subagents (role='orchestrator') retain delegate_task so they can spawn their own workers, but still cannot use clarify, memory, send_message, or execute_code. Orchestrators are bounded by delegation.max_spawn_depth (default 2) and can be disabled globally via delegation.orchestrator_enabled=false.
- Each subagent gets its own terminal session (separate working directory and state).
- Results are always returned as an array, one entry per task.ÚobjectÚstringz‚What the subagent should accomplish. Be specific and self-contained -- the subagent knows nothing about your conversation history.)rI  r   z£Background information the subagent needs: file paths, error messages, project structure, constraints. The more specific you are, the better the subagent performs.ÚarrayrI  zcToolsets to enable for this subagent. Default: inherits your enabled toolsets. Available toolsets: zŸ. Common patterns: ['terminal', 'file'] for code work, ['web'] for research, ['browser'] for web interaction, ['terminal', 'file', 'web'] for full-stack tasks.)rI  rf   r   z	Task goalzTask-specific contextz,Toolsets for this specific task. Available: zT. Use 'web' for network access, 'terminal' for shell, 'browser' for web interaction.zfPer-task ACP command override (e.g. 'claude'). Overrides the top-level acp_command for this task only.zPer-task ACP args override.r¡   z;Per-task role override. See top-level 'role' for semantics.)rI  Úenumr   )r÷   rø   r  ri  rj  rr   )rI  Ú
propertiesÚrequiredzïBatch mode: tasks to run in parallel (limit configurable via delegation.max_concurrent_children, default 3). Each gets its own subagent with isolated context and terminal session. When provided, top-level goal/context/toolsets are ignored.a@  Role of the child agent. 'leaf' (default) = focused worker, cannot delegate further. 'orchestrator' = can use delegate_task to spawn its own workers. Requires delegation.max_spawn_depth >= 2 in config; ignored (treated as 'leaf') when the child would exceed max_spawn_depth or when delegation.orchestrator_enabled=false.a   Override ACP command for child agents (e.g. 'claude', 'copilot'). When set, children use ACP subprocess transport instead of inheriting the parent's transport. Enables spawning Claude Code (claude --acp --stdio) or other ACP-capable agents from any parent, including Discord/Telegram/CLI.z�Arguments for the ACP command (default: ['--acp', '--stdio']). Only used when acp_command is set. Example: ['--acp', '--stdio', '--model', 'claude-opus-4-6'])r÷   rø   r  rz  rr   ri  rj  )r=   r   Ú
parameters)rÍ   r‘  r0   c                 óˆ  — t          |                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        |                     d	¦  «        ¬
¦	  «	        S )Nr÷   rø   r  rz  rM  ri  rj  rr   r  )	r÷   rø   r  rz  rM  ri  rj  rr   r  )r   r'   )r)  r"  s     r   r„  r„  �	  s�   € �}Ø�XŠX�fÑÔØ—’˜Ñ#Ô#Ø—’˜*Ñ%Ô%Ø�hŠh�wÑÔØ—x’xÐ 0Ñ1Ô1Ø—H’H˜]Ñ+Ô+Ø—’˜*Ñ%Ô%Ø�XŠX�fÑÔØ—V’V˜NÑ+Ô+ð
 ñ 
 ô 
 € r    u   ðŸ”€)r=   ÚtoolsetÚschemaÚhandlerÚcheck_fnrB  r3   )rE   )NNNNNNr    )NN)	NNNNNNNNN)iræ   rÝ  r—   rO  Ú	getLoggerrã   r   r­   r  r<  r—  r   r   rG  r   Útypingr   r   r   r	   r  r
   r9   r   Útools.terminal_toolr   rE  Úutilsr   r   Ú	frozensetr4   r€   r   r#   r+   r:   rÕ   rf   Ú_SUBAGENT_TOOLSETSrû   Ú_TOOLSET_LIST_STRr¬   r¹   rº   r¼   ÚLockrJ   rF   rK   Ú__annotations__rR   rG   rL   rN   rT   rW   r_   rj   r©   r�   rƒ   r£   r°   r´   r¶   r¿   rÆ   rË   rÑ   rŒ  rØ   r’  rµ   rð  rò  rñ  rŽ  ÚEnumrâ   rë   rì   rí   rè   rð   rò   rþ   r  r  ÚcallablerL  r¯  rB  rå  ry  r   r“  r~   r“  r&   ÚDELEGATE_TASK_SCHEMArÎ   rÍ   r‘  ÚregisterrB   r    r   ú<module>ró     s9  ððð ð ð" €€€Ø €€€Ø €€€à	ˆÔ	˜8Ñ	$Ô	$€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€ðð ð ð ð ð ð ð ð ð ð
 -Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø RÐ RÐ RÐ RÐ RÐ RØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4ð #˜ðð ð ñô Ð ð8 ð °3ð ÀSð ð ð ð ð
 Cð 
°cð 
Èð 
ð 
ð 
ð 
ðð ð ð, $˜)Ð$TÐ$TÐ$TÑUÔUÐ Ø�Vð ð à$�h”nÑ&Ô&ðñ ô ñ ô Ð ð —I’IÐCÐCÐ0BÐCÑCÔCÑCÔCÐ à#$Ð  Ø€	ð Ð ØÐ ð #�I”NÑ$Ô$Ð Ø€ˆtÐ Ð Ñ à'˜œÑ)Ô)Ð ð 02Ð �4˜˜T # s (œ^Ð+Ô,Ð 1Ð 1Ñ 1ð	˜Tð 	 dð 	ð 	ð 	ð 	ð˜ð ð ð ð ð
(˜t C¨ Hœ~ð (°$ð (ð (ð (ð (ð1 cð 1¨dð 1ð 1ð 1ð 1ð
 Cð ¨Dð ð ð ð ð.

˜t D¨¨c¨¤NÔ3ð 

ð 

ð 

ð 

ð  Øð	2ð 2ð 2Ø��c�ŒNð2ð ð2ð ð	2ð
 
ˆ$ˆs�CˆxŒ.Ôð2ð 2ð 2ð 2ðj  cð  ¨dð  ð  ð  ð  ðF�x ”}ð ¨ð ð ð ð ð"#, cð #,ð #,ð #,ð #,ðL(˜Eð (ð (ð (ð (ð6#˜cð #ð #ð #ð #ðL 4ð ð ð ð ð"J 4ð Jð Jð Jð Jð;˜sð ; tð ;ð ;ð ;ð ;ðØ˜”IðØ03°C´ðà	ˆ#„Yðð ð ð ð Ð ØÐ ØÐ ð  !Ð Ø"$Ð Ø.Ð.Ð.Ð ð4ð 4ð 4ð 4ð 4�C˜œñ 4ô 4ð 4ð0 Ô,Ø(Ô6Ø!Ô3Ø#Ô7Ø&Ô4ð/ð /Ð �4˜˜]Ð*Ô+ð ð ñ ð Tð ð ð ð ð "ðIð %)ØØØðIð Ið IØ
ðIà�cŒ]ðIð ˜S”Mð	Ið
 ðIð ðIð ðIð 	ðIð Ið Ið IðX¨X°c¬]ð ð ð ð ð6C 4¨¤9ð C°°c´ð Cð Cð Cð Cð ð	xð "&Ø#ØØØ$(ðxð xð xØðxà
ðxð ð	xð ˜#”ðxð ˜Œ}ðxð �CŒ=ðxð �CŒ=ðxð �t˜C”yÔ!ðxð ˆhÔðxð xð xð xðJ (,Ø'+Ø&*Ø'+à*.Ø-1ð ð)}ð }Øð}à
ð}ð �cŒ]ð}ð �t˜C”yÔ!ð	}ð
 �CŒ=ð}ð ð}ð ð}ð   ”}ð}ð   ”}ð}ð ˜s”mð}ð   ”}ð}ð # 3œ-ð}ð     S¤	Ô*ð!}ð( ð)}ð }ð }ð }ð@MàðMð ðMð ð	Mð
 ðMð ˜IÔ,Ô-ðMð ðMð ˆc„]ðMð Mð Mð Mðf Øð	jIð jIØðjIà
ðjIð 
ˆ#ˆsˆ(„^ðjIð jIð jIð jIð\ Ø!Ø$(Ø,0Ø$(Ø!%Ø$(ØØð[ð [Ø
�3Œ-ð[à�cŒ]ð[ð �t˜C”yÔ!ð[ð �D˜˜c 3˜hœÔ(Ô)ð	[ð
 ˜S”Mð[ð ˜#”ð[ð �t˜C”yÔ!ð[ð �3Œ-ð[ð 	ð[ð [ð [ð [ð|
°xÀ´}ð ð ð ð ðBZ¨ð ZÀð Zð Zð Zð Zðz�dð ð ð ð ð< ð	Ið> ð !ð,ðð ð !ðJðð ð  Ø  (Ð+ðHà+<ðHð Hð Hð	ð ð  à$à)1À+Ð NÐ Nà$,Ø+Bð$ð $ð
 %,Ø&,¨hÐ%7ð ,BÐZkð  ,Bð  ,Bð  ,Bð%ð %ð %-ð ,Tð(ð (ð
 %,Ø&,¨hÐ%7Ø+Hð%ð %ð %-Ø%+¨^Ð$<Ø+hð!ð !ð)#ð #ð4 "( ð9ð ðDRðI(ð (ðT !Ø Ð0ð=ð	ð ð !ðcðð ð  Ø  (Ð+ðuð	ð ðyd
ð d
ðJ ðOhð hðCJð JÐ ð\ 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €Ô Ø	ØØð
ð 
ð )Ø
ð!ñ ô ð ð ð r    