
    p#j;                    F   d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZ ddlm Z  dd	l!m"Z" dd
l#m$Z$m%Z%  ej&        e'          Z(dZ)d Z*dddddd0dZ+d1d2d!Z,dd"d#d3d&Z-d4d(Z.d5d6d,Z/d5d6d-Z0d.d/gZ1dS )7u  Tool-call execution — sequential and concurrent dispatch.

Both AIAgent methods (``_execute_tool_calls_sequential`` and
``_execute_tool_calls_concurrent``) live here as module-level
functions that take the parent ``AIAgent`` as their first argument.

``run_agent`` keeps thin wrappers so existing call sites work; tests
that patch ``run_agent._set_interrupt`` are honored because the
extracted functions reach back through the ``run_agent`` module via
``_ra()`` for that symbol.
    )annotationsN)AnyOptional)KawaiiSpinnerbuild_tool_previewget_cute_tool_messageget_tool_emoji_detect_tool_failure)ToolGuardrailDecision)_is_destructive_command_is_multimodal_tool_result_multimodal_text_summary!_append_subdir_hint_to_multimodalmake_tool_result_message)get_active_env)propagate_context_to_thread)maybe_persist_tool_resultenforce_turn_budget   c                     ddl } | S )zRLazy reference to ``run_agent`` so patches like ``run_agent._set_interrupt`` work.r   N	run_agentr   s    8/home/ubuntu/.hermes/hermes-agent/agent/tool_executor.py_rar   7   s        )duration_msstatus
error_typeerror_messagefunction_namestrfunction_argsdictresultr   effective_task_idtool_call_idr   intr   
str | Noner   r   returnNonec       	            	 ddl m}
  |
||||pdt          | dd          pd|pdt          | dd          pdt          | dd          pd||||	           d S # t          $ r Y d S w xY w)Nr   )_emit_post_tool_call_hook 
session_id_current_turn_id_current_api_request_id)r    r"   r$   task_idr.   r&   turn_idapi_request_idr   r   r   r   )model_toolsr,   getattr	Exception)agentr    r"   r$   r%   r&   r   r   r   r   r,   s              r   _emit_terminal_post_tool_callr8   =   s    999999!!''%+ulB77=2%+E#5r::@b"5*CRHHNB#!'	
 	
 	
 	
 	
 	
    s   AA 
A&%A&user interruptreasonc                :    t          j        d|  ddd          S )NTool execution cancelled by 	cancelled)errorr   Fensure_ascii)jsondumps)r:   s    r   _cancelled_tool_resultrC   ^   s8    :<F<<!	
 	
    r   keyboard_interrupt)r:   r   
start_timefloatc                   t          |          }t          | |||||t          t          j                    |z
  dz            d|d| 
  
         |S )N  r=   r<   )	r    r"   r$   r%   r&   r   r   r   r   )rC   r8   r'   time)	r7   r    r"   r%   r&   rE   r:   r   r$   s	            r   '_emit_cancelled_terminal_post_tool_callrJ   h   sm     $F++F!##+!z1T9::=V==    Mr   	frozensetc                :   	 ddl }ddlm} ddlm} n# t
          $ r t                      cY S w xY wt          | dd          }t          | dd          }t          |dd          |t          |          nd|t          |          ndf}t          | dd          }||d         |k    r|d	         S 	 |                    ||d
d
          pg }|	                    |          }	n# t
          $ r t                      }	Y nw xY w	 ||	f| _
        n# t
          $ r Y nw xY w|	S )a  Return the deferrable tool names the session may invoke via tool_call.

    The Tool Search unwrap dispatches the underlying tool directly, bypassing
    the bridge branch (and its scope check) in
    ``model_tools.handle_function_call``. To keep a restricted-toolset session
    (subagent, kanban worker, curated gateway session) from reaching tools it
    was never granted, the unwrap validates the underlying name against this
    set: the deferrable subset of the session's own enabled/disabled toolset
    scope.

    Result is cached on the agent and refreshed when the tool registry's
    generation changes (e.g. an MCP server reconnects), so the common case is
    a dict lookup, not a full tool-defs rebuild on every tool call.
    r   Ntool_search)registryenabled_toolsetsdisabled_toolsets_generation_tool_search_scope_cache   T)rP   rQ   
quiet_modeskip_tool_search_assembly)r4   toolsrN   tools.registryrO   r6   rK   r5   get_tool_definitionsscoped_deferrable_namesrS   )
r7   r4   _ts	_registryenableddisabled	cache_keycachedscoped_defsnamess
             r   _tool_search_scoped_namesrc      s   ,,,,,,8888888   {{ e/66Gu1488H	=!,,%1	't'3	(I
 U6==FfQi944ay	!66$&&*	 7 
 
 
  	 ++K88   *3U);&&   Ls0    ..10C" "C=<C=	D 
DDmessageslistapi_call_countc                :   >?@ |j         }t          |          } j        rbt           j         d| d           |D ]C}                    t          |j        j        d|j        j         d|j	                             DdS g ?|D ]}|j        j        }	|	dk    rd _
        n|	dk    rd _        	 t          j        |j        j                  }
n# t          j        $ r i }
Y nw xY wt!          |
t"                    si }
d}	 dd	lm} |	|j        k    rO|                    |
          \  }}}|s4|r2|t-                     v r|}	|}
nt          j        d
d| did          }n# t0          $ r Y nw xY wd}d}|-|}t3           |	|
|t5          |dd          pddd|	  	         n)	 ddlm}  ||	|
pdt5           dd          pdt5          |dd          pdt5           dd          pdt5           dd          pd          }n# t0          $ r d}Y nw xY w|Bt          j        d
|id          }t3           |	|
|t5          |dd          pddd|	  	         ns j                            |	|
          }|j        sQ                      |          }d}t3           |	|
|t5          |dd          pdddt5          |dd          pd	  	         ||	dv rn j!        j"        rb	 |
#                    dd          }|r8 j!        $                    |          } j!        %                    |d |	            n# t0          $ r Y nw xY w|	d!k    r j!        j"        r	 |
#                    d"d          }tM          |          ra|
#                    d#          p%tO          j(        d$tO          j)                              } j!        %                    |d%|dd&                     n# t0          $ r Y nw xY w?                    ||	|
||f           d'*                    d( ?D                       } j+        s't          d)| d*|            tY          ?d+          D ] \  }\  }}}}}t          j        |d          } j-        rqt          d,| d-| d.t]          |/                                           d/           t           0                    d0t          j        |d1d2                               t          |           j1        k    r|d j1                 d3z   n|}t          d,| d-| d.t]          |/                                           d4|            ?D ]j\  }}}}}| j2        rX	 tg          ||          } 2                    d5|||           <# t0          $ r!} ti          j5        d6|             Y d} ~ bd} ~ ww xY wk?D ]^\  }}}}}| j6        rL	  6                    |j	        ||           0# t0          $ r!} ti          j5        d7|             Y d} ~ Vd} ~ ww xY w_dg|z  @tY          ?          D ]\  }\  }}}}}||||d8ddf@|<   | _7         8                    d9| d:|             @fd;}!d}" 9                                rj :                                rVtw          j<        t{          j>                              }#t{          |# d<| d=d> j?        ?          }"|"@                                 	 d@ tY          ?          D             }$g >|$rt          t          |$          t                    }%t          jD        E                    |%A          5 }&|$D ]B\  }}}}|&F                    t          |!          ||||          }'>                    |'           Ct          jH                    }(d})	 t          jD        I                    >dBC          \  }*}+|+sn j        rn|)s1d}) J                     j         dDt          |+           dEdF           |+D ]}'|'K                                 t          jD        I                    |+dGC           nt          t          jH                    |(z
            },|,dk    r_|,dHz  dIk     rV>?fdJ|+D             }- 8                    dK|, dLt          |+           dMd'*                    |-ddN                    d/           &ddd           n# 1 swxY w Y   |"rRt          dO @D                       }.t          dP @D                       }/|"N                    dQ|. dR| dS|/dTdU           nZ# |"rSt          dO @D                       }.t          dP @D                       }/|"N                    dQ|. dR| dS|/dTdU           w w xY wtY          ?          D ]\  }\  }}}}}@|         }0d}1|0j j        r0d| d}2t3           |||2t5          |dd          pddVdWdX	  	         n/dY| dZ}2t3           |||2t5          |dd          pdd
d[|2	  	         d8}3nX|0\  }	}
}2}3}4}1|1s O                    |	|
|2|4\          }2|4rKt          |2          }5t          |5          d]k    r
|5dd]         n|5}6t          R                    d^|	|3|6           |1sF	  S                    |	|
|2|4           n,# t0          $ r}7ti          j5        d_|7           Y d}7~7nd}7~7ww xY w|1sS j2        rL	  2                    d`|	dd|3|4|2a           n.# t0          $ r!} ti          j5        d6|             Y d} ~ nd} ~ ww xY w j-        rCti          j5        db|	 dc|3ddde           ti          j5        dft          |2           dg|2             9                                r,t          |||3|2h          }8 U                    di|8            n j+        st          |2          }9 j-        r>t          dj|d+z    dc|3ddde           t           0                    dk|9                     nHt          |9           j1        k    r|9d j1                 d3z   n|9}:t          dj|d+z    dc|3dddl|:            d _7         8                    dm| dn|3dTdo           |1sT jV        rM	  V                    |j	        |||2           n.# t0          $ r!} ti          j5        dp|             Y d} ~ nd} ~ ww xY wt          |2          s%t          |2||j	        t                    q          n|2}2 jZ        [                    ||          };|;r%t          |2          rt          |2|;           n|2|;z  }2 ]                    ||2          }<                    t          ||<|j	                              ^                    d+           t          ?          }|dk    r)| d         }=t          |=t                    r           |dk    r ^                    |           dS dS )szExecute multiple tool calls concurrently using a thread pool.

    Results are collected in the original tool-call order and appended to
    messages so the API sees them in the expected sequence.
       ⚡ Interrupt: skipping  tool call(s)   [Tool execution cancelled — # was skipped due to user interrupt]Nmemoryr   skill_managerM   r>   'O' is not available in this session. Use tool_search to find tools you can call.Fr?   idr-   blockedtool_scope_blockr    r"   r$   r%   r&   r   r   r   get_pre_tool_call_block_messager.   r/   r0   r1   r.   r&   r2   r3   plugin_blockTguardrail_blockmessage Tool blocked by guardrail policy>   patch
write_filepathbefore terminalcommandworkdirTERMINAL_CWDbefore terminal: <   z, c              3  &   K   | ]\  }}}}}|V  d S N ).0_names      r   	<genexpr>z0execute_tool_calls_concurrent.<locals>.<genexpr>X  s-      II(84AqtIIIIIIr   u     ⚡ Concurrent: u    tool calls — rT        📞 Tool : ()Args:    indentr@   ...) - tool.startedTool progress callback error: Tool start callback error:         z
executing z tools concurrently: c                &   t          j                    j        }j        5  j                            |           ddd           n# 1 swxY w Y   j        r4	 t                                          d|           n# t          $ r Y nw xY w	 ddl
m}  |j                   n# t          $ r Y nw xY wt          j                    }	 	                     |||j        d          }n@# t           $ r 	                     d           n# t          $ r Y nw xY wt%          ||t'          |dd          pd|	          }t          j                    |z
  }t(                              d
||           ||||ddf| <   Y j        5  j                            |           ddd           n# 1 swxY w Y   	 t                                          d|           dS # t          $ r Y dS w xY wt          $ r0}	d| d|	 }t(                              d||	d           Y d}	~	nd}	~	ww xY wt          j                    |z
  }t1          ||          \  }
}|
r&t(                              d|||dd                    n*t(                              d||t3          |                     |||||
df| <   j        5  j                            |           ddd           n# 1 swxY w Y   	 t                                          d|           dS # t          $ r Y dS w xY w# j        5  j                            |           ddd           n# 1 swxY w Y   	 t                                          d|           w # t          $ r Y w w xY wxY w)z%Worker function executed in a thread.NTr   set_activity_callback)rd   pre_tool_block_checkedkeyboard interruptrp   r-   r    r"   r%   r&   rE   ztool %s cancelled (%.2fs)FError executing tool '': z_invoke_tool raised for %s: %sexc_infoztool %s failed (%.2fs): %s   #tool %s completed (%.2fs, %d chars))	threadingcurrent_threadident_tool_worker_threads_lock_tool_worker_threadsadd_interrupt_requestedr   _set_interruptr6   tools.environments.baser   _touch_activityrI   _invoke_toolrp   KeyboardInterrupt	interruptrJ   r5   loggerinfodiscardr>   r
   len)index	tool_callr    r"   _worker_tidr   startr$   duration
tool_erroris_errorr   r7   r%   rd   resultss               r   	_run_toolz0execute_tool_calls_concurrent.<locals>._run_tool  s   
  .006, 	8 	8&**;777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 % 	$$T;7777   	EEEEEE!!%"78888 	 	 	D	
 	1	i++!!%L%+/ ,   %   OO$89999    D@"/"/&7!(D"!=!=!C$    9;;.7QQQ"/RVX]!^$ 0 @ @*22;???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @$$UK88888   +  i i iP-PPJPP=}jcghhhhhhhhi y{{U*H.}fEEKHa i8-SYZ^[^Z^S_````A=RZ\_`f\g\ghhh+]FHhX]^GEN 0 @ @*22;???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @$$UK88888   	 0 @ @*22;???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @$$UK8888   s'  AAA"A> >
B
BB& &
B32B3 C- +L" -
H*8DH*
DH*DA&H*L" 	F00F47F4<"G   
G.-G.1	H*:&H% L" %H**B	L" :K!!K%(K%-"L 
LL"N*MNMNMN"N ?N 
N
NNNu    ⚡ running z tools concurrentlydotsspinner_typeprint_fnc                0    g | ]\  }\  }}}}}|||||fS r   r   )r   itcr   argsblock_resultblocked_by_guardrails          r   
<listcomp>z1execute_tool_calls_concurrent.<locals>.<listcomp>  sA     
 
 
GGBdL2F# D$###r   )max_workersg      @)timeoutu   ⚡ Interrupt: cancelling z pending concurrent tool(s)forceg      @      c                Z    g | ]'}|v                      |                   d          (S )rT   )r   )r   ffuturesparsed_callss     r   r   z1execute_tool_calls_concurrent.<locals>.<listcomp>  s@     * * * ! G|| )q)9)9:1=+||r   zconcurrent tools running (zs, z remaining:    c              3     K   | ]}|dV  	d S )NrT   r   r   rs     r   r   z0execute_tool_calls_concurrent.<locals>.<genexpr>  s"      @@!!-A----@@r   c              3  *   K   | ]}||d         V  d S )Nr   r   r   s     r   r   z0execute_tool_calls_concurrent.<locals>.<genexpr>   s&      CCQQ]AaD]]]]CCr   u   ⚡ /z tools completed in .1fzs totalr=   rD   z*Tool execution cancelled by user interruptr   z!': thread did not return a resultthread_missing_resultfailedr   "Tool %s returned error (%.2fs): %s(file-mutation verifier record failed: %stool.completedr   r   r$   Tool  completed in .2fsTool result (	 chars): r$          ✅ Tool Result: s - tool completed:  (s)Tool complete callback error: content	tool_nametool_use_idenvr   )`
tool_callsr   r   print
log_prefixappendr   functionr   rp   _turns_since_memory_iters_since_skillrA   loads	argumentsJSONDecodeError
isinstancer#   rW   rN   TOOL_CALL_NAMEresolve_underlying_callrc   rB   r6   r8   r5   hermes_cli.pluginsru   _tool_guardrailsbefore_callallows_execution_guardrail_block_result_checkpoint_mgrr]   getget_working_dir_for_pathensure_checkpointr   osgetenvgetcwdjoinrU   	enumerateverbose_loggingre   keys_wrap_verboselog_prefix_charstool_progress_callback_build_tool_previewloggingdebugtool_start_callback_current_toolr    _should_emit_quiet_tool_messages_should_start_quiet_spinnerrandomchoicer   get_waiting_faces	_print_fnr   min_MAX_TOOL_WORKERS
concurrentr   ThreadPoolExecutorsubmitr   rI   wait_vprintcancelr'   sumstop_append_guardrail_observationr   r   warning_record_file_mutation_result_get_cute_tool_message_impl_safe_printtool_complete_callbackr   r   r   _subdirectory_hintscheck_tool_callr   %_tool_result_content_for_active_model$_apply_pending_steer_to_tool_resultsr   )Ar7   assistant_messagerd   r%   rf   r   	num_toolsr   r   r    r"   _ts_scope_blockr[   _underlying_underlying_args_errr   r   ru   block_messageguardrail_decision	file_pathwork_dircmdcwdtool_names_strr   r   r   args_strargs_previewpreviewcb_errr   spinnerfacerunnable_callsr   executorr   _conc_start_interrupt_loggeddonenot_done_conc_elapsed_still_running	completed	total_durr   rq   function_resulttool_durationr   	_err_textresult_preview_ver_errcute_msg_preview_strresponse_previewsubdir_hints_tool_contentturn_tool_msgsr   r   r   sA   ` ``                                                          @@@r   execute_tool_calls_concurrentr_     s    #-JJI ! !SS9SSSTTT 	 	BOO4 f1Afff     
 	 L Kk Kk	!*/ H$$()E%%n,,'(E$	 Jy'9'CDDMM# 	 	 	MMM	-.. 	M$ 	000000 222696Q6QR_6`6`3-t 
/ 
/"&?&F&FFF(3(8*.*#!NK !N !N !N6
 ).+/ +/ +/  	 	 	D	 $&*L)++#"3$Yb99?R --
 
 
 
 
%NNNNNN ? ?!!-3&ulB??E2!(D"!=!=!C#E+=rBBHb#*52KR#P#P#VTV! ! !  % % % $% (#z7M*BQVWWW-"/"/'&7!(D"!=!=!C$-"/
 
 
 
 
 &+%;%G%GWd%e%e"): #(#@#@AS#T#TL+/(1&3&3+*;%,Yb%A%A%GR(#4&-.@)T&R&R&xVx
 
 
 
  777E<Q<Y7 - 1 1&" = =I  e#(#8#Q#QR[#\#\-??JcTaJcJcddd    D 
**u/D/L*'++Ir::C.s33 +//	::dbiXZXaXcXc>d>d-??!?S"X!?!?   !   D 	Y}lThijjjj YYIILIIIIIN 	XN9NNnNNOOOGPQ]_`GaGa 	X 	XCACD$.Bz$U;;;H$ XEQEE$EEdiikk1B1BEEEFFFe))(DJtA\a4b4b4bccddddLOPXMM\a\rLrLrx(?)?(?@5HH  yAVQVV$VVdiikk1B1BVVVVWWWW>J I I:D$&:#' 	II-dD99,,^T7DQQQQ I I IGvGGHHHHHHHHI		I ?K F F:D$&:#$ 	FF))"%t<<<< F F FDFDDEEEEEEEEF	F fy GCL\CZCZ E E??BdL*>#lCtDGAJ )E	WyWW~WWXXXO O O O O O O Od G--// E4U4U4W4W }]<>>??4 T Ti T T Tcity  uD  E  E  EFc
 
KTUaKbKb
 
 

  9	c.113DEEK#66;6OO 7S[)7 & &%Ar4 !3I>>2tT A NN1%%%% #ikk$)!&%/%7%<%< &= & &ND( $  1 0 04-!MM#(#3 !N !N#&x==!N !N !N&* *   
 "* ' 'AHHJJJJ #*//#/FFF$'	k(A$B$BM$q((]R-?!-C-C* * * * *%-* * *
 --[ [ ["8}}[ [:>))NSUTUSUDV:W:W[ [ [  G&#7 7 7 7 7 7 7 7 7 7 7 7 7 7 7r  	c@@w@@@@@ICC'CCCCCILLa	aaIaa9aaaabbb	  	c@@w@@@@@ICC'CCCCCILLa	aaIaa9aaaabbbb		c DM\CZCZ }@ }@??BdL*>AJ9) "l4"l"l"l-"&"&*&7!(T2!6!6!<"&3"N
 
 
 
 
 #c4"b"b"b-"&"&*&7!(T2!6!6!<""6"1
 
 
 
  MM^_[M=/=(T[ "'"E"E!!##	 #F # #  s4_EE	47	NNS4H4H4C4iC]Tacqrrr
  XX66%}ox    ! X X XM"LhWWWWWWWWX  Mu; MM00(-t!.. 1    
 ! M M MM"K6"K"KLLLLLLLLM $ `WmWW=WWWWXXX^c/.B.B^^_^^___ 1133 
	b24}UdeeeHo8oo....! 	b3ODDL$ bKAaCKK}KKKKLLLe))*lCCDDDDTWXdTeTehmh~T~T~<0G1G0G#H5#P#P  EQ `AaC``}```N^``aaa"NNNNNNNOOO 	I57 	II,,RUD$PPPP I I IGvGGHHHHHHHHI ,O<<R3#011	
 
 
 

 CR 	 0@@tLL 	0)/:: 0 2/<PPPP</ CCD/ZZ0}beLLMMM
 	228Q???? L!!I1}}!9*++.N?P0Q0QRRRR 1}}228YGGGGG }s	  5CC('C(A E&&
E32E3*AH		HH&AL77
MMBO!!
O.-O.0(V
W#V??WW::
X%X  X%A e "Fc0$e 0c44e 7c48e Af'/k
k1k,,k1>l
m%mm$s
s-s((s-c                2   t          |j        d          D ]\  }}| j        r||j        |dz
  d         }|r/|                     | j         dt          |           dd           |D ]3}|j        j        }	d|	d|	 d	|j        d
}
|	                    |
           4 nu|j        j        }	 t          j        |j        j                  }n;# t          j        $ r)}t                              d|            i }Y d}~nd}~ww xY wt!          |t"                    si }d}	 ddlm} ||j        k    r9|                    |          \  }}}|s|r|t-          |           v r|}|}nd| d}n# t.          $ r Y nw xY wd}d}||}d}np	 ddlm}  ||||pdt5          | dd          pdt5          |dd          pdt5          | dd          pdt5          | dd          pd          }n# t.          $ r Y nw xY wd}|$| j                            ||          }|j        s|}|dup|du}|rn|dk    rd| _        n|dk    rd| _        | j         st          j!        |d          }| j"        rqtG          d| d| dtI          |%                                           d            tG          | &                    d!t          j!        |d"d#                               nft          |          | j'        k    r|d| j'                 d$z   n|}tG          d| d| dtI          |%                                           d%|            |s|| _(        | )                    d&|            |s(	 dd'l*m+}  || j)                   n# t.          $ r Y nw xY w|s_| j,        rX	 t[          ||          }| ,                    d(|||           n.# t.          $ r!}t]          j/        d)|            Y d}~nd}~ww xY w|sS| j0        rL	 | 0                    |j        ||           n.# t.          $ r!}t]          j/        d*|            Y d}~nd}~ww xY w|sr|d+v rn| j1        j2        rb	 |3                    d,d          }|r8| j1        4                    |          }| j1        5                    |d-|            n# t.          $ r Y nw xY w|s|d.k    r| j1        j2        r	 |3                    d/d          } tm          |           ra|3                    d0          p%to          j8        d1to          j9                              }!| j1        5                    |!d2| dd3                     n# t.          $ r Y nw xY wtu          j:                    }"|Et          j!        d4|id          }#d5}$tw          | |||#|t5          |dd          pdd6||7	  	         n:|S| <                    |          }#d5}$tw          | |||#|t5          |dd          pdd6d8t5          |d9d          pd:7	  	         n|d;k    rdd<l=m>}%  |%|3                    d=          |3                    d>d          | j?        ?          }#tu          j:                    |"z
  }$| @                                r)|                     d@t          d;||$|#A                      nJ|dBk    r8| B                                }&|&s&ddClCmD}' t          j!        d |'            dD          }#nddElEmF}(  |(|3                    dFd          |3                    dG          |3                    dHdI          |3                    d          |3                    dJ          |3                    dKdL          |3                    dM          |&| jG        N	  	        }#tu          j:                    |"z
  }$| @                                r)|                     d@t          dB||$|#A                      n|dk    rY|3                    dOd          })ddPlHmI}*  |*|3                    dQ          |)|3                    dR          |3                    dS          | jJ        T          }#| jK        r|3                    dQ          dUv r|	 | jK        L                    |3                    dQd          |)|3                    dRd          | M                    |t5          |dd          V          W           n# t.          $ r Y nw xY wtu          j:                    |"z
  }$| @                                r)|                     d@t          d||$|#A                      
n|dXk    rddYlNmO}+  |+|3                    dZd          |3                    d[          | jP        \          }#tu          j:                    |"z
  }$| @                                r)|                     d@t          dX||$|#A                      
n|d]k    r|3                    d^          },|,r)t!          |,tH                    rd_t          |,           d`}-n)|3                    da          pdddb         }.|.rdc|. ddnde}-d}/| @                                ri| Q                                rUt          jS        t          jU                              }0t          |0 df|- dg| jV        h          }/|/W                                 |/| _X        d}1	 | Y                    |          }#|#}1d| _X        tu          j:                    |"z
  }$t          d]||$|1A          }2|/r|/Z                    |2           n| @                                r|                     d@|2            n# d| _X        tu          j:                    |"z
  }$t          d]||$|1A          }2|/r|/Z                    |2           w | @                                r|                     d@|2            w w xY w| j[        r|| j[        v rd}/| @                                ryt          jS        t          jU                              }0t          |          }3t[          ||          p|}t          |0 df|3 df| dg| jV        h          }/|/W                                 d}4	 | j]        ^                    |||i          }#|#}4nQ# t.          $ rD}5t          j!        d4dj| dk|5 i          }#t          _                    dl||5dm           Y d}5~5nd}5~5ww xY wtu          j:                    |"z
  }$t          |||$|4A          }2|/r|/Z                    |2           n| @                                r|                     d@|2            n# tu          j:                    |"z
  }$t          |||$|4A          }2|/r|/Z                    |2           w | @                                r|                     d@|2            w w xY w| jK        r| jK        `                    |          rd}/| @                                r| Q                                ryt          jS        t          jU                              }0t          |          }3t[          ||          p|}t          |0 df|3 df| dg| jV        h          }/|/W                                 d}6	 | jK        ^                    ||          }#|#}6nQ# t.          $ rD}5t          j!        d4dn| dk|5 i          }#t          _                    do||5dm           Y d}5~5nd}5~5ww xY wtu          j:                    |"z
  }$t          |||$|6A          }2|/r|/Z                    |2           n| @                                r|                     d@|2            no# tu          j:                    |"z
  }$t          |||$|6A          }2|/r|/Z                    |2           w | @                                r|                     d@|2            w w xY w| j         rd}/| @                                r| Q                                ryt          jS        t          jU                              }0t          |          }3t[          ||          p|}t          |0 df|3 df| dg| jV        h          }/|/W                                 d}7	 t                      b                    ||||j        | jG        pdt5          | dd          pdt5          | dd          pd| jc        rtI          | jc                  nddt5          | dpd          t5          | dqd          r          }#|#}7n# t          $ rQ t          | |||t5          |dd          pd|"s          }#|#}7	 | f                    dt           n# t.          $ r Y nw xY w t.          $ r0}5du| dv|5 }#t          _                    dw||5dm           Y d}5~5nd}5~5ww xY wtu          j:                    |"z
  }$t          |||$|7A          }2|/r|/Z                    |2           n| @                                r|                     d@|2            n# tu          j:                    |"z
  }$t          |||$|7A          }2|/r|/Z                    |2           w | @                                r|                     d@|2            w w xY w	 t                      b                    ||||j        | jG        pdt5          | dd          pdt5          | dd          pd| jc        rtI          | jc                  nddt5          | dpd          t5          | dqd          r          }#n# t          $ rO t          | |||t5          |dd          pd|"s           	 | f                    dt           n# t.          $ r Y nw xY w t.          $ r0}5du| dv|5 }#t          _                    dw||5dm           Y d}5~5nd}5~5ww xY wtu          j:                    |"z
  }$t!          |#t                    r8| j"        r|#nt          |#          dxk    r
|#ddx         n|#}8t          |#          }9n|#}8t          t          |#                    }9t          ||#          \  }:};ddylimj}< | o |<| |          }=|=r7tw          | |||#|t5          |dd          pdt          |$dzz            {           |sA| l                    |||#|:|          }#| j"        r|#nt          |#          dxk    r
|#ddx         n|#}8|:rt                              d}||$|8           nt          m                    d~||$|9           |sF	 | n                    |||#|:           n,# t.          $ r}>t]          j/        d|>           Y d}>~>nd}>~>ww xY w|sS| j,        rL	 | ,                    d|dd|$|:|#           n.# t.          $ r!}t]          j/        d)|            Y d}~nd}~ww xY wd| _(        | )                    d| d|$dd           | j"        rRt]          j/        d| d|$dd           t          |#          }?t]          j/        dt          |?           d|?            |sT| jp        rM	 | p                    |j        |||#           n.# t.          $ r!}t]          j/        d|            Y d}~nd}~ww xY wt          |#          s%t          |#||j        t          |                    n|#}#| jt        u                    ||          }@|@r%t          |#          rt          |#|@           n|#|@z  }#| w                    ||#          }A|	                    t          ||A|j                             | y                    |d           | j         s| j"        r;tG          d| d|$dd           tG          | &                    d|#                     nkt!          |#t                    r|#nt          |#          }Bt          |B          | j'        k    r|Bd| j'                 d$z   n|B}CtG          d| d|$dd|C            | j        r|t          |j                  k     rt          |j                  |z
  }D|                     | j         d|D dd           |j        |d         D ];}|j        j        }	|	                    t          |	d|	 d|j                             < n>| jz        dk    r1|t          |j                  k     rtu          j{        | jz                   t          |j                  }E|Edk    r't          ||E d         t          |                     |Edk    r| y                    ||E           dS dS )z`Execute tool calls sequentially (original behavior). Used for single calls or interactive tools.rT   Nrh   ri   Tr   toolrj   rk   )roler   r   r&   z(Unexpected JSON error after validation: r   rM   rn   ro   rw   rr   rt   r-   r.   rp   r/   r0   rv   rl   rm   Fr?   r   r   r   r   r   r   r   r   r   zexecuting tool: r   r   r   r   >   r{   r|   r}   r~   r   r   r   r   r   r   r>   r   rq   rs   rx   ry   rz   todo)	todo_tooltodosmerge)re  rf  storer   r   session_search)format_session_db_unavailable)successr>   )rh  queryrole_filterlimitr   around_message_idwindow   sort)	rk  rl  rm  r.   rn  ro  rq  dbcurrent_session_idtarget)memory_toolactionr   old_text)rv  rt  r   rw  rg  >   r   replace)r1   r&   )metadataclarify)clarify_toolquestionchoices)r|  r}  callbackdelegate_tasktasksu   🔀 delegating u    tasks · (/agents to monitor)goalr   u   🔀 u    · (/agents to monitor)u'   🔀 delegating · (/agents to monitor) r   r   )rd   zContext engine tool 'z
' failed: z1context_engine.handle_tool_call raised for %s: %sr   zMemory tool 'z1memory_manager.handle_tool_call raised for %s: %srP   rQ   )r&   r.   r2   r3   enabled_toolsskip_pre_tool_call_hookrP   rQ   r   r   r   r   z&handle_function_call raised for %s: %sr   )!agent_runtime_owns_post_tool_hookrH   )r    r"   r$   r%   r&   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z remaining tool call(s)u   [Tool execution skipped — z* was not started. User sent a new message]r   )}r  r   r   r)  r   r   r   r   rp   r   rA   r   r   r  r   r.  r  r#   rW   rN   r  r  rc   r6   r  ru   r5   r  r  r  r   r   rU   rB   r  r   re   r  r  r  r  r   r   r   r  r  r  r  r  r
  r]   r  r  r  r   r  r  r  rI   r8   r	  tools.todo_toolrd  _todo_storer  r0  _get_session_db_for_recallhermes_stateri  tools.session_search_toolrh  r.   tools.memory_toolru  _memory_store_memory_manageron_memory_write_build_memory_write_metadatatools.clarify_toolr{  clarify_callbackr  r  r   r   r!  r"  r   _delegate_spinner_dispatch_delegate_taskr,  _context_engine_tool_names_get_tool_emojicontext_compressorhandle_tool_callr>   has_toolr   handle_function_callvalid_tool_namesr   rJ   r   r!   r
   agent.agent_runtime_helpersr  r'   r-  r   r/  r   r2  r   r   r   r3  r4  r   r5  r   r6  
tool_delaysleepr   )Fr7   r7  rd   r%   rf   r   r   remaining_calls
skipped_tcskipped_nameskip_msgr    r"   er9  r[   r:  r;  r<  
_block_msg_block_error_typeru   _guardrail_block_decisionr>  _execution_blockedrD  rE  r   rF  rG  r?  r@  rA  rB  tool_start_timerT  rU  
_todo_tool
session_dbri  _session_searchrt  _memory_tool_clarify_tool	tasks_argspinner_labelgoal_previewrH  rI  _delegate_resultrY  emoji
_ce_resultr   _mem_result_spinner_resultrW  _result_len_is_error_resultr   r  _executor_must_emit_post_hookrX  _log_resultr\  r]  _fr_strr[  	remainingnum_tools_seqsF                                                                         r   execute_tool_calls_sequentialr    s_    !"3">BB Y) Y)9 % 	/:1Q344@O |!1nn3K_K_nnnvz{{{- * *
)27"(qqqq$.M	  ))))E!*/	 Jy'9'CDDMM# 	 	 	NNIaIIJJJMMMMMM	 -.. 	M
 *.	000000 222696Q6QR_6`6`3-t  "&?&F&FFF(3(8J J J J (  	 	 	D	 %)
*&(J 2NNNNNN<<!!-3&ulB??E2!(D"!=!=!C#E+=rBBHb#*52KR#P#P#VTV  

     CG!!&!7!C!CMS`!a!a%6 ?,>)'t3\7PX\7\ 	) h&&()E%%n,,'(E$ 	jz-eDDDH$ jWQWW-WW$}?Q?Q?S?S:T:TWWWXXXe))(DJ}UVej4k4k4kllmmmmLOPXMM\a\rLrLrx(?)?(?@5HH  yAhQhh-hh$}?Q?Q?S?S:T:ThhZfhhiii! 	F"/E!!"D]"D"DEEE
 " 	IIIIII%%e&;<<<<    " 	Ie&B 	II-m]KK,,^]GUbcccc I I IGvGGHHHHHHHHI " 	Fe&? 	FF))),}UUUU F F FDFDDEEEEEEEEF " 		m7N&N&NSXShSp&N)--fb99	 $4MMiXXH);; ";M";";       " 		mz&A&AeF[Fc&A#''	266*3// '++I66`")NTVT]T_T_:`:`C);;;SbS;;       )++!"j':)>USSSOM)++&"3$Yb99?R ,(
 
 
 
 
 '2 $;;<UVVOM)++&"3$Yb99?R ,%&?DQQwUw
 
 
 
 
 f$$??????(j#''00#''77'  O
 !IKK/9M5577 @~#>v}Vcl{#|#|#|~~...99;;J FFFFFF"&*IfIfIhIh-i-i"j"jWWWWWW"1/'++GR88 - 1 1- @ @'++GQ77,00>>&3&7&78K&L&L(,,Xq99&**622!','7
# 
# 
# !IKK/9M5577 J  I#>?OQ^`m  wF  $G  $G  $G  I  I  J  J  Jh&&"&&x::FEEEEEE*l$((22%)))44&**:66)  O $ ):):8)D)DHZ)Z)Z)99%))(B77%)))R88!&!C!C$5)0D$)G)G "D " "	 :     !   D IKK/9M5577 B  A#>xXen}#~#~#~  A  A  B  B  Bi''HHHHHH+m&**:r::%)))44/  O
 !IKK/9M5577 C  B#>y-Yfo~###  B  B  C  C  Co--%))'22I Z	488  a3y>> a a a - 1 1& 9 9 ?R"E $CBLBBBBB 
 G5577  E<]<]<_<_  }]%D%F%FGG'4(A(A-(A(APVafapqqq&-E##
3"'"?"?"N"N#2 *.' $	o =6Wdm}~~~ 3LL****;;== 3MM/x//222 +/' $	o =6Wdm}~~~ 3LL****;;== 3MM/x//22223- |	:-5Cc2c2cG5577  }]%D%F%FGG'66-m]KK\}'4(C(C%(C(C'(C(CRXchcrsssJ3"'":"K"KM[hs{"K"|"|,

 | | |"&*g7t}7t7thr7t7t-u"v"vPR_akvz{{{{{{{{| !%	o =6}mUbkuvvv 3LL****;;== 3MM/x//222 !%	o =6}mUbkuvvv 3LL****;;== 3MM/x//22223" e	:u'<'E'Em'T'T e	: G5577  E<]<]<_<_  }]%D%F%FGG'66-m]KK\}'4(C(C%(C(C'(C(CRXchcrsssK3"'"7"H"HXe"f"f- | | |"&*g7l}7l7l`j7l7l-m"n"nPR_akvz{{{{{{{{| !%	o =6}mUbkvwww 3LL****;;== 3MM/x//222 !%	o =6}mUbkvwww 3LL****;;== 3MM/x//22223 M	:G5577  E<]<]<_<_  }]%D%F%FGG'66-m]KK\}'4(C(C%(C(C'(C(CRXchcrsss"O%3"%%%"<"<!=2C!*$/52#E+=rBBHb#*52KR#P#P#VTVBGBX"b$u'=">">">^b,0%,U4F%M%M&-e5H$&O&O #= 
# 
# #2$   "I"/"/&7!(D"!=!=!C.# # # #2OO$89999    D q q q"Y="Y"YZ"Y"YE}V`koppppppppq !%	o =6}mUbkz{{{ 3LL****;;== 3MM/x//222 !%	o =6}mUbkz{{{ 3LL****;;== 3MM/x//22223q"%%%"<"<!=2C!*$/52#E+=rBBHb#*52KR#P#P#VTVBGBX"b$u'=">">">^b,0%,U4F%M%M&-e5H$&O&O #= 
# 
# %   7"/"/&7!(D"!=!=!C.   OO$89999    D q q q"Y="Y"YZ"Y"YE}V`koppppppppq !IKK/9Mos++ 	4050E __),_)=)=)C)C%%  o..KK -Nc/2233K 3=/RR! 	RQQQQQ"" H11%GG 	& ) 		)++&"3$Yb99?R 455    " 		#AA'	 B  O 160E __),_)=)=)C)C%%   	jNN?P]_mnnnnKK=}m]hiii " 	TT22!=/CS     T T TH(SSSSSSSST " 	Ie&B 	II,,$mT4*5E* -    
  I I IGvGGHHHHHHHHI #WWW-WWWWXXX  	TMS-SS}SSSSTTT2?CCKMR#k*:*:RR[RRSSS! 	Ie&B 	II,,Y\=-Yhiiii I I IGvGGHHHHHHHHI ,O<<R3##!011	
 
 
 

 CR 	 0@@P]^^ 	0)/:: 01/<PPPP</ CCMSbcc0y|\\]]] 	228Q??? 	`$ `IAII]IIIIJJJe))*oFFGGGG-7-M-Mg//SVWfSgSgORSZ||^c^tOtOt7+BE,B+B#Ce#K#K  {B ^A^^]^^^L\^^___% 
	!c2C2N.O.O*O*O-899A=IMMU-iiyiiiquMvvv/:122>  
)27 8 k<kkkM! !    
 EaA,=,H(I(I$I$IJu'((( )455MqHm^__5>J[;\;\]]]]
 q228]KKKKK sK  ,CDC>>D A
E++
E87E8AG&&
G32G3#M::
NN(N==
O(O##O(5P
P=P88P=AR$$
R10R1	BU
UU9A*c$$
c10c1m++A7o"	r)(u*)
s73:s2-u*2s77u**A0w&{~
|:|~|~A05B&BAD<D;AID<2AGE/AFFAGF
AFFAGFAFFAGF&AG
GAIG
AGGAIIA0AJ2J6BAM
M
0AOM;ANNAON
ANNAONANNAON+&AOOAOUAUU
AVU&AV V AVVAV/V/
AWV9AWWAWY$AZZ
AZ-ZAZ(Z(AZ-r_  r  )r    r!   r"   r#   r$   r   r%   r!   r&   r!   r   r'   r   r(   r   r(   r   r(   r)   r*   )r9   )r:   r!   r)   r!   )r    r!   r"   r#   r%   r!   r&   r!   rE   rF   r:   r!   r   r!   r)   r!   )r)   rK   )r   )rd   re   r%   r!   rf   r'   r)   r*   )2__doc__
__future__r   concurrent.futuresr%  rA   r  r  r  r   rI   typingr   r   agent.displayr   r   r  r   r0  r	   r  r
   agent.tool_guardrailsr   agent.tool_dispatch_helpersr   r   r   r   r   tools.terminal_toolr   tools.thread_contextr   tools.tool_result_storager   r   	getLogger__name__r   r$  r   r8   rC   rJ   rc   r_  r  __all__r   r   r   <module>r     s  
 
 # " " " " "       				                                    8 7 7 7 7 7                   = < < < < <       
 
	8	$	$     ! $     B    $ #*     6. . . .bzH zH zH zH zH|fL fL fL fL fLX $#r   