
    `gjzR                   J   d Z ddlmZ ddlZddl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mZmZ ddlmZmZ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$m%Z% dd	l&m'Z' dd
l(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0  ejb                  e2      Z3d%dZ4dZ5dZ6d&dZ7d'dZ8	 	 	 	 	 	 d(dZ9d Z:d)dZ;dddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d*dZ<d+d,dZ=dddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-dZ>d.dZ?	 	 	 	 	 	 	 	 	 	 d/dZ@	 	 	 	 	 	 	 	 	 	 d0dZAd1dd d2d!ZBd1dd d2d"ZCd3d4d#ZDg d$ZEy)5u  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)Path)AnyOptional)KawaiiSpinnerbuild_tool_previewbuild_tool_labelget_cute_tool_messageget_tool_emojiredact_tool_args_for_display_detect_tool_failure)ToolGuardrailDecision)_is_destructive_command_is_multimodal_tool_result_multimodal_text_summary!_append_subdir_hint_to_multimodal_plan_tool_batch_segmentsmake_tool_result_message)get_active_env)propagate_context_to_thread)maybe_persist_tool_resultenforce_turn_budget)BudgetConfigDEFAULT_BUDGETbudget_for_context_windowc                    	 t        t        | dd      dd      }|rt        t        |            S t        S # t        $ r	 t        cY S w xY w)a  Resolve a tool-result BudgetConfig scaled to the agent's context window.

    Large-context models keep the historical 100K/200K char defaults; small
    models (e.g. a 65K-token local model switched into mid-session) get a budget
    proportional to their window so a single large tool result can't push the
    request past the model's limit (#23767). Falls back to the default budget
    when the context length isn't resolvable.
    context_compressorNcontext_length)getattrr   intr   	Exception)agentctxs     F/root/.hermes/venv/lib/python3.12/site-packages/agent/tool_executor.py_budget_for_agentr%   8   sM    ge%94@BRTXY69(S2M~M s   -6 6 AA   g     @z@c                    	 t        j                  |       }t	        |t
              r|dfS i t        j                  dddd      fS # t         j                  t        f$ r d}Y Mw xY w)zAParse model-emitted arguments without repairing or coercing them.NzInvalid tool argumentszBTool arguments must be a valid JSON object; tool was not executed.)errormessageFensure_ascii)jsonloadsJSONDecodeError	TypeError
isinstancedictdumps)raw_arguments	argumentss     r$   _parse_tool_argumentsr5   O   st    JJ}-	 )T"$tzz-T	
   	   ), 	s   A A%$A%c                     t        j                  dd      j                         } | st        S 	 t	        |       }|dk  ry |S # t
        $ r$ t        j                  d| t               t        cY S w xY w)N HERMES_CONCURRENT_TOOL_TIMEOUT_S z8invalid HERMES_CONCURRENT_TOOL_TIMEOUT_S=%r; using %.0fsr   )osgetenvstrip"_DEFAULT_CONCURRENT_TOOL_TIMEOUT_Sfloat
ValueErrorloggerwarning)rawvalues     r$    _resolve_concurrent_tool_timeoutrC   b   sr    
))6
;
A
A
CC112c
 zL  2F.	

 212s   A *A.-A.c                   	 | j                  |       y# t        $ r!}t        j                  d||       Y d}~yd}~ww xY w)a`  Best-effort incremental SessionDB flush for tool-call progress.

    Tool execution can perform side effects that terminate or restart the
    current Hermes process before the normal turn-end persistence path runs.
    Flush the already-appended assistant/tool messages immediately so the
    transcript survives destructive-but-valid tool calls.
    z5Incremental tool-call persistence failed after %s: %sN)_flush_messages_to_session_dbr!   r?   r@   )r"   messagesstageexcs       r$   %_flush_session_db_after_tool_progressrI   t   s>    \++H5 \NPUWZ[[\s    	>9>c                     ddl } | S )zRLazy reference to ``run_agent`` so patches like ``run_agent._set_interrupt`` work.r   N	run_agentrK   s    r$   _rarM      s        c                    dt        |       v S )Nz6cannot schedule new futures after interpreter shutdown)str)rH   s    r$   %_is_interpreter_shutdown_submit_errorrQ      s    Cs3xOOrN   )duration_msstatus
error_typeerror_messagemiddleware_tracec       
            	 ddl m}  |||||xs dt        | dd      xs d|xs dt        | dd      xs dt        | dd      xs d||||	t        |
xs g              y # t        $ r Y y w xY w)Nr   )_emit_post_tool_call_hookr8   
session_id_current_turn_id_current_api_request_id)function_namefunction_argsresulttask_idrY   tool_call_idturn_idapi_request_idrR   rS   rT   rU   rV   )model_toolsrX   r   listr!   )r"   r\   r]   r^   effective_task_idr`   rR   rS   rT   rU   rV   rX   s               r$   _emit_terminal_post_tool_callrf      s    9!''%+ulB7=2%+E#5r:@b"5*CRHNB#!'!"2"8b9	
  s   AA   	A,+A,user interruptc                <    t        j                  d|  ddd      S )NTool execution cancelled by 	cancelled)r(   rS   Fr*   )r,   r2   )reasons    r$   _cancelled_tool_resultrl      s*    ::3F8<!	
  rN   keyboard_interrupt)rk   rT   rV   c                   t        |      }	t        | |||	||t        t        j                         |z
  dz        d|d| t	        |xs g              |	S )N  rj   ri   )
r\   r]   r^   re   r`   rR   rS   rT   rU   rV   )rl   rf   r    timerd   )
r"   r\   r]   re   r`   
start_timerk   rT   rV   r^   s
             r$   '_emit_cancelled_terminal_post_tool_callrr      se     $F+F!##+!z1T9:4VH=.4"5 MrN   c                   	 ddl }ddlm} ddlm} t        | dd      }t        | dd      }t        |dd      |t        |      nd|t        |      ndf}t        | dd      }||d   |k(  r|d	   S 	 |j                  ||d
d
      xs g }|j                  |      }		 ||	f| _
        |	S # t
        $ r t               cY S w xY w# t
        $ r t               }	Y :w xY w# t
        $ r Y |	S w xY w)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)rw   rx   
quiet_modeskip_tool_search_assembly)rc   toolsru   tools.registryrv   r!   	frozensetr   get_tool_definitionsscoped_deferrable_namesrz   )
r"   rc   _ts	_registryenableddisabled	cache_keycachedscoped_defsnamess
             r$   _tool_search_scoped_namesr      s3   ,8 e/6Gu148H	=!,%1	't'3	(I
 U6=FfQi94ay	!66$&&*	 7 
 
  	 ++K8*3U);& L7  {*    Ls5   B) 3*C 	C )B?>B?CC	C('C(c               v   	 ddl m}  ||||xs dt        | dd      xs d|xs dt        | dd      xs dt        | dd      xs d      }t        |j                  t
              r|j                  n|}|t        |j                        fS # t        $ r$}t        j                  d|       |g fcY d }~S d }~ww xY w)	Nr   )apply_tool_request_middlewarer8   rY   rZ   r[   )r_   rY   r`   ra   rb   z!tool_request middleware error: %s)hermes_cli.middlewarer   r   r0   payloadr1   rd   tracer!   r?   debug)	r"   r\   r]   re   r`   r   r^   r   rH   s	            r$   (_apply_tool_request_middleware_for_agentr     s    !G.%+ulB7=2%+E#5r:@b"5*CRHNB
 %/v~~t$D&..-V\\*** !8#>b  !s   BB 	B8B3-B83B8c                  	 	d		fd}ddl m}  ||||xs dt        | dd      xs d|xs dt        | dd      xs dt        | dd      xs d	      }|	fS )
Nc                <    t        | t              r| n       S N)r0   r1   )	next_argsexecuter]   observed_argss    r$   _executez6_run_agent_tool_execution_middleware.<locals>._execute2  s    %/	4%@	m}%%rN   r   )run_tool_execution_middlewarer8   rY   rZ   r[   )original_argsr_   rY   r`   ra   rb   r   r1   returnr   )r   r   r   )
r"   r\   r]   re   r`   r   r   r   r^   r   s
     `  `   @r$   $_run_agent_tool_execution_middlewarer   '  s}     "M&
 D*#!'R5,39r!'R126<"u&?DJ
F =  rN   Tfinalizec               N#   [ |j                   }t        |      }t               } j                  rt	         j
                   d| d       |D ]{  }	j                  t        |	j                  j                  d|	j                  j                   d|	j                  d             t         d|	j                  j                          } y	g }
|D ]_  }|j                  j                  }t        |j                  j                        \  }}||
j                  |||g |d
f       V|dk(  rd _        n|dk(  rd _        d	}	 ddlm} ||j$                  k(  rH|j'                  |      \  }}}|s1|r/|t)               v r|}|}nt+        j,                  dd| did
      }t1         ||t3        |dd      xs d      \  }}d	}d
}|1|}t5         |||t3        |dd      xs ddd|t7        |      
       n 	 ddlm}  |||xs dt3         dd      xs dt3        |dd      xs dt3         dd      xs dt3         dd      xs dt7        |            }|Gt+        j,                  d|id
      }t5         |||t3        |dd      xs ddd|t7        |      
       nw j<                  j?                  ||      }|j@                  sO jC                  |      }d}t5         |||t3        |dd      xs ddd t3        |d!d	      xs d"t7        |      
       ||d#v re jD                  jF                  rO	 |jI                  d$d      }|r: jD                  jK                  |      } jD                  jM                  |d%|        |d&k(  r jD                  jF                  r{	 |jI                  d'd      }tO        |      r]|jI                  d(      xs( tQ        jR                  d)tQ        jT                               } jD                  jM                  |d*|d	d+         |
j                  ||||||f       b d,jW                  d- |
D              } jX                  s(t3         d.d/      d0k7  rt	        d1| d2|        t[        |
d3      D ]  \  }\  }	} }!}}}t]        | |!      xs |!}"t+        j,                  |"d
      }# j^                  r^t	        d4| d5|  d6t7        |"ja                                d7       t	         jc                  d8t+        j,                  |"d9d
:                   t        |#       jd                  kD  r|#d	 jd                   d;z   n|#}$t	        d4| d5|  d6t7        |!ja                                d<|$         |
D ]J  \  }	} }!}}}| jf                  s	 t]        | |!      xs |!}"ti        | |"      }% jg                  d=| |%|"       L |
D ]G  \  }	} }!}}}| jn                  s	 t]        | |!      xs |!}" jo                  |	j                  | |"       I d	g|z  [t[        |
      D ]  \  }\  }	} }!}}}|| |!|d@dd|f[|<    | _8         js                  dA| dB|         [fdC}'d	}( ju                         re jw                         rUty        jz                  t}        j~                               })t}        |) dD| dEdF j                  G      }(|(j                          	 t[        |
      D 	 !cg c]  \  }\  }	} }!}}}|||	| |!f }*}}}!} }	}}g }+i },t               }-t               }.|.t        j                         |.z   nd	}/|*r#t        t        |*      t              }0ddHlHmI}1  |1|0I      }2d
}3	 t[        |*      D ]F  \  }4\  }}	} }!	 |2j                  t        |'      ||	| |!|
|   dJ         }5|+j                  |5       ||,|5<   H t        j                         }=d
}>	 dN}?|/x|/t        j                         z
  }@|@dk  r+t               |+D 5ch c]  }5|5j                         r|5 }B}5}AnUt        |?@      }?t        j                  j                  |+|?O      \  }A}Bn$t        j                  j                  |+|?O      \  }A}BBsn|/t        j                         |/k\  rd}3BD 5ch c]  }5|5|,v r|,|5    }-}5|-D cg c]
  }|
|   d3    }C}t        j                  dP|.t        |-      d,jW                  |Cd	dQ              BD ]  }5|5j                            j                  5  t7         j                        }Dd	d	d	       DD ]  }E	 t               j                  dE        n j                  rkd}3|>s.d}> j                   j
                   dRt        B       dSdT       BD ]  }5|5j                           t        j                  j                  BdUO       nt        t        j                         |=z
        }F|FdkD  rZFdVz  dWk  rRBD 5cg c]  }5|5|,v r|
|,|5      d3    }C}5 js                  dXF dYt        B       dZd,jW                  |Cd	dJ        d7       y|2j                  |3 |3[       |(rAt        d\ [D              }Gt        d] [D              }H|(j                  d^|G d_| d`|Hdadb       	 t[        |
      D ])  \  }\  }	} }!}}}[|   }Id
}Jd	}K||-v rTIR|.|.dadcndd}LdL|  de|L }Mdf}Kt5         | |!|Mt3        |	dd      xs ddgdhMt7        |      
       t        |.xs d@      }NnbIv j                  r4d|  d}Mt5         | |!|Mt3        |	dd      xs ddidjdkt7        |      
       n3dL|  dl}Mt5         | |!|Mt3        |	dd      xs dddmMt7        |      
       d@}NnI\  }}}M}N}O}J}|Jrd}KJs j                  ||MOn      }MOr8t        M      }Pt        |P      dokD  rPd	do nP}Qt        j                  dp|N|Q       Js	  j                  ||MO       Js% jf                  r	  jg                  dr|d	d	NOMs        j^                  rAtk        jl                  dt| duNdvdc       tk        jl                  dwt        M       dx|M         ju                         r$t        | |!NMy      }S j                  dz|S        n jX                  st3         d.d/      d0k7  rt        M      }T j^                  r2t	        d{|d3z    duNdvdc       t	         jc                  d|T             nDt        T       jd                  kD  rTd	 jd                   d;z   nT}Ut	        d{|d3z    duNdvd}|U        d	 _8         js                  d~|  dNdad       Js; j                  r/	 t]        | |!      xs |!}" j                  |	j                  | |"M       t        M      s#t        M| |	j                  t              |      nM}M j                  j                  | |!      }V|Vrt        M      rt        MV       nMVz  }M j                  | M      }Wt        | |W|	j                  K      }Xj                  |X       |XjI                  d      }Y|YBYjI                  d      dk7  r. jf                  r"	  jg                  d| d	d	|	j                  Y       t         d|          j                  d3       , t        |
      }|r"|dkD  r| d	 }Zt        |Zt              |       |r|dkD  r j                  |       y	y	y	# t.        $ r Y w xY w# t.        $ r d	}Y w xY w# t.        $ r Y w xY w# t.        $ r Y `w xY w# t.        $ r#}&tk        jl                  d>|&        Y d	}&~&
"d	}&~&ww xY w# t.        $ r#}&tk        jl                  d?|&        Y d	}&~&
d	}&~&ww xY wc c}}}}!} }	}w # t        $ rh}6t        |6      s |*|4d	 }7t        j                  dKt        |7             |7D ]'  \  }8}9}:};[|8   |
|8   dJ   }dL|: dM}<|:|;|<d@dd
|f[|8<   ) Y d	}6~6 d	}6~6ww xY wc c}5w c c}5w c c}w # 1 sw Y   -xY w# t.        $ r Y :w xY wc c}5w # |2j                  |3 |3[       w xY w# |(rAt        d\ [D              }Gt        d] [D              }H|(j                  d^|G d_| d`|Hdadb       w w xY w# t.        $ r!}Rtk        jl                  dqR       Y d	}R~Rd	}R~Rww xY w# t.        $ r#}&tk        jl                  d>|&        Y d	}&~&d	}&~&ww xY w# t.        $ r#}&tk        jl                  d|&        Y d	}&~&d	}&~&ww xY w# t.        $ r!}&tk        jl                  d|&       Y d	}&~&d	}&~&ww xY w)u  Execute 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.

    ``finalize=False`` skips the end-of-batch aggregate budget enforcement
    and /steer injection — used when this call is one segment of a larger
    mixed batch and the segmented dispatcher owns the turn-end work.
       ⚡ Interrupt: skipping  tool call(s)   [Tool execution cancelled — # was skipped due to user interrupt]noneeffect_dispositioncancelled tool result rG   NFmemoryr   skill_managert   r(   'O' is not available in this session. Use tool_search to find tools you can call.r*   idr8   r\   r]   re   r`   blockedtool_scope_block	r\   r]   r^   re   r`   rS   rT   rU   rV   resolve_pre_tool_blockrY   rZ   r[   r_   rY   r`   ra   rb   rV   plugin_blockTguardrail_blockr)    Tool blocked by guardrail policy>   patch
write_filepathbefore terminalcommandworkdirTERMINAL_CWDbefore terminal: <   z, c              3  .   K   | ]  \  }}}}}}|  y wr    ).0_names      r$   	<genexpr>z0execute_tool_calls_concurrent.<locals>.<genexpr>  s     L(;4Aq!tLs   tool_progress_modealloffu     ⚡ Concurrent: u    tool calls — r{        📞 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                  j                  |       ddd       j                  r	 t               j                  d|       	 ddl
m}  |j                         t        j                         }	 	 j                  |||j                  ddt!        |            }t        j                         |z
  }	t3        ||      \  }}|rt*        j-                  d||	|dd        n!t*        j-                  d||	t5        |             ||||	|d|f| <   j                  5  j                  j/                  |       ddd       	 t               j                  d|       y# 1 sw Y   IxY w# t        $ r Y 1w xY w# t        $ r Y (w xY w# t"        $ r 	 j%                  d       n# t        $ r Y nw xY wt'        ||t)        |dd      xs d|t!        |      	      }t        j                         |z
  }	t*        j-                  d
||	       ||||	dd|f| <   Y j                  5  j                  j/                  |       ddd       n# 1 sw Y   nxY w	 t               j                  d|       y# t        $ r Y yw xY wt        $ r,}
d| d|
 }t*        j1                  d||
d       Y d}
~
d}
~
ww xY w# 1 sw Y   xY w# t        $ r Y yw xY w# j                  5  j                  j/                  |       ddd       n# 1 sw Y   nxY w	 t               j                  d|       w # t        $ r Y w w xY wxY w)z%Worker function executed in a thread.NTr   set_activity_callback)rF   pre_tool_block_checkedskip_tool_request_middlewaretool_request_middleware_tracekeyboard interruptr   r8   r\   r]   re   r`   rq   rV   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_requestedrM   _set_interruptr!   tools.environments.baser   _touch_activityrp   _invoke_toolr   rd   KeyboardInterrupt	interruptrr   r   r?   infodiscardr(   r   len)index	tool_callr\   r]   rV   _worker_tidr   startr^   duration
tool_erroris_errorr   r"   re   rF   resultss                r$   	_run_toolz0execute_tool_calls_concurrent.<locals>._run_tool=  st   
  ..066,, 	8&&**;7	8 %%$$T;7	E!%"7"78 		4	i++!!%LL%+/15267G2H , 	> yy{U*H.}fEKHa8-SYZ^[^S_`A=RZ\_`f\gh+]FHhX]_opGEN 00 @**22;?@$$UK8U	8 	8    		$ % OO$89  @"/"/&7!(D"!=!C$%)*:%;  99;.7Q"/RVX]_o!p$ 00 @**22;?@ @ @$$UK8 +  i1-J<P=}jcghhi"@ @  	 00 @**22;?@ @ @$$UK8 s	  FF 8F, &,F< A1L K+4K8 F	F)(F),	F98F9<	K(GK(	G$!K(#G$$A'K(L I==J
J% %	J10J14K(<!K#L #K((L +K58	LLM0L90	M09M>M0M! M0!	M-*M0,M--M0u    ⚡ running z tools concurrentlydotsspinner_typeprint_fn)DaemonThreadPoolExecutor)max_workers   zWinterpreter shutdown while scheduling concurrent tools; skipping %d unsubmitted tool(s)r   z<': Python interpreter is shutting down; tool was not startedg      @)timeoutzIconcurrent tool batch timed out after %.1fs; %d tool(s) still running: %s   u   ⚡ Interrupt: cancelling z pending concurrent tool(s)forceg      @      zconcurrent tools running (zs, z remaining: )waitcancel_futuresc              3  &   K   | ]	  }|d  y w)Nr{   r   r   rs     r$   r   z0execute_tool_calls_concurrent.<locals>.<genexpr>9  s     @!!-A@s   c              3  ,   K   | ]  }||d     y w)Nr  r   r  s     r$   r   z0execute_tool_calls_concurrent.<locals>.<genexpr>:  s     CQQ]AaDCs   
u   ⚡ /z tools completed in .1fzs totalszthe configured timeoutz': timed out after unknownr	  tool_timeoutrj   rm   z*Tool execution cancelled by user interruptz!': 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Tool result (	 chars): r^          ✅ Tool Result: s - tool completed:  (s)Tool complete callback error: content	tool_nametool_use_idenvconfig_tool_output_riskrisklowtool.output_riskr`   risk_metadata#Tool output risk callback error: %stool result r3  r4  )n
tool_callsr   r%   r   print
log_prefixappendr   functionr   r   rI   r5   r4   _turns_since_memory_iters_since_skillr~   ru   TOOL_CALL_NAMEresolve_underlying_callr   r,   r2   r!   r   r   rf   rd   hermes_cli.pluginsr   _tool_guardrailsbefore_callallows_execution_guardrail_block_result_checkpoint_mgrr   getget_working_dir_for_pathensure_checkpointr   r9   r:   getcwdjoinr|   	enumerate_redact_tool_args_for_displayverbose_loggingkeys_wrap_verboselog_prefix_charstool_progress_callback_build_tool_previewloggingr   tool_start_callback_current_toolr    _should_emit_quiet_tool_messages_should_start_quiet_spinnerrandomchoicer   get_waiting_faces	_print_fnr   setrC   rp   	monotonicmin_MAX_TOOL_WORKERStools.daemon_poolr  submitr   RuntimeErrorrQ   r?   r@   done
concurrentfuturesr  cancelr   r   rM   r   _vprintr    shutdownsumstopr=   _append_guardrail_observationr   _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   )\r"   assistant_messagerF   re   api_call_countr   r>  	num_tools_tool_budgettcparsed_callsr   r\   r]   malformed_args_result_ts_scope_blockr   _underlying_underlying_args_errrV   block_resultblocked_by_guardrailr   block_messageguardrail_decision	file_pathwork_dircmdcwdtool_names_strir   argsdisplay_argsargs_strargs_previewpreviewcb_errr  spinnerfacerunnable_callsrl  future_to_indextimed_out_indices	timeout_sdeadliner  r  executorabandon_executorsubmit_indexfsubmit_errorskipped_calls	skipped_i_tcskipped_nameskipped_argsr^   _conc_start_interrupt_loggedwait_timeout	remainingrj  not_done_still_runningworker_tidstid_conc_elapsed	completed	total_durr  r   r   suffixfunction_resulttool_durationr   	_err_textresult_preview_ver_errcute_msg_preview_strresponse_previewsubdir_hints_tool_contenttool_messager:  turn_tool_msgsr   s\   ` ``                                                                                       @r$   execute_tool_calls_concurrentr  G  s    #--JJI %U+L !!!!"":9+]ST 	BOO4  01A1A0BBef#)	  2.r{{/?/?.@A	 	 L a}	!**///D((0
,, !,!!)	  H$()E%n,'(E$$ 	0 2 22696Q6QR_6`3-t"&?&FF(3(8*.**#"#K= 1N !N6
 ).+/ +S''/ D"5;+
'' $&*L)++#"3$Yb9?R --!%&6!7%E 6!!-3&ulB?E2!(D"!=!C#E+=rBHb#*52KR#P#VTV%)*:%;	! (#zz7M*BQVW-"/"/'&7!(D"!=!C$-"/%)*:%; &+%;%;%G%GWd%e")::#(#@#@AS#TL+/(1&3&3+*;%,Yb%A%GR(#4&-.@)T&R&xVx)-.>)?  77E<Q<Q<Y<Y - 1 1&" =I #(#8#8#Q#QR[#\--??GTaSbJcd
 
*u/D/D/L/L'++Ir:C.s3+//	:dbiiXZXaXaXc>d--??#4S"XJ!? 	Y}FVXdfz{|Ca}H YYL|LLN/CU Ku T"9+-=n=MNOYbcoqrYs 	XUAUD$ 0,@T8tDLLzz,UCH$$QCr$ql6G6G6I1J0K1MNe))(DJJ|TUdi4jklLOPXM\a\r\rLrx(?)?)?@5H  yAQCr$qdiik1B0C4~VW	X Q] 	ILD$(,8L#''I<T4HPD-dLA,,^T7LY	I Q] FLD$(,8L#$$F<T4HPD))"%%|DF fy GU^_kUl WQQBd,l<P#lCtEUVGAJW )E	Jyk1F~FVWXRj G--/E4U4U4W}}]<<>?4&i[@S Tcity  uD  uD  Ecc ^ggs]t
 
YYBd$4lDX# D$
 

 &)e46	3<3H4>>#i/dc.13DEK C/KHH$H9B>9R #+5L"51b$$OO7	BAr4QUWcdeWfghWi: NN1%)*OA&G#+T #iik$)!#&L+$,t~~/?$?	$>-0U+25&'!&&(5( 5D ,/|Y+GL-7-?-?-D-D ' .E .ND( *4););)@)@#\ *A *h $+0@H0L+/( &.- ! O3 ,A.-) - &7* ! )OA.* * ;% 12 IInRa&89 "* 'AHHJ'"<< K*.u/I/I*JKK#. %C% # 4 4T3 ?%
  11+/(004-!MM#(#3#3"44N#&x=/1L!N&* * 
 "* 'AHHJ' #**//#/F$'		k(A$BM$q(]R-?!-C &.* ! O3 ));<Q?* *
 --8s"8}o\$))NSUTUDV:W9XXY[] p !!--#3 " 
 @w@@IC'CCILL4	{!I;6J9UX/Y`ab V__kUl u@QQBd,l<PAJ
 "!!ai,5,A	#a(G_F 6tf<OPVxXO!*)""&"3$Rr28b )-!%&6!7 ")"2s3MY))$B4&Hk"l-"&"&*&7!(T2!6!<"&3"N%)*:%; %;4&@a"b-"&"&*&7!(T2!6!<""6"1%)*:%;  MpqmM=/=(T[]m%+""'"E"E!!##	 #F # 4_E	47	NS4H4CiC]Tacqr
 X66%}ox u;;M00(-t!.. 1  $$m_N=QTBUUVWXc/.B-C9_L]^_ 11324}UdeH8*o.!!ge5I5&QUZ&Z3ODL$$AaC5}S6IKLe))*lCDTWXdTehmh~h~T~<0G1G1G#H5#P  EQ AaC5}S6IN^M_`a" 0bs8K2NO577I<T4HPD,,RUUD,X ,O< 4#01
 CR 	 00@@tL)/: 2/<P</ CCD/Z/EE1	
 	%$(()<=%!!&)U2,,
M,,&!#"/ -  	. '	
 	228Q?ku@p L!IIM!9*+.N?P0QZfg IM228YG "xu  		X  % $%X !  ! 6  I >vhGHHI  F ;F8DEEFV
 
: ( D\R!(6|}(E>.
 KX "FIsL,&y193?	3J13M 0&<\N K` %` !'
 %1$0$*$'$($)$46"	 2"  3R5"-
*K K
 $- % $%8* !!--#3 " 
 @w@@IC'CCILL4	{!I;6J9UX/Y`ab	 r ! XMM"LhWWX ! MMM$B6("KLLM6  I >vhGHHIf  MCVLLMs  A|><A}8A} "A:}0 0~ /-~/+AB' >A(AB'  AB %)<AAB AA.AA2A<AB .AA">AB AA'AAB +AA,AB AA9)B+AB AB	*:AB $AB' AC/2AD#.AE,!AE:>	}
}}} 	}-,}-0	}=<}= 	~,	~''~,/	8AB' )	AA2?AA@2AAAAB AAAAAB A,AA6A1AB A9	ABBAB BABBAB BAB$B$AB' B'AAC,C/	ADC8ADDADD	AED%AEEAEE	AE7EAE2E2AE7E:	AF$FAFFAF$c               1   CD t               }t        |j                  d      D ]  \  }D j                  r|j                  |dz
  d }|r, j	                   j
                   dt        |       dd       |D ]U  }	|	j                  j                  }
j                  t        |
d|
 d|	j                  d	
             t         d|
        W  nDj                  j                  Ct        Dj                  j                        \  }}|Kj                  t        C|Dj                               t         dC         j                  d       5d}	 ddlm} C|j$                  k(  r1|j'                  |      \  }}}|s|r|t)               v r|C|}nd| d}t-         C|t/        Ddd      xs d      \  }}d}d}||}d}n`	 ddlm}  |C|xs dt/         dd      xs dt/        Ddd      xs dt/         dd      xs dt/         dd      xs dt5        |            }d}|* j6                  j9                  C|      }|j:                  s|}|duxs |du}|rnCdk(  rd _        nCdk(  rd _         j@                  st/         dd      d k7  rtC        C|      xs |}tE        jF                  |d!"      } jH                  r^tK        d#| d$C d%t5        |jM                                d&       tK         jO                  d'tE        jF                  |d(d!)                   nZt        |       jP                  kD  r|d jP                   d*z   n|}tK        d#| d$C d%t5        |jM                                d+|        |sC _)         jU                  d,C        |s	 dd-l+m,}  | jT                         |s= jZ                  r1	 tC        C|      xs |}t]        C|      } j[                  d.C||       |s: jb                  r.	 tC        C|      xs |} jc                  Dj                  C|       |siCd1v re jd                  jf                  rO	 |ji                  d2d      }|r: jd                  jk                  |      }  jd                  jm                  | d3C        |sCd4k(  r jd                  jf                  r{	 |ji                  d5d      }!to        |!      r]|ji                  d6      xs( tq        jr                  d7tq        jt                               }" jd                  jm                  |"d8|!dd9         tw        jv                         }#|JtE        jF                  d:|id!"      }$d;}%ty         C||$t/        Ddd      xs dd<||t5        |      =
       	n&|Q j{                  |      }$d;}%ty         C||$t/        Ddd      xs dd<d>t/        |d?d      xs d@t5        |      =
       nӉCdAk(  rtd fdB}&t}         C|t/        Ddd      xs d|&C      \  }$}tw        jv                         |#z
  }% j                         r} j	                  dDt        dA||%|$E              nZCdFk(  rtd fdG}&t}         C|t/        Ddd      xs d|&C      \  }$}tw        jv                         |#z
  }% j                         r j	                  dDt        dF||%|$E              nCdk(  rvd DfdH}&t}         C|t/        Ddd      xs d|&C      \  }$}tw        jv                         |#z
  }% j                         r j	                  dDt        d||%|$E              nfCdIk(  rtd fdJ}&t}         C|t/        Ddd      xs d|&C      \  }$}tw        jv                         |#z
  }% j                         r j	                  dDt        dI||%|$E              nCdKk(  rtd fdL}&t}         C|t/        Ddd      xs d|&C      \  }$}tw        jv                         |#z
  }% j                         r j	                  dDt        dK||%|$E              ntCdMk(  ri|ji                  dN      }'|'r t        |'t4              rdOt        |'       dP}(n"|ji                  dQ      xs dddR })|)rdS|) dTndU}(d}* j                         rd j                         rTt        j                  t        j                               }+t        |+ dV|( dW j                  X      }*|*j                          |* _I        d},	 d fdY}&t}         C|t/        Ddd      xs d|&C      \  }$}|$},d _I        tw        jv                         |#z
  }%t        dM||%|,E      }-|*r|*j                  |-       n, j                         r j	                  dD|-        n j                  r5C j                  v r&d}* j                         rt        j                  t        j                               }+t        C      }.tC        C|      xs |}t        C|      xs C}t        |+ dV|. dV| dW j                  X      }*|*j                          d}/	 d CfdZ}&t}         C|t/        Ddd      xs d|&C      \  }$}|$}/tw        jv                         |#z
  }%t        C||%|/E      }-|*r|*j                  |-       n j                         rى j	                  dD|-        nÉ j                  rQ j                  j                  C      r5d}* j                         r j                         rt        j                  t        j                               }+t        C      }.tC        C|      xs |}t        C|      xs C}t        |+ dV|. dV| dW j                  X      }*|*j                          d}1	 d Cfd_}&t}         C|t/        Ddd      xs d|&C      \  }$}|$}1tw        jv                         |#z
  }%t        C||%|1E      }-|*r|*j                  |-       n j                         r{ j	                  dD|-        ne j@                  rd}* j                         r j                         rt        j                  t        j                               }+t        C      }.tC        C|      xs |}t        C|      xs C}t        |+ dV|. dV| dW j                  X      }*|*j                          d}2	 t               j                  C|Dj                   j                  xs dt/         dd      xs dt/         dd      xs d j                  rt5         j                        ndddt/         dbd      t/         dcd      t5        |      d      }$|$}2tw        jv                         |#z
  }%t        C||%|2E      }-|*r|*j                  |-       nى j                         rɉ j	                  dD|-        n	 t               j                  C|Dj                   j                  xs dt/         dd      xs dt/         dd      xs d j                  rt5         j                        ndddt/         dbd      t/         dcd      t5        |      d      }$tw        jv                         |#z
  }%t        |$t              r/ jH                  r|$nt        |$      djkD  r|$ddj n|$}3t        |$      }4n|$}3t        t        |$            }4t        C|$      \  }5}6ddkl[m\}7 | xr	  |7 C      }8|8r7ty         C||$t/        Ddd      xs dt        |%dlz        t5        |      m       |s8 j                  C||$|5n      }$ jH                  r|$nt        |$      djkD  r|$ddj n|$}3|5rt        j                  doC|%|3       nt        j                  dpC|%|4       |s	  j                  C||$|5       |s% jZ                  r	  j[                  drCdd|%|5|$s       d _)         jU                  dtC du|%dvdw        jH                  rLt_        j`                  dxC dy|%dzd{       t        |$      }:t_        j`                  d|t        |:       d}|:        |s; j                  r/	 tC        C|      xs |} j                  Dj                  C||$       t        |$      s#t        |$CDj                  t              |      n|$}$ j                  j                  C|      };|;rt        |$      rt        |$|;       n|$|;z  }$ j                  C|$      }<t        C|<Dj                        }=j                  |=       |=ji                  d      }>|>B|>ji                  d      dk7  r. jZ                  r"	  j[                  dCddDj                  |>       t         dC         j                  d        j@                  st/         dd      d k7  r jH                  r/tK        d| dy|%dzd{       tK         jO                  d|$             n^t        |$t              r|$n
t        |$      }?t        |?       jP                  kD  r|?d jP                   d*z   n|?}@tK        d| dy|%dzd|@         j                  r|t        |j                        k  rt        |j                        |z
  }A j	                   j
                   d|A dd       |j                  |d D ]U  }	|	j                  j                  }
j                  t        |
d|
 d|	j                  d	
             t         d|
        W  nM j                  dkD  s^|t        |j                        k  sxtw        j                   j                          t        |j                        }B|r BdkD  rt        B d t              |       |rBdkD  r j                  B       yyy# t*        $ r Y {w xY w# t*        $ r Y w xY w# t*        $ r Y {w xY w# t*        $ r#}t_        j`                  d/|        Y d}~gd}~ww xY w# t*        $ r#}t_        j`                  d0|        Y d}~Zd}~ww xY w# t*        $ r Y w xY w# t*        $ r Y {w xY w# d _I        tw        jv                         |#z
  }%t        dM||%|,E      }-|*r|*j                  |-       w  j                         r j	                  dD|-        w w xY w# t*        $ rA}0tE        jF                  d:d[C d\|0 i      }$t        j                  d]C|0d^       Y d}0~0
d}0~0ww xY w# tw        jv                         |#z
  }%t        C||%|/E      }-|*r|*j                  |-       w  j                         r j	                  dD|-        w w xY w# t*        $ rA}0tE        jF                  d:d`C d\|0 i      }$t        j                  daC|0d^       Y d}0~0
!d}0~0ww xY w# tw        jv                         |#z
  }%t        C||%|1E      }-|*r|*j                  |-       w  j                         r j	                  dD|-        w w xY w# t        $ rO t         C|t/        Ddd      xs d|#t5        |      e      }$|$}2	  j                  df        # t*        $ r Y  w xY wt*        $ r,}0dgC dh|0 }$t        j                  diC|0d^       Y d}0~0	_d}0~0ww xY w# tw        jv                         |#z
  }%t        C||%|2E      }-|*r|*j                  |-       w  j                         r j	                  dD|-        w w xY w# t        $ rM t         C|t/        Ddd      xs d|#t5        |      e       	  j                  df        # t*        $ r Y  w xY wt*        $ r,}0dgC dh|0 }$t        j                  diC|0d^       Y d}0~0	Sd}0~0ww xY w# t*        $ r!}9t_        j`                  dq|9       Y d}9~94d}9~9ww xY w# t*        $ r#}t_        j`                  d/|        Y d}~<d}~ww xY w# t*        $ r#}t_        j`                  d~|        Y d}~d}~ww xY w# t*        $ r!}t_        j`                  d|       Y d}~d}~ww xY w)uB  Execute tool calls sequentially (original behavior). Used for single calls or interactive tools.

    ``finalize=False`` skips the end-of-batch aggregate budget enforcement
    and /steer injection — used when this call is one segment of a larger
    mixed batch and the segmented dispatcher owns the turn-end work.
    r{   Nr   r   Tr  r   r   r   r   r   r   zinvalid tool arguments r   rt   r   r   r   r8   r   r   r   r   rY   rZ   r[   r   r   r   r   r   r   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   r   r   r   r)   r   todoc                x    ddl m}  || j                  d      | j                  dd      j                        S )Nr   )	todo_tooltodosmergeF)r  r  store)tools.todo_toolr  rM  _todo_store)r   
_todo_toolr"   s     r$   r   z/execute_tool_calls_sequential.<locals>._execute  s6    C!#--0#--7++ rN   )r\   r]   re   r`   r   r'  r&  session_searchc                   j                         }|s#ddlm} t        j                  d |       d      S ddlm}  || j                  dd      | j                  d      | j                  d	d
      | j                  d      | j                  d      | j                  dd      | j                  d      |j                  	      S )Nr   )format_session_db_unavailableF)successr(   )r  queryr8   role_filterlimitr  rY   around_message_idwindowr
  sort)	r  r  r  rY   r  r  r  dbcurrent_session_id)	_get_session_db_for_recallhermes_stater  r,   r2   tools.session_search_toolr  rM  rY   )r   
session_dbr  _session_searchr"   s       r$   r   z/execute_tool_calls_sequential.<locals>._execute  s    "==?
!J::%B_Ba&bccW&#--4 )m <#--3(}}\:&/mm4G&H$==15"v.!','7'7
 
rN   c                B   | j                  dd      }| j                  d      }ddlm}  || j                  d      || j                  d      | j                  d      |j                  	      }j                  r#j                  j                  || fd
       |S )Ntargetr   
operationsr   )memory_toolactionr0  old_text)r  r  r0  r  r  r  c                 @     j                  t        dd             S )Nr   )r_   r`   )_build_memory_write_metadatar   )r"   re   r   s   r$   <lambda>zAexecute_tool_calls_sequential.<locals>._execute.<locals>.<lambda>#  s'    u/Q/Q$5)0D$)G 0R 0 rN   )build_metadata)rM  tools.memory_toolr  _memory_store_memory_managernotify_memory_tool_write)r   r  r  _memory_toolr^   r"   re   r   s        r$   r   z/execute_tool_calls_sequential.<locals>._execute  s    "x:&]]<8
I%$==2!%MM)4&]]:6)-- (())BB!( C  rN   clarifyc                x    ddl m}  || j                  dd      | j                  d      j                        S )Nr   )clarify_toolquestionr8   choices)r  r  callback)tools.clarify_toolr  rM  clarify_callback)r   _clarify_toolr"   s     r$   r   z/execute_tool_calls_sequential.<locals>._execute5  s6    L$&]]:r:%MM)4"33 rN   read_terminalc           	     x    ddl m}  || j                  d      | j                  d      t        dd             S )Nr   )read_terminal_tool
start_linecountread_terminal_callback)r  r  r  )tools.read_terminal_toolr  rM  r   )r   _read_terminal_toolr"   s     r$   r   z/execute_tool_calls_sequential.<locals>._executeH  s8    ^*(}}\:#--0$U,DdK rN   delegate_tasktasksu   🔀 delegating u    tasks · (/agents to monitor)goalr  u   🔀 u    · (/agents to monitor)u'   🔀 delegating · (/agents to monitor) r  r  c                &    j                  |       S r   )_dispatch_delegate_task)r   r"   s    r$   r   z/execute_tool_calls_sequential.<locals>._executem  s     88CCrN   c                @    j                   j                  |       S )N)rF   )r   handle_tool_call)r   r"   r\   rF   s    r$   r   z/execute_tool_calls_sequential.<locals>._execute  s#     33DD]T]hpDqqrN   zContext engine tool 'z
' failed: z1context_engine.handle_tool_call raised for %s: %sr   c                <    j                   j                  |       S r   )r  r  )r   r"   r\   s    r$   r   z/execute_tool_calls_sequential.<locals>._execute  s     00AA-QZ[[rN   zMemory tool 'z1memory_manager.handle_tool_call raised for %s: %srw   rx   )
r`   rY   ra   rb   enabled_toolsskip_pre_tool_call_hookr   rw   rx   r   r   r   r   r   z&handle_function_call raised for %s: %sr   )!agent_runtime_owns_post_tool_hookro   )r\   r]   r^   re   r`   rR   rV   r  r  r   r  r  r   r+  r,  r  r-  r!  r"  r#  r  r$  r%  r.  r/  r5  r6  r7  r8  r9  r;  r<  r(  r)  r*  z remaining tool call(s)u   [Tool execution skipped — z* was not started. User sent a new message]zskipped tool result r=  r   )nr%   rR  r>  r   rn  r@  r   rB  r   rA  r   r   rI   r5   r4   rz  r~   ru   rE  rF  r   r!   r   r   rG  r   rd   rH  rI  rJ  rC  rD  r|   rS  r,   r2   rT  r?  rU  rV  rW  r\  r   r   r   rX  rY  rZ  r   r[  rL  r   rM  rN  rO  r   r9   r:   rP  rp   rf   rK  r   r]  rt  r0   r^  r_  r`  r   ra  rb  r   _delegate_spinnerrq  _context_engine_tool_names_get_tool_emoji_build_tool_labelr?   r(   r  has_toolrM   handle_function_callrY   valid_tool_namesr   rr   r   rP   r   agent.agent_runtime_helpersr  r    rr  r@   r   rs  r   rv  r   r   r   rw  rx  r   ry  
tool_delaysleepr   )Er"   r{  rF   re   r|  r   r~  r  remaining_calls
skipped_tcr  r]   r  r  r   r  r  r  rV   
_block_msg_block_error_typer   _guardrail_block_decisionr  _execution_blockedr  r  r  r   r  r  r  r  r  r  tool_start_timer  r  r   	tasks_argspinner_labelgoal_previewr  r  _delegate_resultr  emoji
_ce_resultr   _mem_result_spinner_resultr  _result_len_is_error_resultr   r  _executor_must_emit_post_hookr  _log_resultr  r  r  r:  _fr_strr  r  num_tools_seqr\   r   sE   ` ``                                                               @@r$   execute_tool_calls_sequentialr&    s    %U+L!"3">">B q
)9 %%/::1Q34@O!1!1 22J3K_J``mnvz{- 
)2277 8 4\NBefMM'-	!  62<.A !**///D((0
,, !,OO(!)LL 2/?
 66xC
 *.	0 2 22696Q6QR_6`3-t"&?&FF(3(8  } -J J ( +S''/ D"5;+
'' %)
*&(J 2E3!!-3&ulB?E2!(D"!=!C#E+=rBHb#*52KR#P#VTV%)*:%;	
 CG!!&!7!7!C!CMS`!a%66,>)'t3\7PX\7\ h&()E%n,'(E$GE3G$OSX$X8VgZgLzz,UCH$$QCr-$|?P?P?R:S9TTUVWe))(DJJ|TUdi4jklLOPXM\a\r\rLrx(?)?)?@5H  yAQCr-$}?Q?Q?S:T9UUYZfYghi!"/E!!$4]O"DE
 "I%e&;&;< "e&B&BI<]MZk^k-m\J,,^]GUab "e&?&?F<]MZk^k))),,|T
 "m7N&NSXShShSpSp)--fb9	$44MMiXH));; GM?"; "mz&AeF[F[FcFc#''	26*3/'++I6`"))NTVT]T]T_:`C));;0Sb
; ))+!"jj':)>USOM)++&"3$Yb9?R ,(!%&6!7 '2 $;;<UVOM)++&"3$Yb9?R ,%&?DQwUw!%&6!7 f$ .R++"3$Yb9?R .*O] !IIK/9M557#>v}Vcl{#|"}~.." .R++"3$Yb9?R .*O] !IIK/9M557#>?OQ^`m  wF  $G  #H  I  Jh&2 .R++"3$Yb9?R .*O] !IIK/9M557#>xXen}#~"  A  Bi' .R++"3$Yb9?R .*O] !IIK/9M557#>y-Yfo~#  #A  B  Co- .R++"3$Yb9?R .*O] !IIK/9M557#>P]_l  vE  $F  #G  H  Io-%))'2IZ	48"23y>2BB` a - 1 1& 9 ?R"E $ L>)ABB 
 G557E<]<]<_}}]%D%D%FG'4&-(APVafapapq&-E##3D1U"/"/&7!(D"!=!C$2. $3 *.' $		o =6Wdm}~LL*;;=MMBxj/2---5CcCc2cG557}}]%D%D%FG'6<]MZk^k+M<HYM'4&%'(CRXchcrcrsJ3r1U"/"/&7!(D"!=!C$2. -

 !%		o =6}mUbkuvLL*;;=MMBxj/2""u'<'<'E'Em'T G557E<]<]<_}}]%D%D%FG'6<]MZk^k+M<HYM'4&%'(CRXchcrcrsK3\1U"/"/&7!(D"!=!C$2. .
 !%		o =6}mUbkvwLL*;;=MMBxj/2G557E<]<]<_}}]%D%D%FG'6<]MZk^k+M<HYM'4&%'(CRXchcrcrs"O(3"%%"<"<!=2C!*$//52#E+=rBHb#*52KR#P#VTVBGBXBX$u'='=">^b,015%,U4F%M&-e5H$&O267G2H #= # #2* !%		o =6}mUbkz{LL*;;=MMBxj/2q"%%"<"<!=2C!*$//52#E+=rBHb#*52KR#P#VTVBGBXBX$u'='=">^b,015%,U4F%M&-e5H$&O267G2H #= #> !IIK/9Mos+050E0E_),_)=)C%  o.K -Nc/23K 3=/R! 	R"" H1%G 	& ))++&"3$Yb9?R 45!%&6!7	 "#AA'	 B O 160E0E_),_)=)C%  NN?P]_mnKK=}m]hi "T22!=/CS "e&B&BI,,$mT4*5E* -  # 0r-PSATTVWX  MME-}S>QQRST2?CKMMM#k*:);9[MRS!e&B&BI<]MZk^k,,Y\\=,Xgh ,O< 4##!01
 CR 	 00@@P]^)/:1/<P</ CCMSbc/}ill[%$(()<=%!!&)U2,,
M,,&!!*"/ -  	. 0	
 	228Q?GE3G$OSX$X$$A3n]34GqIJe))*oFG-7-M/SVWfSgORSZ|^c^t^tOt7+BE,B,B#Ce#K  {B A3n]34GtL\K]^_%%!c2C2N2N.O*O-889A=IMMU--..FykQhiquMv/::12> 
)2277 8 2<.@jkMM'-	!  60? aA,=,H,H(I$IJJu''(cq
)h )445MMA%Hm^_5>J[;\eqr
 MA%228]K &x}  		<  T    I >vhGHHI  F ;F8DEEF    @ +/' $		o =6Wdm}~LL*;;=MMBxj/2 >2  |"&**g9N}o]ghrgs7t-u"vPR_akvz{{| !%		o =6}mUbkuvLL*;;=MMBxj/2 >4  |"&**g}oU_`j_k7l-m"nPR_akvz{{| !%		o =6}mUbkvwLL*;;=MMBxj/2 >6 % "I"/"/&7!(D"!=!C.%)*:%;# #2OO$89  !   q$:=/ZL"YE}V`koppq !%		o =6}mUbkz{LL*;;=MMBxj/2 >" % 7"/"/&7!(D"!=!C.%)*:%;OO$89  !   q$:=/ZL"YE}V`koppq@  TH(SST  I >vhGHHI  I >vhGHHIN  MCVLLMsm  AAPAAP$-AP40AQ-AQ3AAR"	A:AR20+AS7-AT-,AWBAZBA^*A`@A`:B,.Aa)F3!AbP	AP!P AP!P$	AP1P0AP1P4	AQQ AQQ	AQ0QAQ+Q+AQ0Q3	ARQ<ARRARR"	AR/R.AR/R2	AR?R>AR?SA(AT*T-	AU7T66AU2U,AU:U2AU7U7AU:U:A!AWW	AX(W'6AX#XAX+X#AX(X(AX+X+A!AZZ5A\[A[[A\[	A[#[ A\["A[#[#A\[.!A\\A\\A\\A\\A!A]>^3A`
^5A__A`
_	A__A`
_A__A`
_!A``A`
`	A`7`A`2`2A`7`:	Aa&aAa!a!Aa&a)	Aba2AbbAbb	Acb!Ab=b=Acc           	        ddl m} |Gt        |      }|!|j                  rt	        |j                        nd}t        |j                  |      }|D ]?  \  }	}
 |t        |
            }|	dk(  rt        | ||||d       /t        | ||||d       A t        |j                        }|dkD  r9t        |       }t        || d t        |      |	       | j                  ||       yy)
u  Execute a mixed tool-call batch as ordered parallel/sequential segments.

    ``segments`` is the ``(kind, calls)`` plan from
    ``_plan_tool_batch_segments``: maximal contiguous runs of parallel-safe
    calls execute on the concurrent path, barrier calls on the sequential
    path, strictly in the model's original call order. Because segments are
    contiguous, every tool result is still appended one-per-call in emission
    order and no call ever starts before an earlier barrier finishes —
    identical ordering and side-effect boundaries to fully-sequential
    execution, with I/O parallelism recovered inside the safe runs.

    Turn-end work (aggregate budget enforcement + /steer injection) is done
    once here for the WHOLE batch; the per-segment executor calls run with
    ``finalize=False`` so a multi-segment turn cannot multiply the budget or
    truncate a steer marker.

    Interrupt semantics: each segment executor already checks
    ``agent._interrupt_requested`` up front and appends a cancelled/skipped
    result per call, so an interrupt during segment *k* drains segments
    *k+1..n* without executing them while preserving one result per
    tool_call_id.
    r   )SimpleNamespaceN)execution_cwd)r>  parallelFr   r=  )typesr(  r   r  r   r   r>  rd   r  r&  r   r%   r   rz  )r"   r{  rF   re   r|  segmentsr(  _active_env	_exec_cwdkindcallssegment_messagetotal_toolsr~  s                 r$   execute_tool_calls_segmentedr3    s    . &$%67-8-DD)^b	,->-I-IYbc e)T%[A:)2C^
 *2C^ '223KQ(/k\]#01	

 	228[I rN   )r  r&  r3  )r   r   )r3   r   r   ztuple[dict, Optional[str]])r   zfloat | None)rF   rd   rG   rP   r   None)rH   ri  r   bool)r\   rP   r]   r1   r^   r   re   rP   r`   rP   rR   r    rS   
str | NonerT   r6  rU   r6  rV   Optional[list[dict[str, Any]]]r   r4  )rg   )rk   rP   r   rP   )r\   rP   r]   r1   re   rP   r`   rP   rq   r=   rk   rP   rT   rP   rV   r7  r   rP   )r   r   )
r\   rP   r]   r1   re   rP   r`   rP   r   z!tuple[dict, list[dict[str, Any]]])
r\   rP   r]   r1   re   rP   r`   rP   r   ztuple[Any, dict])r   )
rF   rd   re   rP   r|  r    r   r5  r   r4  )r   N)rF   rd   re   rP   r|  r    r   r4  )F__doc__
__future__r   concurrent.futuresrk  r,   pathlibr   rZ  r9   r_  r   rp   typingr   r   agent.displayr   r   rY  r	   r
  r
   rt  r   r	  r   rS  r   agent.tool_guardrailsr   agent.tool_dispatch_helpersr   r   r   r   r   r   tools.terminal_toolr   tools.thread_contextr   tools.tool_result_storager   r   tools.budget_configr   r   r   	getLogger__name__r?   r%   rf  r<   r5   rC   rI   rM   rQ   rf   rl   rr   r   r   r   r  r&  r3  __all__r   rN   r$   <module>rG     sd  
 #     	        8  = X W			8	$"   &+ "&$\\ 	\
 
\&P ! $7;    	 
               5  
 F$ #*7;  	
      5 	:.b! ! 	!
 ! ! '!6! ! 	!
 ! ! !@y
H  RV y
HzEL  RV ELT4JnrN   