
    $*j                   Z   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dd6d Z+d7d8d#Z,d!d$dd%d9d(Z-d:d*Z.d;d,Z/d<d.Z0d=d>d2Z1d=d>d3Z2d4d5gZ3dS )?u  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middleware_tracefunction_namestrfunction_argsdictresultr   effective_task_idtool_call_idr   intr   
str | Noner   r   r    Optional[list[dict[str, Any]]]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||||	t          |
pg                      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_idr0   r'   turn_idapi_request_idr   r   r   r   r    )model_toolsr.   getattrlist	Exception)agentr!   r#   r%   r&   r'   r   r   r   r   r    r.   s               r   _emit_terminal_post_tool_callr;   =   s    999999!!''%+ulB77=2%+E#5r::@b"5*CRHHNB#!'!"2"8b99	
 	
 	
 	
 	
 	
    s   A$A( (
A65A6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_resultrF   `   s8    :<F<<!	
 	
    r   keyboard_interrupt)r=   r   r    
start_timefloatc                   t          |          }	t          | |||	||t          t          j                    |z
  dz            d|d| t	          |pg                      |	S )N  r@   r?   )
r!   r#   r%   r&   r'   r   r   r   r   r    )rF   r;   r(   timer8   )
r:   r!   r#   r&   r'   rH   r=   r   r    r%   s
             r   '_emit_cancelled_terminal_post_tool_callrM   j   s~     $F++F!##+!z1T9::=V==.4"55    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)rS   rT   
quiet_modeskip_tool_search_assembly)r6   toolsrQ   tools.registryrR   r9   rN   r7   get_tool_definitionsscoped_deferrable_namesrV   )
r:   r6   _ts	_registryenableddisabled	cache_keycachedscoped_defsnamess
             r   _tool_search_scoped_namesrf      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!tuple[dict, list[dict[str, Any]]]c                  	 ddl m}  ||||pdt          | dd          pd|pdt          | dd          pdt          | dd          pd          }t          |j        t
                    r|j        n|}|t          |j                  fS # t          $ r)}t          
                    d|           |g fcY d }~S d }~ww xY w)	Nr   )apply_tool_request_middlewarer/   r0   r1   r2   )r3   r0   r'   r4   r5   z!tool_request middleware error: %s)hermes_cli.middlewareri   r7   
isinstancepayloadr$   r8   tracer9   loggerdebug)	r:   r!   r#   r&   r'   ri   r%   rl   excs	            r   (_apply_tool_request_middleware_for_agentrq      s   !GGGGGG..%+ulB77=2%+E#5r::@b"5*CRHHNB
 
 
 %/v~t$D$DW&..-V\**** ! ! !8#>>>b       !s   BB
 

B=B82B=8B=tuple[Any, dict]c                  	 	d	fd}ddl m}  ||||pdt          | d	d          pd|pdt          | d
d          pdt          | dd          pd	  	        }|	fS )N	next_argsr$   r+   r   c                L    t          | t                    r| n           S N)rk   r$   )rt   executer#   observed_argss    r   _executez6_run_agent_tool_execution_middleware.<locals>._execute   s+    %/	4%@%@S		mw}%%%r   r   )run_tool_execution_middlewarer/   r0   r1   r2   )original_argsr3   r0   r'   r4   r5   rt   r$   r+   r   )rj   rz   r7   )
r:   r!   r#   r&   r'   rw   ry   rz   r%   rx   s
     `  `   @r   $_run_agent_tool_execution_middlewarer}      s     "M& & & & & & & &
 DCCCCC**#!'R5,339r!'R1266<"u&?DDJ
 
 
F =  r   messagesr8   api_call_countc                   ?@A |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t3           |	|
t5          |dd          pd          \  }
}d}d}|;|}t7           |	|
|t5          |dd          pddd|t9          |          
  
         nS	 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t9          |                    }n# t0          $ r d}Y nw xY w|Pt          j        d
|id          }t7           |	|
|t5          |dd          pddd|t9          |          
  
         n j                             |	|
          }|j!        s_ "                    |          }d}t7           |	|
|t5          |dd          pdddt5          |dd          pdt9          |          
  
         ||	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          }tQ          |          ra|
%                    d$          p%tS          j*        d%tS          j+                              } j#        '                    |d&|dd'                     n# t0          $ r Y nw xY w@                    ||	|
|||f           d(,                    d) @D                       } j-        s>t5           d*d+          d,k    r(t          d-| d.|            t]          @d/          D ]\  }\  }}}}}}t          j        |d          } j/        rqt          d0| d1| d2t9          |0                                           d3           t           1                    d4t          j        |d5d6                               t          |           j2        k    r|d j2                 d7z   n|}t          d0| d1| d2t9          |0                                           d8|            @D ]k\  }}}}}}| j3        rX	 ti          ||          }  3                    d9|| |           =# t0          $ r!}!tk          j6        d:|!            Y d}!~!cd}!~!ww xY wl@D ]_\  }}}}}}| j7        rL	  7                    |j	        ||           1# t0          $ r!}!tk          j6        d;|!            Y d}!~!Wd}!~!ww xY w`dg|z  At]          @          D ]\  }\  }}}}}}||||d<dd|fA|<   | _8         9                    d=| d>|             Afd?}"d}# :                                rj ;                                rVty          j=        t}          j?                              }$t}          |$ d@| dAdB j@        C          }#|#A                                 	 dD t]          @          D             }%g ?|%rt          t          |%          t                    }&t          jE        F                    |&E          5 }'|%D ]O\  }}}}|'G                    t          |"          ||||@|         dF                   }(?                    |(           Pt          jI                    })d}*	 t          jE        J                    ?dGH          \  }+},|,sn j        rn|*s1d}* K                     j         dIt          |,           dJdK           |,D ]}(|(L                                 t          jE        J                    |,dLH           nt          t          jI                    |)z
            }-|-dk    r_|-dMz  dNk     rV?@fdO|,D             }. 9                    dP|- dQt          |,           dRd(,                    |.ddF                    d3           &ddd           n# 1 swxY w Y   |#rRt          dS AD                       }/t          dT AD                       }0|#O                    dU|/ dV| dW|0dXdY           nZ# |#rSt          dS AD                       }/t          dT AD                       }0|#O                    dU|/ dV| dW|0dXdY           w w xY wt]          @          D ]7\  }\  }}}}}}A|         }1d}2|1 j        r>d| d}3t7           |||3t5          |dd          pddZd[d\t9          |          
  
         n=d]| d^}3t7           |||3t5          |dd          pdd
d_|3t9          |          
  
         d<}4nY|1\  }	}
}3}4}5}2}|2s P                    |	|
|3|5`          }3|5rKt          |3          }6t          |6          dak    r
|6dda         n|6}7t          S                    db|	|4|7           |2sF	  T                    |	|
|3|5           n,# t0          $ r}8tk          j6        dc|8           Y d}8~8nd}8~8ww xY w|2sS j3        rL	  3                    dd|	dd|4|5|3e           n.# t0          $ r!}!tk          j6        d:|!            Y d}!~!nd}!~!ww xY w j/        rCtk          j6        df|	 dg|4dhdi           tk          j6        djt          |3           dk|3             :                                r,t          |||4|3l          }9 V                    dm|9            n j-        st5           d*d+          d,k    rt          |3          }: j/        r>t          dn|d/z    dg|4dhdi           t           1                    do|:                     nHt          |:           j2        k    r|:d j2                 d7z   n|:};t          dn|d/z    dg|4dhdp|;            d _8         9                    dq| dr|4dXds           |2sT jW        rM	  W                    |j	        |||3           n.# t0          $ r!}!tk          j6        dt|!            Y d}!~!nd}!~!ww xY wt          |3          s%t          |3||j	        t                    u          n|3}3 j[        \                    ||          }<|<r%t          |3          rt          |3|<           n|3|<z  }3 ^                    ||3          }=                    t          ||=|j	                              _                    d/           9t          @          }|dk    r)| d         }>t          |>t                    v           |dk    r _                    |           dS dS )wzExecute 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_managerP   rA   'O' is not available in this session. Use tool_search to find tools you can call.FrB   idr/   r!   r#   r&   r'   blockedtool_scope_block	r!   r#   r%   r&   r'   r   r   r   r    get_pre_tool_call_block_messager0   r1   r2   r3   r0   r'   r4   r5   r    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 rv    ).0_names      r   	<genexpr>z0execute_tool_calls_concurrent.<locals>.<genexpr>  s/      LL(;4Aq!tLLLLLLr   tool_progress_modealloffu     ⚡ Concurrent: u    tool calls — rW        📞 Tool : ()Args:    indentrC   ...) - tool.startedTool progress callback error: Tool start callback error:         z
executing z tools concurrently: c                f   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dt!          |                    }nP# t"          $ r
 	                     d           n# t          $ r Y nw xY wt'          ||t)          |dd          pd|t!          |          	          }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
  }	t3          ||          \  }}|r&t*                              d||	|dd                    n*t*                              d||	t5          |                     ||||	|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)r~   pre_tool_block_checkedskip_tool_request_middlewaretool_request_middleware_tracekeyboard interruptr   r/   r!   r#   r&   r'   rH   r    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_interruptr9   tools.environments.baser   _touch_activityrL   _invoke_toolr   r8   KeyboardInterrupt	interruptrM   r7   rn   infodiscardrA   r
   len)index	tool_callr!   r#   r    _worker_tidr   startr%   duration
tool_erroris_errorr   r:   r&   r~   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	
 	4	i++!!%L%+/15267G2H2H , 	 	 %   OO$89999    D@"/"/&7!(D"!=!=!C$%)*:%;%;    9;;.7QQQ"/RVX]_o!p$ 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]_opGEN 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< :M <I	DI	
D+(I	*D++A5I	 M (GGG"G? ?
HH	I	&I?M I		B
M LLL"L1 1
L?>L?N0
M1%N01M55N08M59N0="N N0 
N-*N0,N--N0u    ⚡ running z tools concurrentlydotsspinner_typeprint_fnc                2    g | ]\  }\  }}}}}}|||||fS rv   r   )r   itcr   argsr    block_resultblocked_by_guardrails           r   
<listcomp>z1execute_tool_calls_concurrent.<locals>.<listcomp>*  sD     
 
 
YYBd$4lDX# D$###r   )max_workers   g      @)timeoutu   ⚡ Interrupt: cancelling z pending concurrent tool(s)forceg      @      c                Z    g | ]'}|v                      |                   d          (S )rW   )r   )r   ffuturesparsed_callss     r   r   z1execute_tool_calls_concurrent.<locals>.<listcomp>a  s@     * * * ! G|| )q)9)9:1=+||r   zconcurrent tools running (zs, z remaining: c              3     K   | ]}|dV  	d S )NrW   r   r   rs     r   r   z0execute_tool_calls_concurrent.<locals>.<genexpr>m  s"      @@!!-A----@@r   c              3  *   K   | ]}||d         V  d S )Nr   r   r   s     r   r   z0execute_tool_calls_concurrent.<locals>.<genexpr>n  s&      CCQQ]AaD]]]]CCr   u   ⚡ /z tools completed in .1fzs totalr@   rG   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  )a
tool_callsr   r   print
log_prefixappendr   functionr   r   _turns_since_memory_iters_since_skillrD   loads	argumentsJSONDecodeErrorrk   r$   rZ   rQ   TOOL_CALL_NAMEresolve_underlying_callrf   rE   r9   rq   r7   r;   r8   hermes_cli.pluginsr   _tool_guardrailsbefore_callallows_execution_guardrail_block_result_checkpoint_mgrr`   getget_working_dir_for_pathensure_checkpointr   osgetenvgetcwdjoinrX   	enumerateverbose_loggingkeys_wrap_verboselog_prefix_charstool_progress_callback_build_tool_previewloggingro   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   rL   wait_vprintcancelr(   sumstop_append_guardrail_observationr   rn   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   )Br:   assistant_messager~   r&   r   r  	num_toolsr   r   r!   r#   _ts_scope_blockr^   _underlying_underlying_args_errr    r   r   r   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   r   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   sB   ` ``                                                           @@@r   execute_tool_calls_concurrentrz     s    #-JJI ! !SS9SSSTTT 	 	BOO4 f1Afff     
 	 L W} W}	!*/ 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	 +S''/ D"55;+
 +
 +
'' $&*L)++#"3$Yb99?R --!%&6!7!7    %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}FVXdfz{|||| YYLL|LLLLLN 	X/CU K Ku T TN9NNnNNOOOYbcoqrYsYs 	X 	XUAUD$ 0,@T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WP\ I ILD$(,8L#' 	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 Q] F FLD$(,8L#$ 	FF))"%t<<<< F F FDFDDEEEEEEEEF	F fy GU^_kUlUl W WQQBd,l<P#lCtEUVGAJ )E	WyWW~WWXXXR R R R R R R Rj G--// E4U4U4W4W }]<>>??4 T Ti T T Tcity  uD  E  E  EFc
 
]fgs]t]t
 
 

  9	c.113DEEK#66;6OO 7S[)7 & &%Ar4 !3I>>2tTS_`aSbcdSe 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 V__kUlUl @ @QQBd,l<PAJ9) "l4"l"l"l-"&"&*&7!(T2!6!6!<"&3"N%)*:%;%;     #c4"b"b"b-"&"&*&7!(T2!6!6!<""6"1%)*:%;%;     MMpqmM=/=(T[]m "'"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ge5I5&Q&QUZ&Z&Z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,IIIAN
N$#N$:BQ
QQ)(X
X=X88X=Y44
Z>ZZ>A g Fe9-g 9e==g  e=g Ah0m//
n9nn%o
o-o((o- u>>
v)v$$v)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 n\@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t1           ?|
t3          @dd          pd          \  }
}d}d}||}d}n~	 ddlm}  |?|
pdt3           dd          pdt3          @dd          pdt3           dd          pdt3           dd          pdt9          |                    }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"        s	t3           dd          dk    rt          j#        |
d           } j$        rqtK          d!| d"? d#t9          |
&                                           d$           tK           '                    d%t          j#        |
d&d'                               nft          |           j(        k    r|d j(                 d(z   n|}tK          d!| d"? d#t9          |
&                                           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_          j0        d-|            Y d}~nd}~ww xY w|sS j1        rL	  1                    @j        ?|
           n.# t.          $ r!}t_          j0        d.|            Y d}~nd}~ww xY w|sr?d/v rn j2        j3        rb	 |
4                    d0d          }|r8 j2        5                    |          } j2        6                    |d1?            n# t.          $ r Y nw xY w|s?d2k    r j2        j3        r	 |
4                    d3d          }to          |          ra|
4                    d4          p%tq          j9        d5tq          j:                              }  j2        6                    | d6|dd7                     n# t.          $ r Y nw xY wtw          j;                    }!|St          j#        d8|id           }"d9}#ty           ?|
|"t3          @dd          pdd:||t9          |          ;
  
         n|a =                    |          }"d9}#ty           ?|
|"t3          @dd          pdd:d<t3          |d=d          pd>t9          |          ;
  
         nA?d?k    rd fdD}$t}           ?|
t3          @dd          pd|$E          \  }"}
tw          j;                    |!z
  }# ?                                r)                     dFt          d?|
|#|"G                      n?dHk    rd fdI}$t}           ?|
t3          @dd          pd|$E          \  }"}
tw          j;                    |!z
  }# ?                                r)                     dFt          dH|
|#|"G                      n-?dk    rd @fdJ}$t}           ?|
t3          @dd          pd|$E          \  }"}
tw          j;                    |!z
  }# ?                                r)                     dFt          d|
|#|"G                      n?dKk    rd fdL}$t}           ?|
t3          @dd          pd|$E          \  }"}
tw          j;                    |!z
  }# ?                                r)                     dFt          dK|
|#|"G                      n?dMk    rd fdN}$t}           ?|
t3          @dd          pd|$E          \  }"}
tw          j;                    |!z
  }# ?                                r)                     dFt          dM|
|#|"G                      
n?dOk    r|
4                    dP          }%|%r)t!          |%t8                    rdQt          |%           dR}&n)|
4                    dS          pdddT         }'|'rdU|' dVndW}&d}( ?                                ri A                                rUt          jC        t          jE                              })t          |) dX|& dY jF        Z          }(|(G                                 |( _H        d}*	 d fd[}$t}           ?|
t3          @dd          pd|$E          \  }"}
|"}*d _H        tw          j;                    |!z
  }#t          dO|
|#|*G          }+|(r|(I                    |+           	n ?                                r                     dF|+            n# d _H        tw          j;                    |!z
  }#t          dO|
|#|*G          }+|(r|(I                    |+           w  ?                                r                     dF|+            w w xY w jJ        r? jJ        v rd}( ?                                ryt          jC        t          jE                              })t          ?          },t]          ?|
          p?}t          |) dX|, dX| dY jF        Z          }(|(G                                 d}-	 d ?fd\}$t}           ?|
t3          @dd          pd|$E          \  }"}
|"}-nQ# t.          $ rD}.t          j#        d8d]? d^|. i          }"t          L                    d_?|.d`           Y d}.~.nd}.~.ww xY wtw          j;                    |!z
  }#t          ?|
|#|-G          }+|(r|(I                    |+           n ?                                r                     dF|+            n# tw          j;                    |!z
  }#t          ?|
|#|-G          }+|(r|(I                    |+           w  ?                                r                     dF|+            w w xY w jM        r( jM        N                    ?          rd}( ?                                r A                                ryt          jC        t          jE                              })t          ?          },t]          ?|
          p?}t          |) dX|, dX| dY jF        Z          }(|(G                                 d}/	 d ?fda}$t}           ?|
t3          @dd          pd|$E          \  }"}
|"}/nQ# t.          $ rD}.t          j#        d8db? d^|. i          }"t          L                    dc?|.d`           Y d}.~.nd}.~.ww xY wtw          j;                    |!z
  }#t          ?|
|#|/G          }+|(r|(I                    |+           n׉ ?                                r                     dF|+            n# tw          j;                    |!z
  }#t          ?|
|#|/G          }+|(r|(I                    |+           w  ?                                r                     dF|+            w w xY w j"        rd}( ?                                r A                                ryt          jC        t          jE                              })t          ?          },t]          ?|
          p?}t          |) dX|, dX| dY jF        Z          }(|(G                                 d}0	 t                      P                    ?|
@j         jQ        pdt3           dd          pdt3           dd          pd jR        rt9           jR                  ndddt3           ddd          t3           ded          t9          |          f          }"|"}0n# t          $ r_ t           ?|
t3          @dd          pd|!t9          |          g          }"|"}0	  U                    dh           n# t.          $ r Y nw xY w t.          $ r0}.di? dj|. }"t          L                    dk?|.d`           Y d}.~.nd}.~.ww xY wtw          j;                    |!z
  }#t          ?|
|#|0G          }+|(r|(I                    |+           n ?                                r                     dF|+            n# tw          j;                    |!z
  }#t          ?|
|#|0G          }+|(r|(I                    |+           w  ?                                r                     dF|+            w w xY w	 t                      P                    ?|
@j         jQ        pdt3           dd          pdt3           dd          pd jR        rt9           jR                  ndddt3           ddd          t3           ded          t9          |          f          }"n# t          $ r] t           ?|
t3          @dd          pd|!t9          |          g           	  U                    dh           n# t.          $ r Y nw xY w t.          $ r0}.di? dj|. }"t          L                    dk?|.d`           Y d}.~.nd}.~.ww xY wtw          j;                    |!z
  }#t!          |"t                    r8 j$        r|"nt          |"          dlk    r
|"ddl         n|"}1t          |"          }2n|"}1t          t          |"                    }2t          ?|"          \  }3}4ddmlXmY}5 | o |5 ?          }6|6rEty           ?|
|"t3          @dd          pdt          |#dnz            t9          |          o           |sA [                    ?|
|"|3p          }" j$        r|"nt          |"          dlk    r
|"ddl         n|"}1|3rt                              dq?|#|1           nt          \                    dr?|#|2           |sF	  ]                    ?|
|"|3           n,# t.          $ r}7t_          j0        ds|7           Y d}7~7nd}7~7ww xY w|sS j-        rL	  -                    dt?dd|#|3|"u           n.# t.          $ r!}t_          j0        d-|            Y d}~nd}~ww xY wd _)         *                    dv? dw|#dxdy            j$        rRt_          j0        dz? d{|#d|d}           t          |"          }8t_          j0        d~t          |8           d|8            |sT j_        rM	  _                    @j        ?|
|"           n.# t.          $ r!}t_          j0        d|            Y d}~nd}~ww xY wt          |"          s%t          |"?@j        t                              n|"}" jc        d                    ?|
          }9|9r%t          |"          rt          |"|9           n|"|9z  }" f                    ?|"          }:	                    t          ?|:@j                              h                    d            j"        st3           dd          dk    r j$        r;tK          d| d{|#d|d}           tK           '                    d|"                     nkt!          |"t                    r|"nt          |"          };t          |;           j(        k    r|;d j(                 d(z   n|;}<tK          d| d{|#d|d|<             j        r|t          |j                  k     rt          |j                  |z
  }=                      j         d|= dd           |j        |d         D ];}|j        j        }	                    t          |d| d|j                             < n> ji        dk    r1|t          |j                  k     rtw          jj         ji                   t          |j                  }>|>dk    r't          |> d         t                               |>dk    r h                    |>           dS dS )z`Execute tool calls sequentially (original behavior). Used for single calls or interactive tools.rW   Nr   r   Tr   toolr   r   )roler   r  r'   z(Unexpected JSON error after validation: r   rP   r   r   r   r/   r   r   r   r   r0   r1   r2   r   r   r   r   r   r   FrB   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   rA   r   r   r   r   r   r   todort   r$   r+   r   c                    ddl m}  ||                     d          |                     dd          j                  S )Nr   )	todo_tooltodosmergeF)r  r  store)tools.todo_toolr  r'  _todo_store)rt   
_todo_toolr:   s     r   ry   z/execute_tool_calls_sequential.<locals>._execute  sT    CCCCCC!z#--00#--77+   r   )r!   r#   r&   r'   rw   r  r  session_searchc                                                    }|s%ddlm} t          j        d |            d          S ddlm}  ||                     dd          |                     d          |                     d	d
          |                     d          |                     d          |                     dd          |                     d          |j        	  	        S )Nr   )format_session_db_unavailableF)successrA   )r  queryr/   role_filterlimitr   r0   around_message_idwindow   sort)	r  r  r  r0   r  r  r  dbcurrent_session_id)	_get_session_db_for_recallhermes_stater  rD   rE   tools.session_search_toolr  r'  r0   )rt   
session_dbr  _session_searchr:   s       r   ry   z/execute_tool_calls_sequential.<locals>._execute  s    "==??
! dJJJJJJ:%B_B_BaBa&b&bcccWWWWWW&#--44 )m < <#--33(}}\::&/mm4G&H&H$==155"v..!','7
 
 
 
r   c                   |                      dd          }ddlm}  ||                      d          ||                      d          |                      d          j                  }j        r|                      d          d	v r|	 j                            |                      dd
          ||                      dd
                              t          dd                                n# t          $ r Y nw xY w|S )Ntargetr   r   )memory_toolactionr  old_text)r  r  r  r  r  >   r   replacer/   r   )r3   r'   )metadata)	r'  tools.memory_toolr  _memory_store_memory_manageron_memory_write_build_memory_write_metadatar7   r9   )rt   r  _memory_toolr%   r:   r&   r   s       r   ry   z/execute_tool_calls_sequential.<locals>._execute  s9   "x::IIIIII%$==22!%MM)44&]]:66-   ( Y]]8-D-DHZ-Z-Z-==%MM(B77"%MM)R88%*%G%G(9-4Yd-K-K &H & &	 >     %   s   A*C6 6
DDclarifyc                    ddl m}  ||                     dd          |                     d          j                  S )Nr   )clarify_toolquestionr/   choices)r  r  callback)tools.clarify_toolr  r'  clarify_callback)rt   _clarify_toolr:   s     r   ry   z/execute_tool_calls_sequential.<locals>._execute  sT    LLLLLL$}&]]:r::%MM)44"3   r   read_terminalc           	         ddl m}  ||                     d          |                     d          t          dd                     S )Nr   )read_terminal_tool
start_linecountread_terminal_callback)r  r  r  )tools.read_terminal_toolr  r'  r7   )rt   _read_terminal_toolr:   s     r   ry   z/execute_tool_calls_sequential.<locals>._execute-  s]    ^^^^^^**(}}\::#--00$U,DdKK   r   delegate_tasktasksu   🔀 delegating u    tasks · (/agents to monitor)goalr   u   🔀 u    · (/agents to monitor)u'   🔀 delegating · (/agents to monitor) r   r   c                .                         |           S rv   )_dispatch_delegate_task)rt   r:   s    r   ry   z/execute_tool_calls_sequential.<locals>._executeR  s     88CCCr   c                >    j                             |           S )N)r~   )context_compressorhandle_tool_call)rt   r:   r!   r~   s    r   ry   z/execute_tool_calls_sequential.<locals>._executep  s#     3DD]T]hpDqqqr   zContext engine tool 'z
' failed: z1context_engine.handle_tool_call raised for %s: %sr   c                :    j                             |           S rv   )r  r  )rt   r:   r!   s    r   ry   z/execute_tool_calls_sequential.<locals>._execute  s     0AA-QZ[[[r   zMemory tool 'z1memory_manager.handle_tool_call raised for %s: %srS   rT   )
r'   r0   r4   r5   enabled_toolsskip_pre_tool_call_hookr   rS   rT   r   r   r   r   r   z&handle_function_call raised for %s: %sr   )!agent_runtime_owns_post_tool_hookrK   )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	  r
  z remaining tool call(s)u   [Tool execution skipped — z* was not started. User sent a new message]r  r|   )lr.  r  r   rD  r  r   r  r   r   r  rD   r  r  r  rn   rI  rk   r$   rZ   rQ   r  r   rf   r9   rq   r7   r!  r   r8   r"  r#  r$  r  r  rX   rE   r/  r  r0  r1  r2  r7  r   r   r   r3  r4  r5  ro   r6  r&  r`   r'  r(  r)  r   r*  r+  r,  rL   r;   r%  r}   r8  rK  r9  r:  r;  r   r<  r=  r   _delegate_spinnerrG  _context_engine_tool_names_get_tool_emojirA   r  has_toolr   handle_function_callr0   valid_tool_namesr   rM   r   r"   r
   agent.agent_runtime_helpersr  r(   rH  r   rJ  r   rM  r   r   r   rN  rO  r   rP  r   rQ  
tool_delaysleepr   )Ar:   rR  r~   r&   r   r   remaining_calls
skipped_tcskipped_nameskip_msgr#   erT  r^   rU  rV  rW  r    
_block_msg_block_error_typer   _guardrail_block_decisionrY  _execution_blockedr_  r`  r   ra  rb  rZ  r[  r\  r]  tool_start_timero  rp  ry   	tasks_argspinner_labelgoal_previewrc  rd  _delegate_resultrt  emoji
_ce_resultr   _mem_result_spinner_resultrr  _result_len_is_error_resultr   r  _executor_must_emit_post_hookrs  _log_resultrw  rx  _fr_strrv  	remainingnum_tools_seqr!   r   sA   ` ``                                                           @@r   execute_tool_calls_sequentialr    s!   !"3">BB }	) }	)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	 +S''/ D"55;+
 +
 +
'' %)
*&(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GE3G$O$OSX$X$X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 ,(!%&6!7!7     '2 $;;<UVVOM)++&"3$Yb99?R ,%&?DQQwUw!%&6!7!7     f$$      .R++"3$Yb99?R . . .*O] !IKK/9M5577 @~#>v}Vcl{#|#|#|~~...     " .R++"3$Yb99?R . . .*O] !IKK/9M5577 J  I#>?OQ^`m  wF  $G  $G  $G  I  I  J  J  Jh&&       2 .R++"3$Yb99?R . . .*O] !IKK/9M5577 B  A#>xXen}#~#~#~  A  A  B  B  Bi''      .R++"3$Yb99?R . . .*O] !IKK/9M5577 C  B#>y-Yfo~###  B  B  C  C  Co--      .R++"3$Yb99?R . . .*O] !IKK/9M5577 I  H#>P]_l  vE  $F  $F  $F  H  H  I  I  I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D D D D D D1U"/"/&7!(D"!=!=!C$2 2 2. $3 *.' $	o =6Wdm}~~~ 3LL****;;== 3MM/x//222 +/' $	o =6Wdm}~~~ 3LL****;;== 3MM/x//22223- T	:-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r r r r r r r r1U"/"/&7!(D"!=!=!C$2 2 2. -

 | | |"&*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" t	:u'<'E'Em'T'T t	: 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\ \ \ \ \ \ \1U"/"/&7!(D"!=!=!C$2 2 2. . | | |"&*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 S	: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,015%,U4F%M%M&-e5H$&O&O267G2H2H #= # # #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,015%,U4F%M%M&-e5H$&O&O267G2H2H #= # # %   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!%&6!7!7	 	 	 	 " 		#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??? 	`GE3G$O$OSX$X$X$ `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 s9  1CDDD%A
E00
E=<E=4A,H!!
H.-H.4O
OO%(P
P9P44P9Q##
R-R		R$AS55
TTBV!!
V.-V.)1kA7m/3p#"s$#
q1-:q,'s$,q11s$$A0u 2y|
z!:z|z!!|A0~@5B$ACCAG.CA AE;DAD1D0AE;D1
AD>D;AE;D=AD>D>AE;E&AE6E1AG.E6AE;E;AG.G.A0AII"B"ALL>AN$MAMMAN$M
AM'M$AN$M&AM'M'AN$M4&ANNAN$TAT3T3
AUT=AUUAUU)AVV
AV1VAV,V,AV1X;AYY
AZY#AY?Y?AZrz  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+   r"   )r!   r"   r#   r$   r&   r"   r'   r"   rH   rI   r=   r"   r   r"   r    r*   r+   r"   )r+   rN   )
r!   r"   r#   r$   r&   r"   r'   r"   r+   rg   )
r!   r"   r#   r$   r&   r"   r'   r"   r+   rr   )r   )r~   r8   r&   r"   r   r(   r+   r,   )4__doc__
__future__r   concurrent.futuresr@  rD   r5  r*  r:  r   rL   typingr   r   agent.displayr   r   r4  r   rK  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__rn   r?  r   r;   rF   rM   rf   rq   r}   rz  r  __all__r   r   r   <module>r     s  
 
 # " " " " "       				                                    8 7 7 7 7 7                   = < < < < <       
 
	8	$	$     ! $7;           F    $ #*7;     :. . . .b! ! ! !6! ! ! !@KH KH KH KH KH^J
L J
L J
L J
L J
L` $#r   