+
    iHàj3€ ã            
      ó¶  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RIHtHtHtHtHtHtH t!H"t" ^ RI#H$t$ ^ RI%H&t&H't' ^ R	I(H)t) ^ R
I*H+t, ^ RI-H.t. ^ RI/H0t1 ^ RI2H3t3H4t4H5t5H6t6H7t7 ^ RI8H9t9 ^ RI:H;t;H<t<H=t=H>t>H?t?H@t@HAtAHBtB ^ RICHDtD ^ RIEHFtF ^ RIGHHtHHItIHJtJ ^ RIKHLtLHMtMHNtN ^ RIOHPtPHQtQ RtR]	P¦                  ! ]T4      tU])tVR R ltWR R ltXR R ltYR R ltZ^t[^t\Rt]Rt^R t_R! R" lt` ! R# R$]a4      tbR% R& ltcR' R( ltdR) R* lteR+ R, ltfR- R. ltgR/ thR0 R1 lti]6tj] ! R2 R34      4       tkR4RR5RR6RR7R8/R9 R: lltlR; R< ltmR= R> ltnR?R@/RA RB llto] ! RC RD4      4       tpR?R@/RE RF lltq] ! RG RH4      4       tr ! RI RJ]s4      tt ! RK RL]s4      tu ! RM RN4      tv]Pî                  RO 4       tx]y! 4       tzRP]z/RQ RR llt{RS RT lt|RUt}]}R3RV RW llt~RX RY ltRZt€R[]$EP                  ! R\4       R]2t‚R^ R_ ltƒR` Ra lt„Rb Rc lt…RdRReRRfRRgRRhR/Ri Rj llt†Rkt‡Rl Rm ltˆ]‰! RnRo04      tŠRp Rq lt‹Rr Rs ltŒRdRReRRfR/Rt Ru llt�Rv Rw ltŽRx Ry lt�Rz R{ lt�R|R@R}]‰! 4       R~R R€RR�R‚ /Rƒ R„ llt‘R… R† lt’R‡ Rˆ lt“R‰ RŠ lt”R‹ RŒ lt•R� RŽ lt–] ! R� R�4      4       t—R‘ R’ lt˜ ! R“ R”4      t™ ! R• R–4      tš ! R— R˜4      t›R™ Rš ltœR› Rœ lt�RºR�R8/Rž RŸ llltžR R8R¡R/R¢ R£ lltŸR¤ R¥ lt R¦ R§ lt¡] ! R¨ R©4      4       t¢Rª R« lt£R¬ R­ lt¤R® R¯ lt¥R° R± lt¦R² R³ lt§RºR�R8/R´ Rµ lllt¨RºR�R8/R¶ R· lllt©R»R¸ R¹ lltª. R¼Ot«R# )½u¥  Tool-call execution: sequential and concurrent dispatch, extracted from AIAgent.

Functions take the parent ``AIAgent`` first; ``run_agent`` keeps thin wrappers and is
reached lazily via ``_ra()`` so ``run_agent._set_interrupt`` patches still work. Every
call's identity travels as a ``_ToolCallRef``; both executors end in the same
observe â†’ commit â†’ project pipeline so the tool-result wire shape is produced once.
)ÚannotationsN)ÚPath)Ú	dataclass)ÚAnyÚCallableÚOptional)ÚKawaiiSpinnerÚbuild_tool_previewÚbuild_tool_labelÚget_cute_tool_messageÚget_tool_emojiÚtool_row_emojiÚredact_tool_args_for_displayÚ_detect_tool_failure)Ú_COMPRESSION_MARKER_PREFIX)Ú_REASON_USER_INTERRUPTÚinterrupt_skip_wording)Úcoalesce_tool_call_id)Úobserve_tool_result)Úplugin_live_notes)Údeferred)ÚINLINE_TOOL_EXECUTORSÚInlineToolContextÚapply_transform_tool_resultÚemit_terminal_post_tool_callÚtool_hook_ids)Ústamp_data_use)Ú_NEVER_PARALLEL_TOOLSÚ_is_destructive_commandÚ_is_multimodal_tool_resultÚ_multimodal_text_summaryÚ!_append_subdir_hint_to_multimodalÚ_context_pruned_argument_pathsÚ_plan_tool_batch_segmentsÚmake_tool_result_message)Úget_active_env)Úpropagate_context_to_thread)Úmaybe_persist_tool_resultÚenforce_turn_budgetÚextract_persisted_path)ÚBudgetConfigÚDEFAULT_BUDGETÚbudget_for_context_window)Únote_tool_resultÚrecord_tool_batchi@B c               ó    € V ^8„  d   QhRRRR/# )é   Ú	tool_callr   ÚreturnÚstr© )Úformats   "Ú8/home/ubuntu/.hermes/hermes-agent/agent/tool_executor.pyÚ__annotate__r7   N   s   € ÷ Oñ O˜ð O ñ Oó    c                óF   € \        \        V R R4      RR4      ;'       g    R# )ÚfunctionNÚnameÚ Útool©Úgetattr)r1   s   &r6   Ú_tc_namer@   N   s"   € Ü”7˜9 j°$Ó7¸ÀÓD×NÐNÈÐNr8   c               ó    € V ^8„  d   QhRRRR/# )r0   Útool_call_idr3   r2   ÚNoner4   )r5   s   "r6   r7   r7   R   s   € ÷ Nñ N¸ð NÐRVñ Nr8   c                ó²  €  \        V\        4      '       d   V.MF\        V4      '       d5   VP                  R4      .R VP                  R4      ;'       g    .  4       OM. p\	        R \        \        V4       4       R4      pV'       d   V P                  P                  W4       R# R#   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)z[Record the spillover file path so a later result-reference stub can't dangle (best-effort).Útext_summaryc              3  ót   "  € T F.  p\        V\        4      '       g   K  VP                  R 4      x € K0  	  R# 5i)ÚtextN)Ú
isinstanceÚdictÚget©Ú.0Úps   & r6   Ú	<genexpr>Ú2_record_persisted_path_for_stub.<locals>.<genexpr>W   s)   é € ÐaÑ%I ÌZÐXYÔ[_×M`Œmˆa�e‰e�F�mˆmÓ%Iùs   ‚8Ÿ8Úcontentc              3  ó8   "  € T F  q'       g   K  Vx € K  	  R # 5i©Nr4   rK   s   & r6   rN   rO   Y   s   é € ÐMÑ G˜1Ë1—Q’QÓ Gùs   ‚	�
Nz0persisted-path record for result stub failed: %s)rH   r3   r   rJ   ÚnextÚmapr)   Ú_tool_guardrailsÚrecord_persisted_resultÚ	ExceptionÚloggerÚdebug)ÚagentrB   Úfunction_resultÚ
candidatesÚpathÚexcs   &&&   r6   Ú_record_persisted_path_for_stubr_   R   sÈ   € ð	NÜ*4°_Äc×*JÒ*J�oÑ&ô (¨×8Ò8ð ×Ñ Ó/ðQ
áa _×%8Ñ%8¸Ó%C×%IÐ%IÀrÐ%IÓañQ
ð ?Að 	ô ÑM¤Ô$:¸JÔ GÓMÈtÓTˆßØ×"Ñ"×:Ñ:¸<ÖNñ øäô NÜ�‰ÐGÈ×MÒMûðNús   ‚AB* ÁAB* Â*CÂ5CÃCc               ó(   € V ^8„  d   QhRRRRRRRR/# )r0   Úfunction_namer3   Úfunction_argsrI   Úeffective_task_idr2   rC   r4   )r5   s   "r6   r7   r7   `   s*   € ÷ ñ °#ð Àdð Ð_bð Ðgkñ r8   c                óL  € VP                  RR4      pV'       g   R# ^ RIHp ^ RIHpHp T! T;'       g    R4      e   R# V! V4      '       d   R# T! YC;'       g    R4      pV P                  P                  V P                  P                  \        V4      4      RV 24       R# )z®Checkpoint the same workspace path that the file tool will mutate, resolved the way
file tools do (against the task's live cwd, which differs from the process cwd in Docker).r]   r<   N)Úis_nt_namespace_path)Ú_resolve_path_for_taskÚcontainer_backend_for_taskÚdefaultzbefore )
rJ   Úagent.file_safetyre   Útools.file_tools_pathsrf   rg   Ú_checkpoint_mgrÚensure_checkpointÚget_working_dir_for_pathr3   )	rZ   ra   rb   rc   Ú	file_pathre   rf   rg   Úresolved_paths	   &&&&     r6   Ú_ensure_file_checkpointrp   `   s“   € ð ×!Ñ! &¨"Ó-€IßÙÝ6ßYá!Ð"3×"@Ð"@°yÓAÒMÙñ ˜I×&Ò&ÙÙ*¨9×6TÐ6TÈ9ÓU€MØ	×Ñ×+Ñ+Ø×Ñ×6Ñ6´s¸=Ó7IÓJÈgÐVcÐUdÐLeör8   c               ó   € V ^8„  d   QhRR/# )r0   r2   r*   r4   )r5   s   "r6   r7   r7   v   ó   € ÷ ñ  ñ r8   c                ó¦   €  \        \        V RR4      RR4      p\        V'       d   \        V4      4      # R4      #   \         d
    \        u # i ; i)a  Tool-result BudgetConfig scaled to the agent's context window. Unknown length goes
through ``budget_for_context_window(None)`` (not DEFAULT_BUDGET) so the MCP threshold
override still applies.

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)r?   r,   ÚintrW   r+   )rZ   Úctxs   & r6   Ú_budget_for_agentrx   v   sO   € ðÜ”g˜eÐ%9¸4Ó@ÐBRÐTXÓYˆÜ(·S¬¨S«ÓCÐC¸dÓCÐCøÜô ÜÒðús   ‚3< ¶< ¼AÁAg     @z@g      ^@g     €v@c               ó   € V ^8„  d   QhRR/# ©r0   r2   Úfloatr4   )r5   s   "r6   r7   r7   �   s   € ÷ 2ñ 2¨%ñ 2r8   c                 óL   €  ^ RI Hp  V ! 4       #   \         d
    \        u # i ; i)uK  Authorization-lock bound = ``tools.approval_human_wait.human_wait_ceiling`` (approval timeout +
margin, capped so it can't overflow Lock.acquire): never break serialization while a
prompt is answerable, never let a wedged holder park workers forever. Deliberately NOT
min()'d with the fallback so the gate never gives up early.

Delegates to ``tools.approval_human_wait.human_wait_ceiling`` â€” the same bound that clamps a human-wait window's
deadline contribution â€” so the two can't drift. Long enough that serialization is never broken while a
legitimate approval prompt is still answerable; short enough that a wedged holder (hanging
``pre_tool_call`` plugin, dead approval client) cannot park other workers forever (#79719). Resolved
once per gate (per batch), so a mid-process ``approvals.timeout`` change applies from the next batch.
©Úhuman_wait_ceiling)Útools.approval_human_waitr~   rW   Ú"_AUTHORIZATION_GATE_LOCK_TIMEOUT_Sr}   s    r6   Ú _authorization_gate_lock_timeoutr�   �   s*   € ð
2Ý@ñ "Ó#Ð#øÜô 2Ü1Ò1ð2ús   ‚ �#¢#c                  ó   € ] tR t^©tRtRtR# )Ú_BatchAbandonedzŸRaised inside a worker when the batch was abandoned before dispatch; a BaseException
so ``except Exception`` handlers in the middleware chain can't swallow it.r4   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r4   r8   r6   rƒ   rƒ   ©   s   † õRr8   rƒ   c               ó    € V ^8„  d   QhRRRR/# )r0   Úraw_argumentsr   r2   ztuple[dict, Optional[str]]r4   )r5   s   "r6   r7   r7   ®   s   € ÷ ñ ¨ð Ð1Kñ r8   c                óæ   €  \         P                  ! V 4      p\	        V\
        4      '       d   VR3# / \         P                  ! RRRR/RR7      3#   \         P                  \        3 d    Rp LWi ; i)zAParse model-emitted arguments without repairing or coercing them.NÚerrorzInvalid tool argumentsÚmessagezBTool arguments must be a valid JSON object; tool was not executed.F©Úensure_ascii)ÚjsonÚloadsÚJSONDecodeErrorÚ	TypeErrorrH   rI   Údumps)rŒ   Ú	argumentss   & r6   Ú_parse_tool_argumentsr˜   ®   sx   € ðÜ—J’J˜}Ó-ˆ	ô �)œT×"Ò"Ø˜$ˆÐØŒt�zŠzØ	Ð*¨IÐ7{Ð|Øôð ð øô	 × Ñ ¤)Ð,ô ØŠ	ðús   ‚A ÁA0Á/A0c               ó   € V ^8„  d   QhRR/# ©r0   r2   úfloat | Noner4   )r5   s   "r6   r7   r7   ¼   s   € ÷ 	ñ 	¨,ñ 	r8   c                 ó,   € ^ RI Hp  V ! R\        RR7      # )zœPer-batch concurrent deadline: ``timeouts.tools.concurrent_batch`` wins,
``HERMES_CONCURRENT_TOOL_TIMEOUT_S`` is the legacy bridge, ``0``/negative disables.©Úresolve_timeoutztools.concurrent_batchÚ HERMES_CONCURRENT_TOOL_TIMEOUT_S)rh   Úenv_var)Úagent.deadlinerž   Ú"_DEFAULT_CONCURRENT_TOOL_TIMEOUT_Sr�   s    r6   Ú _resolve_concurrent_tool_timeoutr£   ¼   s   € õ /áØ Ü2Ø2ôð r8   c               ó$   € V ^8„  d   QhRRRRRR/# )r0   ÚmessagesÚlistÚstager3   r2   Úboolr4   )r5   s   "r6   r7   r7   È   s"   € ÷ ñ ¸4ð È3ð ÐSWñ r8   c               óB  € ^ RI Hp ^ RIHp V! W4       V! W4        V P	                  V4      RJpV'       g   RV n        \        V RR4      f   RV n        V#   \         d<   pRT n        ^ RI	H
p T! T4      T n        \        P                  R	Y&4        Rp?R# Rp?ii ; i)
z›Flush tool-call progress to the session DB before projecting it to any UI: tool side
effects can kill/restart the process before turn-end persistence runs.)Ú_maybe_inject_run_budget_wrapup)Ú&_maybe_inject_iteration_budget_warningFTÚ_last_persistence_error_causeNÚunknown)Úclassify_persistence_errorz5Incremental tool-call persistence failed after %s: %s)Úagent.conversation_looprª   Úagent.turn_iteration_prepr«   Ú_flush_messages_to_session_dbÚ_incremental_persistence_failedr?   r¬   rW   Úhermes_stater®   rX   Úwarning)rZ   r¥   r§   rª   r«   Ú	persistedr^   r®   s   &&$     r6   Ú%_flush_session_db_after_tool_progressr¶   È   s›   € õ HÝPñ $ EÔ4Ù*¨5Ô;ðØ×7Ñ7¸ÓAÈÐNˆ	ßØ48ˆEÔ1ä�uÐ=¸tÓDÒLØ6?�Ô3ØÐøÜô Ø04ˆÔ-Ý;Ù.HÈÓ.MˆÔ+Ü�‰ÐNÐPUÔ[Ýûðús   ž9A ÁBÁ#0BÂBc               ó   € V ^8„  d   QhRR/# ©r0   r2   rv   r4   )r5   s   "r6   r7   r7   â   s   € ÷ 1ñ 1¨ñ 1r8   c                 ó‚  €  ^ RI Hp  V ! 4       ;'       g    / p\        V\        4      '       d   VP	                  R4      MRp\        V\        4      '       d   VP	                  R4      MRp \        V4      p\        ^\        V\        4      4      #   \
         d    Rp L5i ; i  \        \        3 d
    \        p LFi ; i)z[Configured image-generation parallelism cap (conservative: backend bursts hit rate limits).)Úload_configÚ	image_genNÚmax_parallel_requests)Úhermes_cli.configrº   rH   rI   rJ   rW   rv   r•   Ú
ValueErrorÚ _DEFAULT_IMAGE_PARALLEL_REQUESTSÚmaxÚminÚ_MAX_TOOL_WORKERS)rº   Úcfgr»   ÚvalueÚlimits        r6   Ú_image_generate_parallel_limitrÆ   â   s©   € ðÝ1á‹m×!Ð!˜rˆÜ,6°s¼D×,AÒ,A�C—G‘G˜KÔ(Àtˆ	Ü:DÀYÔPT×:UÒ:U�	—‘Ð5Ô6Ð[_ˆð1Ü�E“
ˆô ˆq”#�eÔ.Ó/Ó0Ð0øô ô ØŠðûô
 ”zÐ"ô 1Ü0Šð1ús)   ‚B –AB Á,B$ ÂB!Â B!Â$B>Â=B>c               ó   € V ^8„  d   QhRR/# r¸   r4   )r5   s   "r6   r7   r7   ô   s   € ÷ 1ñ 1°3ñ 1r8   c                óè   € V '       g   ^ # \         p\        ;QJ d    R V  4       F  '       g   K   RM	  RM! R V  4       4      '       d   \        V\        4       4      p\        \	        V 4      V4      # )z2Return the worker cap for a concurrent tool batch.c              3  ó^   "  € T F#  p\        V4      ^8¼  d
   V^,          MRR8H  x € K%  	  R# 5i)é   NÚimage_generate©Úlen)rL   Úcalls   & r6   rN   Ú._max_workers_for_tool_batch.<locals>.<genexpr>ù   s(   é € Ð
`ÑQ_È”s˜4“y A”~ˆD�ŽG¨4Ð4DÖDÓQ_ùs   ‚+-TF)rÂ   ÚanyrÁ   rÆ   rÍ   )Úrunnable_callsÚmax_workerss   & r6   Ú_max_workers_for_tool_batchrÓ   ô   sR   € çÙÜ#€Kß
ƒsÑ
`ÑQ_Ó
`‡s‡s‚sÑ
`ÑQ_Ó
`×`Ò`Ü˜+Ô'EÓ'GÓHˆÜŒs�>Ó" KÓ0Ð0r8   c                 ó   € ^ RI p V # )zRLazy reference to ``run_agent`` so patches like ``run_agent._set_interrupt`` work.N©Ú	run_agentrÕ   s    r6   Ú_rar×   þ   s   € ãØÐr8   c               ó    € V ^8„  d   QhRRRR/# )r0   r^   ÚRuntimeErrorr2   r¨   r4   )r5   s   "r6   r7   r7     s   € ÷ 	*ñ 	*¨|ð 	*Àñ 	*r8   c                ó   € ^ RI Hp V! V 4      # )a1  Shutdown-race predicate; ``tools.interpreter_shutdown`` knows both CPython message variants.

Delegates so all sites (cron delivery, conversation-loop retry, tool submission) recognize both CPython
shutdown-message variants instead of each matching its own substring (the bug class behind
#55924/#58720).
)Úinterpreter_shutting_down)Útools.interpreter_shutdownrÛ   )r^   rÛ   s   & r6   Ú%_is_interpreter_shutdown_submit_errorrÝ     s   € õ Eá$ SÓ)Ð)r8   c                  ó†   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R	]R
&   R R ltR
R/R R lltR R ltR R lt	Rt
R# )Ú_ToolCallRefi  z¤Identity of one tool call as every hook / result message sees it: the (possibly
middleware-rewritten) name and args, the task, the pairing id and the request trace.r3   r;   rI   ÚargsÚtask_idÚcall_idr¦   Útracec               ó   € V ^8„  d   QhRR/# )r0   r2   údict[str, Any]r4   )r5   s   "r6   r7   Ú_ToolCallRef.__annotate__  s   € ÷ 
ñ 
 >ñ 
r8   c           
     ó~   € RV P                   RV P                  RV P                  RV P                  RV P                  /# )zUKeyword form ``_run_agent_tool_execution_middleware`` (and tests patching it) expect.ra   rb   rc   rB   Úmiddleware_trace)r;   rà   rá   râ   rã   ©Úselfs   &r6   Úmiddleware_kwargsÚ_ToolCallRef.middleware_kwargs  s=   € ð ˜TŸY™Y¨¸¿¹ÐDWÐY]×YeÑYeØ˜DŸL™LÐ*<¸d¿j¹jð
ð 	
r8   Nc               ó   € V ^8„  d   QhRR/# ©r0   r2   rC   r4   )r5   s   "r6   r7   ræ   %  s   € ÷ 
ñ 
ÀDñ 
r8   c               ó¸   € \        V3RV P                  RV P                  RTRV P                  RV P                  R\        Vf   V P                  MT4      /VB  R# )zäEmit the one terminal ``post_tool_call`` for this call (``outcome`` = status /
error_type / error_message / duration_ms). Resolved through the module attribute so
tests patching ``_emit_terminal_post_tool_call`` still intercept.ra   rb   Úresultrc   rB   rè   N)Ú_emit_terminal_post_tool_callr;   rà   rá   râ   r¦   rã   )rê   rZ   rð   rã   Úoutcomes   &&&$,r6   Ú	emit_postÚ_ToolCallRef.emit_post%  sr   € ô 	&Øñ		
àŸ)™)ð		
ð Ÿ)™)ð		
ð ð			
ð
 #Ÿl™lð		
ð Ÿ™ð		
ô "°² $§*¢*À5ÓIð		
ð ô		
r8   c               ó    € V ^8„  d   QhRRRR/# )r0   Ú
start_timer{   r2   r3   r4   )r5   s   "r6   r7   ræ   4  s   € ÷ ñ °ð ¸#ñ r8   c           	     óÚ   € R\        V4       2p\        P                  ! RVRR/RR7      pV P                  W\	        \
        P
                  ! 4       V,
          R,          4      RRVR	7       V# )
zWSynthesize the ``cancelled`` result for a KeyboardInterrupt mid-tool and emit its hook.úTool execution cancelled. rŽ   ÚstatusÚ	cancelledFr�   éè  Úkeyboard_interrupt©Úduration_msrù   Ú
error_typeÚerror_message)r   r’   r–   ró   rv   Útime)rê   rZ   rö   r�   rð   s   &&&  r6   Úemit_cancelledÚ_ToolCallRef.emit_cancelled4  si   € à.Ô/EÀeÓ/LÐ.MÐNˆÜ—’˜W g¨x¸ÐEÐTYÔZˆØ�‰Ø¤s¬D¯IªI«K¸*Õ,DÈÕ+LÓ'MØÐ+?Èwð 	ô 	
ð ˆr8   c               ó    € V ^8„  d   QhRRRR/# )r0   rð   r3   r2   rC   r4   )r5   s   "r6   r7   ræ   >  s   € ÷ 
ñ 
°Cð 
¸Dñ 
r8   c           	     	ó2   € V P                  W. R RRR7       R# )rŽ   Úinvalid_tool_argumentsz*Tool arguments must be a valid JSON object)rã   rù   rÿ   r   N)ró   )rê   rZ   rð   s   &&&r6   Úemit_invalid_argumentsÚ#_ToolCallRef.emit_invalid_arguments>  s!   € Ø�‰Ø ØÐ'?ÐO{ð 	ö 	
r8   r4   )r…   r†   r‡   rˆ   r‰   Ú__annotations__rë   ró   r  r  rŠ   r4   r8   r6   rß   rß     sC   ‡ ñ\ð ƒIØ
ƒJØƒLØƒLØƒKõ
ð
°÷ 
õ÷
ñ 
r8   rß   Úhook_error_typeÚhook_idÚflush_stageÚstop_on_flush_failureTc               ó8   € V ^8„  d   QhRRRRRRRRRR	R
RRRRR/# )r0   r¥   r¦   rc   r3   rP   r
  úOptional[str]r  zOptional[Callable[[Any], str]]r  r  r¨   r2   r4   )r5   s   "r6   r7   r7   E  sZ   € ÷ ñ àðð ð	ð ðð #ðð ,ðð ðð  ðð 
ñr8   c               ó‚  € V F¸  p	\        V	4      p
VP                  RV
4      pVP                  \        W«\	        V	4      RR7      4       VeB   \        T
/ Y6;'       g    \        ! V	4      . 4      P                  WRVR\        V 4       2R7       Vf   K‘  \        WV RV
 2R7      pV'       d   K­  V'       g   K·   R	# 	  R
# )aö  Append one ``tool`` result per unstarted call so the assistant tool-call turn never
lacks matching results (role alternation). ``{name}`` in ``content`` is substituted with
``str.replace``, never ``str.format`` (a recorded reason may contain braces);
``hook_error_type`` also emits the terminal ``post_tool_call`` (status=cancelled) per
call with ``hook_id`` overriding the hook's id; ``flush_stage`` flushes after each
append and returns False on the first failed flush when ``stop_on_flush_failure``.z{name}Únone©Úeffect_dispositionrú   zTool execution skipped. ©rù   rÿ   r   Ú ©r§   FT)	r@   ÚreplaceÚappendr$   Ú_pairing_tool_call_idrß   ró   r   r¶   )rZ   r¥   Ú
tool_callsrc   rP   r
  r  r  r  Útcr;   rð   Úflusheds   &&&&$$$$$    r6   Ú_append_skipped_tool_resultsr  E  sß   € ó$ ˆÜ˜‹|ˆØ—‘ ¨4Ó0ˆØ�‰Ô0°Ô?TÐUWÓ?XÐmsÔtÔuØÒ&Ü˜˜rÐ#4×7WÐ7WÔBWÐ7WÐY[Ó6\Ð^`Óa×kÑkØØ"¨ÐPhÔið  AFó  jGð  iHð  OIð lô ð Ô"Ü;¸EÐVaÐUbÐbcÐdhÐciÐSjÔkˆGß‘7×4Ñ4Úñ ñ r8   c               ó   € V ^8„  d   QhRR/# )r0   r2   Ú	frozensetr4   )r5   s   "r6   r7   r7   g  s   € ÷ ñ ¨	ñ r8   c           	     ó|  €  ^ RI p^ RIHp ^ RIHp \        T RR4      p\        T RR4      pTP                  4       \        TR^ 4      Te   \        T4      MRTe   \        T4      MR3p\        T RR4      pTe   T^ ,          T8X  d
   T^,          #  TP                  TP                  YERRR	7      ;'       g    . 4      p\        P                  ! \
        4      ;_uu_ 4        Yh3T n        RRR4       T#   \
         d    \        4       u # i ; i  \
         d    \        4       p Lgi ; i  + '       g   i     T# ; i)
a   Deferrable tool names the session may invoke via ``tool_call``; the unwrap bypasses
the bridge's scope check in ``model_tools.handle_function_call``, so restricted sessions
validate against this set. Cached on the agent, keyed by registry scope/generation.N©Útool_search)ÚregistryÚenabled_toolsetsÚdisabled_toolsetsÚ_generationÚ_tool_search_scope_cacheT)r$  r%  Ú
quiet_modeÚskip_tool_search_assembly)Úmodel_toolsÚtoolsr"  Útools.registryr#  rW   r  r?   Úcurrent_scope_keyÚscoped_deferrable_namesÚget_tool_definitionsÚ
contextlibÚsuppressr'  )	rZ   r*  Ú_tsÚ	_registryÚenabledÚdisabledÚ	cache_keyÚcachedÚnamess	   &        r6   Ú_tool_search_scoped_namesr9  g  s:  € ðÛÝ,Ý8ô �eÐ/°Ó6€GÜ�uÐ1°4Ó8€Hà×#Ñ#Ó%Ü�	˜=¨!Ó,Ø%Ò1Œ	�'Ô°tØ'Ò3Œ	�(Ô¸ð	€Iô �UÐ6¸Ó=€FØÒ˜f Q�i¨9Ô4Ø�a�yÐðØ×+Ñ+¨K×,LÑ,LØ$ÈTÐmqð -Mó -
÷ -ð -àóˆô
 
×	Ò	œY×	'Õ	'Ø*3Ð);ˆÔ&÷ 
(à€Løô- ô Ü‹{Òðûô$ ô Ü“Šðúç	'Ö	'à€Lús5   ‚C4 Â%D Â8D Ã!	D*Ã4DÄDÄD'Ä&D'Ä*D;	c               ó    € V ^8„  d   QhRRRR/# )r0   ra   r3   r2   r4   )r5   s   "r6   r7   r7   ˆ  s   € ÷ 2ñ 2¨ð 2°ñ 2r8   c                ó0   € ^ RI Hp VP                  W 4      # )z8Map legacy tool-name aliases BEFORE agent-loop dispatch.)Ú_LEGACY_TOOL_ALIASES)r*  r<  rJ   )ra   Ú_ltas   & r6   Ú_canonical_tool_namer>  ˆ  s   € å8à�8‰8�MÓ1Ð1r8   Úflatten_probeFc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   ra   r3   rb   rI   r?  r¨   r2   ztuple[str, dict, Optional[str]]r4   )r5   s   "r6   r7   r7   �  s,   € ÷ +5ñ +5Øð+5Ø.2ð+5ØFJð+5à$ñ+5r8   c               óN  € Rp ^ RI Hp WP                  8w  d   WR3# VP                  V4      w  rgpV'       g	   V'       g   WR3# WeP                  8X  d   WR3# V\        V 4      9  d   WVP                  V4      3# VP                  Wg4      pVf   WgR3# V'       du   \        P                  ! V4      p	V	P                  RR4       R\        P                  ! V	P                  R/ 4      RR7       R	V	P                  R
R4       2P                  4       pYT3#   \         d     Li ; i)a`  Peel the ``tool_call`` bridge so downstream hooks (checkpointing, guardrails, plugin
hooks, activity feed) see the underlying tool; ``tool_call.function`` stays untouched for
the transcript and tool_call_id pairing.

The unwrap bypasses handle_function_call's scope check, so session toolset scope is
enforced HERE. Returns ``(name, args, scope_block)``; ``scope_block`` is the block
message when the underlying tool is out of scope or its args fail the deferred-schema
probe (``flatten_probe`` collapses the probe's JSON payload to one plain string for
callers that wrap the message in ``{"error": ...}``).
Nr!  rŽ   r<   z Parameters schema: Ú
parametersFr�   z. Úhint)r+  r"  ÚTOOL_CALL_NAMEÚresolve_underlying_callÚCONNECTOR_BATCH_SENTINELr9  Úscope_block_reasonÚvalidate_deferred_call_argsr’   r“   rJ   r–   ÚstriprW   )
rZ   ra   rb   r?  Úscope_blockr2  Ú
underlyingÚunderlying_argsÚerrÚprobes
   &&&$      r6   Ú_unwrap_tool_search_callrO  �  s7  € ð "&€KðÝ,Ø×.Ñ.Ô.Ø °Ð5Ð5Ø+.×+FÑ+FÀ}Ó+UÑ(ˆ
 Sß—jØ °Ð5Ð5Ø×5Ñ5Ô5ð !°Ð5Ð5ØÔ6°uÓ=Ô=ð !°×1GÑ1GÈ
Ó1SÐSÐSð ×5Ñ5°jÓRˆØÒØ°Ð4Ð4ßÜ—J’J˜{Ó+ˆEà—9‘9˜W bÓ)Ð*Ð*>Ü—:’:˜eŸi™i¨°bÓ9ÈÔNÐOÈrØ—9‘9˜V RÓ(Ð)ð+÷ ‰e‹gð	 ð ¨Ð4Ð4øô ô Ùðús;   „D ž#D ÁD ÁD Á"D Á=D ÂD ÂA4D ÄD$Ä#D$c                  ód   € ] tR tRt$ RtR]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   R R ltRtR# )Ú_ParsedCalli½  zPOne model tool call after alias canonicalization, arg parsing and bridge unwrap.r   r1   r3   r;   rI   rà   r¦   rè   r  Úparse_errorrJ  c               ó    € V ^8„  d   QhRRRR/# )r0   rá   r3   r2   rß   r4   )r5   s   "r6   r7   Ú_ParsedCall.__annotate__È  s   € ÷ yñ y˜3ð y <ñ yr8   c                	ó‚   € \        V P                  V P                  V\        V P                  4      V P
                  4      # rR   )rß   r;   rà   r  r1   rè   )rê   rá   s   &&r6   ÚrefÚ_ParsedCall.refÈ  s1   € Ü˜DŸI™I t§y¡y°'Ô;PÐQU×Q_ÑQ_Ó;`Ðbf×bwÑbwÓxÐxr8   r4   N)r…   r†   r‡   rˆ   r‰   r	  rV  rŠ   r4   r8   r6   rQ  rQ  ½  s2   ‡ áZàƒNØ
ƒIØ
ƒJØÓØÓØÓ÷yñ yr8   rQ  c               ó    € V ^8„  d   QhRRRR/# )r0   r?  r¨   r2   rQ  r4   )r5   s   "r6   r7   r7   Ì  s   € ÷ Lñ L¸ð LÈ+ñ Lr8   c               óÊ   € \        VP                  P                  4      p\        VP                  P                  4      w  rER pVf   \        WWBR7      w  r4p\        WV. WV4      # )N©r?  )r>  r:   r;   r˜   r—   rO  rQ  )rZ   r1   r?  r;   rà   rR  rJ  s   &&$    r6   Ú_parse_tool_callr[  Ì  s^   € Ü 	× 2Ñ 2× 7Ñ 7Ó8€DÜ-¨i×.@Ñ.@×.JÑ.JÓKÑ€DØ€KØÒÜ":¸5ÈÔ"jÑˆ�KÜ�y¨¨b°+ÓKÐKr8   c                  ób   € ] tR tRt$ R]R&   R]R&   R]R&   R]R	&   R]R
&   ]! 4       tR]R&   RtR# )Ú_ManagedToolResultiÕ  r   rð   rå   rà   zlist[dict[str, Any]]rè   r¨   ÚblockedÚ
dispatchedúfrozenset[str]Údata_user4   N)r…   r†   r‡   rˆ   r	  r  ra  rŠ   r4   r8   r6   r]  r]  Õ  s*   ‡ àƒKØ
ÓØ*Ó*ØƒMØÓÙ(›{€Hˆn×*r8   r]  c                  ó   € ] tR tRtRtRtR# )Ú_ToolTimeoutResultiß  z8Marker for a synthesized sequential-tool timeout result.r4   Nr„   r4   r8   r6   rc  rc  ß  s   † ÝBr8   rc  c                  ó   € ] tR tRtRtRtR# )Ú_ToolCancelledResultiã  z¦Marker for a synthesized sequential-tool user-interrupt result; its terminal
post_tool_call was already emitted, so a late-finishing abandoned worker must not report.r4   Nr„   r4   r8   r6   re  re  ã  s   † õar8   re  c                  óP   € ] tR tRtRtRRRR/R R lltR R	 ltR
 tR R ltRt	R# )Ú _ConcurrentToolAuthorizationGateiè  u  Serialize policy prompts and exclude human approval waits from batch deadlines.

The acquire is BOUNDED: on expiry the worker prompts unserialized rather than starving
the batch behind a wedged plugin/approval client. Exclusion is measured at the SOURCE
of the human wait (``tools.approval.human_wait_seconds``), NOT as gate residency â€”
residency-based exclusion let a wedged plugin keep the deadline from ever firing.

Serialization keeps concurrent approval prompts from interleaving on the user's screen. The acquire is
BOUNDED: a worker wedged inside the gate (a hanging ``pre_tool_call`` plugin, or an approval round-trip
to a client that went away) must not park every other worker forever. On expiry the worker runs its
prompt unserialized â€” worst case is interleaved prompts, strictly better than permanent starvation (same
tradeoff as the start-order gate, #79705).
Gate residency is arbitrary code â€” using it as the exclusion signal let a wedged plugin grow the
exclusion 1:1 with wall clock, keeping the batch deadline's ``remaining`` constant so it never fired and
the turn hung forever (#79719). A wedged plugin now contributes nothing to the exclusion and the batch
times out normally, while a genuine approval wait (which can legitimately exceed any fixed bound) is
still excluded in full.
Úlock_timeoutNÚsession_keyc               ó$   € V ^8„  d   QhRRRRRR/# )r0   rh  r›   ri  ú
str | Noner2   rC   r4   )r5   s   "r6   r7   Ú-_ConcurrentToolAuthorizationGate.__annotate__ü  s'   € ÷ Añ A¨ð AÈ*ð AÐ`dñ Ar8   c               	ó,  € \         P                  ! 4       V n        Vf   \        4       MTV n        W n        V P
                  f    ^ RIHp V! 4       V n        V P                  4       V n        R #   \         d    \        P                  RRR7        L;i ; i)N)Úget_current_session_keyzkauthorization gate could not snapshot the session key; human-wait exclusion will re-resolve it at poll timeT©Úexc_info)Ú	threadingÚLockÚ_serialization_lockr�   Ú_lock_timeoutÚ_session_keyÚtools.approval_contextrn  rW   rX   rY   Ú_human_wait_secondsÚ_baseline_wait_seconds)rê   rh  ri  rn  s   &$$ r6   Ú__init__Ú)_ConcurrentToolAuthorizationGate.__init__ü  sˆ   € Ü#,§>¢>Ó#3ˆÔ ØCOÒCWÔ=Ô?Ð]iˆÔØ'ÔØ×ÑÒ$ð	ÝJá$;Ó$=�Ô!ð '+×&>Ñ&>Ó&@ˆÖ#øô ô Ü—‘ðKà!ð ö ðús   ÁA. Á."BÂBc               ó   € V ^8„  d   QhRR/# rz   r4   )r5   s   "r6   r7   rl    s   € ÷ ñ  Uñ r8   c                	óX   €  ^ RI Hp V! V P                  4      #   \         d     R# i ; i)é    )Úhuman_wait_secondsç        )r   r~  ru  rW   )rê   r~  s   & r6   rw  Ú4_ConcurrentToolAuthorizationGate._human_wait_seconds  s-   € ð	ÝDá% d×&7Ñ&7Ó8Ð8øÜô 	Úð	ús   ‚ š)¨)c                	ó*  € V P                   P                  V P                  R 7      '       g(   \        P	                  RV P                  4       V! 4       #  V! 4       V P                   P                  4        #   T P                   P                  4        i ; i)©Útimeoutz�authorization gate lock not acquired after %.1fs (holder wedged in a pre_tool_call plugin or approval round-trip?); running prompt unserialized)rs  Úacquirert  rX   r´   Úrelease©rê   Úcallbacks   &&r6   ÚrunÚ$_ConcurrentToolAuthorizationGate.run  sy   € Ø×'Ñ'×/Ñ/¸×8JÑ8JÐ/×KÒKô �N‰Nð<ð ×"Ñ"ô	ñ “:Ðð	/Ù“:à×$Ñ$×,Ñ,Õ.øˆD×$Ñ$×,Ñ,Õ.ús   ÁA6 Á6Bc               ó   € V ^8„  d   QhRR/# rz   r4   )r5   s   "r6   r7   rl  ,  s   € ÷ Rñ R %ñ Rr8   c                óX   € \        RV P                  4       V P                  ,
          4      # )zCReturn human-approval wait seconds accrued since the batch started.r  )rÀ   rw  rx  ré   s   &r6   Úexcluded_secondsÚ1_ConcurrentToolAuthorizationGate.excluded_seconds,  s#   € ä�3˜×0Ñ0Ó2°T×5PÑ5PÕPÓQÐQr8   )rx  rt  rs  ru  )
r…   r†   r‡   rˆ   r‰   ry  rw  rˆ  rŒ  rŠ   r4   r8   r6   rg  rg  è  s4   † ñð&A°tð AÐW[÷ Aõ&ò/÷*Rñ Rr8   rg  c           	   #  ó†  "  € \         P                  ! 4       P                  pV P                  ;_uu_ 4        V P                  P                  V4       RRR4        Vx € V P                  ;_uu_ 4        V P                  P                  V4       RRR4       \        P                  ! \        4      ;_uu_ 4        \        4       P                  RV4       RRR4       R#   + '       g   i     L”; i  + '       g   i     Lj; i  + '       g   i     R# ; i  T P                  ;_uu_ 4        T P                  P                  T4       RRR4       M  + '       g   i     M; i\        P                  ! \        4      ;_uu_ 4        \        4       P                  RT4       RRR4       i   + '       g   i     i ; i; i5i)z¯Track this worker tid for interrupt fan-out (``AIAgent.interrupt()``); on ANY exit
(incl. BaseException) discard it and clear its interrupt bit so a recycled tid starts clean.NF)rq  Úcurrent_threadÚidentÚ_tool_worker_threads_lockÚ_tool_worker_threadsÚaddÚdiscardr0  r1  rW   r×   Ú_set_interrupt)rZ   Útids   & r6   Ú_registered_tool_workerr—  1  s  é € ô ×
"Ò
"Ó
$×
*Ñ
*€CØ	×	(×	(Ó	(Ø×"Ñ"×&Ñ& sÔ+÷ 
)ð-ØŠ	à×,×,Ó,Ø×&Ñ&×.Ñ.¨sÔ3÷ -ä× Ò ¤×+Õ+Ü‹E× Ñ  ¨Ô,÷ ,Ñ+÷ 
)×	(ú÷
 -×,úç+×+Ð+ûð ×,×,Ó,Ø×&Ñ&×.Ñ.¨sÔ3÷ -×,×,Ð,úä× Ò ¤×+Õ+Ü‹E× Ñ  ¨Ô,÷ ,×+×+Ð+ÿs”   ‚4G¶CÁGÁD ÁGÁ3C1Â*GÂ9DÃ
GÃC.	Ã)GÃ1D	Ã<GÄD	Ä	GÄF>Ä-E	Å		F>ÅE"Å*F>ÆF+	Æ"	F>Æ+F;Æ6F>Æ>GÚreasonc               ó   € V ^8„  d   QhRR/# rî   r4   )r5   s   "r6   r7   r7   D  s   € ÷ 6ñ 6Àñ 6r8   c               óî   € V\         J d   / MRV/pV FJ  p\        P                  ! \        4      ;_uu_ 4        \	        4       P
                  ! RV3/ VB  RRR4       KL  	  R#   + '       g   i     Ka  ; i)zLRaise the interrupt bit on each worker tid (best-effort, via ``run_agent``).r˜  TN)Ú
_NO_REASONr0  r1  rW   r×   r•  )rZ   Útidsr˜  Úkwargsr–  s   &&$  r6   Ú_interrupt_worker_tidsrž  D  sY   € àœZÓ'‰R¨h¸Ð-?€FÛˆÜ× Ò ¤×+Õ+Ü‹E× Ò   sÑ5¨fÒ5÷ ,Ñ+ó ß+×+Ð+ús   ¸A#Á#A4c               ó   € V ^8„  d   QhRR/# rî   r4   )r5   s   "r6   r7   r7   L  s   € ÷ 5ñ 5¨Dñ 5r8   c                ó´   € \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! V P
                  4       RRR4       R#   + '       g   i     R# ; i)z\The activity callback is thread-local: bind it on THIS thread so tool-layer heartbeats fire.)Úset_activity_callbackN)r0  r1  rW   Útools.environments.baser¡  Ú_touch_activity)rZ   r¡  s   & r6   Ú_set_worker_activity_callbackr¤  L  s3   € ä	×	Ò	œY×	'Õ	'ÝAá˜e×3Ñ3Ô4÷ 
(×	'×	'Ò	'ús   £AÁA	g      >@c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r0   Ú
stop_eventzthreading.EventÚlabelr3   Úintervalr{   Ú
worker_tidú
int | Noner2   rC   r4   )r5   s   "r6   r7   r7   X  s<   € ÷ ñ àðð ðð ð	ð
 ðð 
ñr8   c                ó¬   € ^ RI Hp  VP                  V4      '       g$   V! V4      '       d   R# V P                  V4       K:  R#   \         d     R# i ; i)u•  Daemon thread stamping ``agent._touch_activity`` every ``interval`` seconds until
``stop_event`` is set, so the gateway inactivity watchdog never abandons a turn whose
tool runs silently. Wedged tools stay bounded by the tool layer's own timeouts and by the
executor deadline â€” but a worker the executor gave up on never reaches its ``stop_event``,
so the heartbeat also exits once ``worker_tid`` carries the interrupt bit the abandoning
executor raises (``_interrupt_worker_tids``). Otherwise a tool wedged in a kernel probe
keeps reporting "activity" for the rest of the run and the inactivity watchdog, the second
line of defense, can never fire (#111922).)Úis_thread_interruptedN)Útools.interruptr¬  Úwaitr£  rW   )rZ   r¦  r§  r¨  r©  r¬  s   &&&&& r6   Ú_run_tool_activity_heartbeatr¯  X  sP   € õ 6ðØ—/‘/ (×+Ò+Ù$ Z×0Ò0ÙØ×!Ñ! %Ö(ñ ,øô ô Úðús   ˆA ŸA ¯A ÁAÁAc               ó   € V ^8„  d   QhRR/# )r0   ra   r3   r4   )r5   s   "r6   r7   r7   r  s   € ÷ !ñ !°sñ !r8   c           	     ó”  € \         P                  ! 4       p\         P                  ! \        WRV 23R\        R\         P
                  ! 4       P                  /RRVR,           2R7      pVP                  4         V! 4       VP                  4        VP                  RR	7       #   TP                  4        TP                  RR	7       i ; i)
zFRun ``fn()`` under the activity heartbeat; covers both executor paths.ztool running: r¨  r©  Tztool-activity-hb-:Né   N)Útargetrà   r�  Údaemonr;   g       @r‚  )
rq  ÚEventÚThreadr¯  Ú#_TOOL_ACTIVITY_HEARTBEAT_INTERVAL_Sr�  r�  ÚstartÚsetÚjoin)rZ   ra   ÚfnÚstopÚthreads   &&&  r6   Ú_run_with_activity_heartbeatr¾  r  s¨   € ä�?Š?Ó€DÜ×Òô
 ,Ø˜^¨M¨?Ð;Ð<ØÔ?ÀÌy×OgÒOgÓOi×OoÑOoÐpØØ  ¨sÕ!3Ð 4Ð5ô
€Fð ‡L�L„Nð!Ù‹tà�‰Œ
Ø�‰˜CˆÕ øð 	�‰Œ
Ø�‰˜CˆÕ ús   Á:B# Â#$CÚsuspected_pruned_tool_argumentsa'  Tool was not executed because effect-capable arguments contain a Hermes context-compression artifact. Recover the exact content from its durable source or re-read it, then issue a complete new call; do not retry these arguments. To remove a marker that already landed in a file, match it by its u   âŸª:zN prefix (e.g. a terminal sed on that line) instead of quoting the full marker.c               ó(   € V ^8„  d   QhRRRRRRRR/# )r0   rV  rß   Ú
block_bodyzdict[str, Any] | NoneÚblock_error_typer3   r2   r4   )r5   s   "r6   r7   r7   ‘  s/   € ÷ ñ  \ð ÐBWð Ðknð ð  HKñ r8   c               ó   € Ve<   \         P                  ! VRR7      pY2P                  R4      ;'       g
    VR,          rvM*V P                  V4      pRp\	        VRR4      ;'       g    RpVP                  WRWgR	7       V# )
zÄSynthesize the result for a call blocked by scope/plugin/pruned-args (``block_body``, the
JSON the model sees) or by guardrail policy (``guardrail_decision``) and emit its terminal post_tool_call.NFr�   r�   rŽ   Úguardrail_blockz Tool blocked by guardrail policyr^  r  )r’   r–   rJ   Ú_guardrail_block_resultr?   ró   )rZ   rV  rÁ  rÂ  Úguardrail_decisionrð   rÿ   r   s   &&$$$   r6   Ú_blocked_tool_resultrÇ  ‘  s|   € ð ÒÜ—’˜J°UÔ;ˆØ$4·n±nÀYÓ6O×6fÐ6fÐS]Ð^eÕSf‘Mà×.Ñ.Ð/AÓBˆØ&ˆ
ÜÐ 2°I¸tÓD×jÐjÐHjˆØ‡M�M�%¨	¸j€MÔfØ€Mr8   c               ó   € V ^8„  d   QhRR/# )r0   rV  rß   r4   )r5   s   "r6   r7   r7   Ÿ  rr   r8   c           	     ó   €  ^ RI Hp V! VP                  VP                  3/ \	        WP
                  VP                  4      BR\        VP                  4      /B w  r4Y4f   VP                  3# T3#   \         d    RTP                  3u # i ; i)z‹Run ``pre_tool_call`` plugin hooks; returns ``(block_message, final_args)`` with any
hook-modified args applied. Hook failures never block.)Ú_dispatch_pre_tool_call_hooksrè   N)
Úhermes_cli.pluginsrÊ  r;   rà   r   rá   râ   r¦   rã   rW   )rZ   rV  rÊ  Ú	block_msgÚmodified_argss   &&   r6   Ú_pre_tool_blockrÎ  Ÿ  s‰   € ðÝDá#@Ø�H‰HØ�H‰Hñ$
ô ˜E§;¡;°·±Ó<ñ$
ô " #§)¡)›_ò	$
Ñ ˆ	ð Ò'<˜3Ÿ8™8ÐPÐPÀ-ÐPÐPøÜô Ø�S—X‘Xˆ~Òðús   ‚A+A1 Á.A1 Á1BÂBc               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r0   Ústater]  rV  rß   rJ  rk  Údisplay_indexrª  Úauthorization_gateú'_ConcurrentToolAuthorizationGate | Noner2   r   r4   )r5   s   "r6   r7   r7   °  sO   € ÷ H1ñ H1àðH1ð 
ðH1ð ðH1ð ðH1ð @ðH1ð 	ñH1r8   c          
     ód  a aaaa€ RR V3R lllpTRr©V	f?   Rp
V V3R lpVf   V! 4       MVP                  V4      w  p	Sn        SP                  Vn        V	f   RMRV	/pVf?   \        SP                  SP                  4      pV'       d   R\        R\
        R	V/p\        p
RpVfE   S P                  P                  SP                  SP                  4      pVP                  '       d   RpVf   Ve   V! 4        R
Vn	        \        S SWÊVR7      # SP                  R8X  d	   ^ S n        MSP                  R8X  d   ^ S n        ^ RIHp V! S4       V! V VV3R l4       ^ RIHp ^ RIHp V! S P&                  SP                  SP(                  4      ;_uu_ 4        V! 4       ;_uu_ 4       p \+        S SP                  VV3R l4      \-        V4      Vn        uuRRR4       uuRRR4       #   \-        T4      Tn        i ; i  + '       g   i     M; iRRR4       R#   + '       g   i     R# ; i)ui  Hermes policy (scope â†’ plugin pre-hooks â†’ pruned-arg check â†’ guardrails) then the one real dispatch.

Plugin ``modify`` hooks may rewrite ``ref.args`` (mirrored into ``state.args``).
``begin_execution`` (concurrent start-order gate) is advanced exactly once on every
path so later-ordered workers keep moving; blocked calls advance it without a callback.
Nc               ó   € V ^8„  d   QhRR/# rî   r4   )r5   s   "r6   r7   Ú/_dispatch_authorized_once.<locals>.__annotate__Á  s   € ÷ ñ ¨tñ r8   c                ó>   <€ Se   S! V 4       R # V e
   V ! 4        R # R # rR   r4   )r‡  Úbegin_executions   &€r6   Ú_advance_start_orderÚ7_dispatch_authorized_once.<locals>._advance_start_orderÁ  s!   ø€ ØÒ&Ù˜HÖ%ØÒ!ÙŽJñ "r8   Útool_scope_blockÚplugin_blockc                 ó   <€ \        S S4      # rR   )rÎ  )rZ   rV  s   €€r6   Ú<lambda>Ú+_dispatch_authorized_once.<locals>.<lambda>Ê  s   ø€ œ/¨%°Ô5r8   rŽ   r�   Úargument_pathsT)rÁ  rÂ  rÆ  ÚmemoryÚskill_manage)Úprepare_current_terminalc                 ó   <€ \        S SS4      # rR   )Ú_begin_tool_execution)rZ   rÑ  rV  s   €€€r6   rÞ  rß  ñ  s   ø€ Ô!6°u¸cÀ=Ô!Qr8   )Úbound_tool_progress)Úcollect_data_usec                 ó(   <€ S ! SP                   4      # rR   )rà   )ÚexecuterV  s   €€r6   rÞ  rß  ö  s   ø€ ÉÐQT×QYÑQYÔIZr8   rR   )rˆ  rà   r"   r;   Ú_PRUNED_TOOL_ARGUMENTS_ERRORÚ_PRUNED_TOOL_ARGUMENTS_MESSAGErU   Úbefore_callÚallows_executionr^  rÇ  Ú_turns_since_memoryÚ_iters_since_skillÚagent.terminal_approval_batchrã  Úagent.tool_progress_relayræ  Útools.connectors.data_userç  Útool_progress_callbackrâ   r¾  r  ra  )rZ   rÐ  rV  ré  rJ  rÑ  rØ  rÒ  rÙ  Úblock_messagerÂ  ÚresolverÁ  Úpruned_pathsrÆ  rã  ræ  rç  ra  s   f&fd$dd$           r6   Ú_dispatch_authorized_oncer÷  °  sÝ  ü€ ÷"ò ð '2Ð3EÐ#ØÒØ)ÐÝ5ˆØ/AÒ/I¡'¤)ÐOa×OeÑOeÐfmÓOnÑˆ�s”xØ—X‘XˆŒ
Ø&Ò.‘°W¸mÐ4L€Jð
 ÒÜ5°c·h±hÀÇÁÓIˆßàÔ5ØÔ9Ø  ,ðˆJô
  <ÐàÐØÒØ"×3Ñ3×?Ñ?ÀÇÁÈ#Ï(É(ÓSÐØ×.×.Ð.Ø!%ÐàÒÐ!3Ò!?ÙÔØˆŒÜ#Ø�3Ø!ÐYkô
ð 	
ð
 ‡x�x�8ÔØ$%ˆÕ!Ø	�‰�^Ô	#Ø#$ˆÔ åFÙ˜SÔ!ÙÖQÔRÝ=Ý:Ù	˜U×9Ñ9¸3¿8¹8ÀSÇ[Á[×	QÕ	QÑSc×SeÔSeÐiqð	1Ü/°°s·x±xÕAZÓ[ä& xÓ0ˆEŒN÷	 TfÑSe×	QÒ	Qøô ' xÓ0ˆE�Nú÷	 Tf×Seú×	Q×	Q×	QÒ	Qús<   ÆHÆ*H	Æ,G,ÇH	Ç
HÇ,G>Ç>H	ÈHÈHÈH/	rJ  rÑ  rè   rØ  rÒ  c               ó<   € V ^8„  d   QhRRRRRRRRRRR	R
RRRRRR/	# )r0   ra   r3   rb   rI   rc   rB   rJ  rk  rÑ  rª  rè   úlist[dict[str, Any]] | NonerÒ  rÓ  r2   r]  r4   )r5   s   "r6   r7   r7   û  sr   € ÷ Mñ Mð ðMð ð	Mð
 ðMð ðMð ðMð ðMð 2ðMð @ðMð ñMr8   c       
        ó  a aaaaaaaa	a
aaaaaa€ ^ RI Hp ^ RIHoHo Ve   TM. o\        RSSRRR7      o\        P                  ! 4       oR V V
V	VVVVVVVVV3R llo^ RIH	p V! S4      oR	 VV VVVVVVV3	R
 llpTP                  SST\        \        S RR4      ;'       g    R4      S;'       g    RRS;'       g    RR\        S RR4      ;'       g    RR\        S RR4      ;'       g    RRS;'       g    R/R7      w  Sn        pS# )zBRun Relay rewrites before Hermes policy and dispatch exactly once.)Úrelay_tools)Úapply_tool_request_middlewareÚrun_tool_execution_middlewareNF©rð   rà   rè   r^  r_  c               ó    € V ^8„  d   QhRRRR/# )r0   Ú
final_argsrå   r2   r   r4   )r5   s   "r6   r7   Ú:_run_agent_tool_execution_middleware.<locals>.__annotate__  s   € ÷ 
ñ 
¨ð 
¸Cñ 
r8   c                óô   <€ S;_uu_ 4        S
P                   '       d   \        R 4      hRS
n         RS
n        V S
n        RRR4       \	        SS
\        SV SSS4      SS	SSSR7      #   + '       g   i     L0; i)z5Hermes tool execution callback invoked more than onceTFN)ré  rJ  rÑ  rØ  rÒ  )r_  rÙ   r^  rà   r÷  rß   )r   rZ   rÒ  rØ  Údispatch_lockrÑ  rc   ré  ra   rJ  rÐ  rB   rã   s   &€€€€€€€€€€€€r6   Ú_authorized_dispatchÚB_run_agent_tool_execution_middleware.<locals>._authorized_dispatch  sy   ø€ ßŠ]Ø××ÐÜ"Ð#ZÓ[Ð[Ø#ˆEÔØ!ˆEŒMØ#ˆEŒJ÷ ô )ØØÜ˜¨
Ð4EÀ|ÐUZÓ[ØØ#Ø'Ø+Ø1ô	
ð 		
÷ �]ús   Œ3A'Á'A7	)Úbind_prepared_dispatchc               ó    € V ^8„  d   QhRRRR/# )r0   Ú
relay_argsrå   r2   r   r4   )r5   s   "r6   r7   r  )  s   € ÷ 
ñ 
 ^ð 
¸ñ 
r8   c           	     ó   <	a€ S! SV 3R R/\        SSS
4      B p\        VP                  \        4      '       d   VP                  MT oSP	                  4        SP                  VP                  4       S	! SSVV3R l3RS/\        SSS
4      B # )Ú
skip_relayTc                óL   <€ S! \        V \        4      '       d   V 4      # S4      # rR   )rH   rI   )Ú	next_argsr  Úrequest_argss   &€€r6   rÞ  ÚP_run_agent_tool_execution_middleware.<locals>._hermes_pipeline.<locals>.<lambda>6  s   ø€ Ñ2Ä
È9ÔVZ×@[Ò@[°9ÔnÐamÔnr8   Úoriginal_args)r   rH   ÚpayloadrI   ÚclearÚextendrã   )r  Úrequest_resultr  r  rZ   rü  rc   rb   ra   rý  rB   rã   s   & @€€€€€€€€€r6   Ú_hermes_pipelineÚ>_run_agent_tool_execution_middleware.<locals>._hermes_pipeline)  s£   ù€ Ù6ØØñ
ð ð
ô ˜EÐ#4°lÓCñ	
ˆô 2<¸N×<RÑ<RÔTX×1YÒ1Y�~×-Ò-Ð_iˆØ�‰ŒØ�‰�^×)Ñ)Ô*Ù,ØØÝnñ
ð (ð	
ô
 ˜EÐ#4°lÓCñ
ð 	
r8   Ú
session_idr<   rá   Úturn_idÚ_current_turn_idÚapi_request_idÚ_current_api_request_idrB   )r  rB   Úmetadata)rZ   rû  Úhermes_cli.middlewarerü  rý  r]  rq  rr  rð  r  ré  r3   r?   rð   )rZ   ra   rb   rc   rB   ré  rJ  rÑ  rè   rØ  rÒ  rû  r  r  Ú_relay_argsr  rü  r  rý  rÐ  rã   s   fddddddd$dd    @@@@@@r6   Ú$_run_agent_tool_execution_middlewarer  û  s  ÿÿ€ õ "÷ð
 !1Ò <ÑÀ"€EÜ d°ÐQVÐ`eÐrwÔx€EÜ—N’NÓ$€M÷
÷ 
ó 
õ$ EÙ1Ð2FÓGÐ÷
÷ 
ð 
ð$ !,× 3Ñ 3ØØØÜ”w˜u l°BÓ7×=Ð=¸2Ó>Ø!×)Ð) TàÐ(×.Ð.¨BØ”w˜uÐ&8¸"Ó=×CÐCÀØœg eÐ-FÈÓK×QÐQÈrØ˜L×.Ð.¨Bð	
ð !4ó !Ñ€E„L�+ð €Lr8   g      ð?c               ó   € V ^8„  d   QhRR/# rš   r4   )r5   s   "r6   r7   r7   O  s   € ÷ `ñ `¨,ñ `r8   c                 ó2   € ^ RI Hp  V ! R\        4       R7      # )a@  Deadline for one sequential call: ``timeouts.tools.sequential_call``, else the
concurrent batch deadline so the two paths can't drift; ``0``/negative disables.
Deliberately NOT ``agent.deadline.run_bounded_sync``: both executors extend the
deadline while an approval prompt is open, which a fixed deadline can't express.r�   ztools.sequential_call)rh   )r¡   rž   r£   r�   s    r6   Ú _resolve_sequential_tool_timeoutr!  O  s   € õ
 /áÐ2Ô<\Ó<^Ô_Ð_r8   Údelegate_taskÚmanage_connectionsc               ó$   € V ^8„  d   QhRRRRRR/# )r0   rV  rß   r�   r3   r2   r]  r4   )r5   s   "r6   r7   r7   d  s'   € ÷ Eñ E¨\ð EÀCð EÐcuñ Er8   c                ó|   € VP                   ! W3/ VB  \        V! V4      VP                  VP                  RRR7      # )z—Emit the terminal post_tool_call for a worker the sequential runner gave up on
(timeout / interrupt) and wrap ``message`` in its marker ``result_cls``.FTrþ  )ró   r]  rà   rã   )rZ   rV  r�   Ú
result_clsrò   s   &&&&,r6   Ú_abandoned_sequential_resultr'  d  sD   € ð ‡M‚M�%Ñ, GÒ,Ü¡Z°Ó%8¸s¿x¹xÐZ]×ZcÑZcÐmrð  @Dô  Eð  Er8   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   ra   r3   Údeadliner›   Ústartedr{   r2   ztuple[str, Any]r4   )r5   s   "r6   r7   r7   k  s4   € ÷ `ñ `¸#ð `Èð `Ð`eð `ð  Nñ `r8   c                ó:  € ^ p \         pVeE   W5P                  4       ,           \        P                  ! 4       ,
          pV^ 8:  d   R# \	        Wx4      p RVP                  VR7      3#   \        P                  P                   d•    TP                  4       '       d   RTP                  4       3u # T P                  '       d   Ru # \        \        P                  ! 4       T,
          4      p	Y–,
          ^8¼  d   T	pT P                  RT	 RT 24        EK   EK  i ; i)a?  Wait for the worker in interrupt-poll slices, extending the deadline by human approval
wait; returns ``("done", result)``, ``("timeout", None)`` or ``("interrupted", None)``.
A disabled deadline still polls: this loop is what makes a non-cooperative tool
interruptible, so no deadline must not mean no interrupt checks.Údoner‚  zsequential tool running (zs): )rƒ  N)ÚinterruptedN)Ú"_SEQUENTIAL_INTERRUPT_POLL_SECONDSrŒ  r  Ú	monotonicrÁ   rð   Ú
concurrentÚfuturesÚTimeoutErrorr,  Ú_interrupt_requestedrv   r£  )
rZ   Úfuturera   r)  r*  rÒ  Ú_last_heartbeatÚ
wait_sliceÚ	remainingÚelapseds
   &&&&&&    r6   Ú_poll_sequential_futurer9  k  sþ   € ð
 €OØ
Ü7ˆ
ØÒØ ×#FÑ#FÓ#HÕHÌ4Ï>Ê>ÓK[Õ[ˆIØ˜AŒ~Ø&Ð&Ü˜ZÓ3ˆJð	`Ø˜6Ÿ=™=°˜=Ó<Ð<Ð<øÜ×!Ñ!×.Ñ.ô 
	`ð �{‰{�}Š}Ø˜vŸ}™}›Ð.Ò.Ø×)×)Ð)Ø*Ò*Üœ$Ÿ.š.Ó*¨WÕ4Ó5ˆGØÕ(¨BÔ.Ø")�Ø×%Ñ%Ð(AÀ'ÀÈ$È}ÈoÐ&^×_Ð_ó /ð
	`ús+   ÁA' Á'4DÂDÂ0DÃDÃADÄDc               ó8   € V ^8„  d   QhRRRRRRRRRRR	R
RRRR/# )r0   ra   r3   rb   rI   rc   rB   rJ  rk  rÑ  rª  rè   rù  r2   r]  r4   )r5   s   "r6   r7   r7   ‡  sp   € ÷ dLñ dLð ðdLð ð	dLð
 ðdLð ðdLð ðdLð ðdLð 2ðdLð ñdLr8   c          	     ót  a aaa€ ^ RI Hp	 V\        9   d   RM	\        4       p
V	! W4      p
\	        WW4V4      p\        VP                  4       WVVR7      o^ RIHp V! V4      pVeF   VP                  P                  oVP                  P                  pVP                  oVP                  pMRoV\        9   d   \        S 3/ SB # ^ RIHp Vf   \%        4       o. oR V VVV3R llpVP&                  f   . Vn        Vf$   V! ^R7      pVP)                  \+        V4      4      pV
e   \,        P.                  ! 4       V
,           MRp\,        P.                  ! 4       pR	p \1        S XVVVS4      w  ppVR
8X  d    TVf   XP3                  V'       * VR7       # # VR8X  Ed*   \5        S S\7        S RR4      R7       \8        P:                  P=                  V.RR7       VP?                  4       '       dD   VPA                  4       '       g.   VPC                  4       Vf   XP3                  V'       * VR7       # # \7        S RR4      ;'       g    RpRV RV R2p\D        PG                  RVV\,        P.                  ! 4       V,
          4       \H        \        \K        \,        P.                  ! 4       V,
          R,          4      RRRV 2R7      ppMKV
f   Q hRV RV
R R2p\D        PM                  RW4       \N        \        \K        V
R,          4      R R!VR7      ppR"pVe4   VP                  PQ                  4        VR 8X  d   S PS                  R#R$7       VPU                  4        VR 8X  d   \5        S S4       \W        S VVV3/ VB Vf   XP3                  V'       * VR7       # #   Tf   XP3                  T'       * TR7       i i ; i)%a‰  Run one sequential call on a worker thread under the concurrent executor's deadline.
Interactive tools (``clarify``) own their wait via ``agent.clarify_timeout``; the
generic deadline would report ``tool_timeout`` while the prompt is still live. They
are ``_NEVER_PARALLEL_TOOLS`` and run inline below, before any deadline is armed, so
they need no ``_SEQUENTIAL_DEADLINE_EXEMPT_TOOLS`` entry.)Ú_extend_tool_timeoutN)ré  rJ  rÑ  )Útake_prepared_call©ÚDaemonThreadPoolExecutorc               ó   € V ^8„  d   QhRR/# )r0   r2   r]  r4   )r5   s   "r6   r7   Ú?_run_sequential_tool_execution_middleware.<locals>.__annotate__°  s   € ÷ pñ pÐ$ñ pr8   c                 ó¦   <€ \        S4      ;_uu_ 4       p SP                  V 4       \        S3R S/SB uuRRR4       #   + '       g   i     R# ; i)rÒ  N)r—  r  r  )r–  rZ   rÒ  r�  r©  s    €€€€r6   Ú_runÚ7_run_sequential_tool_execution_middleware.<locals>._run°  sA   ø€ Ü$ U×+Ô+¨sØ×Ñ˜cÔ"Ü7¸ÑoÐRdÐoÐhnÑo÷ ,×+×+Ó+ús	   •?¿A	©rÒ   Fr,  ©r®  Úcancel_futuresr-  Ú_tool_interrupt_reason©r˜  ç      @r‚  zinterrupt requestedõ   [Tool execution cancelled â€” z was abandoned: Ú]z6sequential tool %s abandoned due to %s (%.1fs elapsed)rû   rú   Útool_interruptedzTool execution cancelled: rý   úError executing tool 'ú': timed out after ú.1fÚsz(sequential tool %s timed out after %.1fsrƒ  Útool_timeoutTzterminal batch timeout©Útool_reason),Úagent.tool_dispatch_helpersr<  Ú!_SEQUENTIAL_DEADLINE_EXEMPT_TOOLSr!  rß   rI   rë   rð  r=  ÚbatchrÒ  Úexecutorrœ  r4  r   r  Útools.daemon_poolr?  rg  rã   Úsubmitr&   r  r/  r9  Úshutdownrž  r?   r0  r1  r®  r,  rú   rð   rX   Úinfore  rv   r´   rc  ÚcloseÚ	interruptÚcancelr'  )rZ   ra   rb   rc   rB   ré  rJ  rÑ  rè   r<  Ú	timeout_srV  r=  ÚpreparedrX  r4  r?  rC  r)  r*  Ú	abandonedrÐ  rð   Úinterrupt_reasonr�   r&  rò   rÒ  r�  r©  s   f$$$$$$$$                  @@@r6   Ú)_run_sequential_tool_execution_middlewarerd  ‡  sœ  û€ õ" Aà%Ô)JÔJ‘ÔPpÓPr€IÙ$ ]Ó>€IÜ
�}Ð5FÐVfÓ
g€CÜ�#×'Ñ'Ó)°7ÐcpÔq€FÝ@Ù! ,Ó/€HØÒØ%Ÿ^™^×>Ñ>ÐØ—>‘>×*Ñ*ˆØ—]‘]ˆ
Ø—‘‰à!ÐØÔ-Ô-Ü3°EÑD¸VÑDÐDå:àÒÜ=Ó?ÐØ "ˆ
÷pó pð
 ‡y�yÒØˆŒ	ØÒÙ+¸Ô:ˆØ—‘Ô!<¸TÓ!BÓCˆØ/8Ò/DŒt�~Š~Ó )Ö+È$€HÜ�nŠnÓ€GØ€Ið.LÜ/°°v¸}ÈhÐX_ÐasÓt‰ˆˆvØ�FŒ?ØðT ÒØ×Ñ y¤=ÀÐÕKð ðS �MÕ!ô # 5¨*¼WÀUÐLdÐfjÓ=kÕlÜ×Ñ×#Ñ# V H°cÐ#Ô:Ø�{‰{�}Š} V×%5Ñ%5×%7Ò%7Ø—}‘}“ðF ÒØ×Ñ y¤=ÀÐÕKð ôE  ' uÐ.FÈÓM×fÐfÐQfÐØ6°}°oÐEUÐVfÐUgÐghÐiˆGÜ�K‰KØHØÐ/´·²Ó1AÀGÕ1Kôô #7¼Ü¤§¢Ó!1°GÕ!;¸tÕ CÓDÈ[Ø-Ð?YÐZjÐYkÐ=lô9˜ˆJ˜ð
 Ò(Ð(Ð(Ø.¨}¨oÐ=PÐQZÐ[^ÐP_Ð_`ÐaˆGÜ�N‰NÐEÀ}Ô`Ü"4´dÜ 	¨DÕ 0Ó1¸)ÐP^Ðnuô7˜ˆJð ˆ	ØÒð �N‰N× Ñ Ô"Ø˜	Ô!ð
 —‘Ð,D�ÔEØ�‰ŒØ�IÔÜ" 5¨*Ô5Ü+¨E°3¸ÀÑWÈwÑWð ÒØ×Ñ y¤=ÀÐÕKð øˆ8ÒØ×Ñ y¤=ÀÐÕKð ús&   ÅN ÆA.N ÈN È0N ÉD6N ÎN7c               ó    € V ^8„  d   QhRRRR/# )r0   r§  r3   r2   rC   r4   )r5   s   "r6   r7   r7   î  s   € ÷ Fñ F Cð F¸Tñ Fr8   c                óŒ   € V '       g   R#  V ! V/ VB  R#   \          d#   p\        P                  ! RY4        Rp?R# Rp?ii ; i)zNInvoke a UI/bridge callback if set; a failing callback is logged, never fatal.Nz%s callback error: %s)rW   ÚloggingrY   )r‡  r§  rà   r�  Úcallback_errors   &&*, r6   Ú_safe_callbackri  î  s?   € çÙðFÙ�$Ð!˜&Ô!øÜô FÜ�ŠÐ-¨u×EÒEûðFús   Œ –A¡>¾Ac               ó$   € V ^8„  d   QhRRRRRR/# )r0   rV  rß   rÑ  rª  r2   rC   r4   )r5   s   "r6   r7   r7   ø  s'   € ÷ %eñ %e lð %eÀ:ð %eÐRVñ %er8   c                óà  € VP                   VP                  VP                  VP                  3w  r4rV\	        W44      ;'       g    Tp\        V 4      '       dÕ   Ve   RV 2MRpV P                  '       d`   \        RV RV R\        VP                  4       4       R24       \        V P                  R\        P                  ! V^R	R
7      4      4       MX\        RV RV R\        VP                  4       4       R\        \        P                  ! VR	R7      V P                  4       24       W0n        V P!                  RV 24       \#        V 4       V P$                  '       d&    \'        W74      p	\)        V P$                  RRW9V4       \)        V P0                  RWcV4       V P2                  P4                  '       g   R# \6        P8                  ! \*        4      ;_uu_ 4        VR9   d   \;        WWE4       M­VR8X  d§   VP=                  RR4      p\?        V4      '       d„   ^ RI H!p T! T;'       g    R4      fj   ^ RI"H#p VP=                  R4      ;'       g%    V! 4       ;'       g    \H        PJ                  ! 4       pV P2                  PM                  VRVR,           24       RRR4       R#   \*         d#   p
\,        P.                  ! RT
4        Rp
?
ELLRp
?
ii ; i  + '       g   i     R# ; i)zBRun user-visible and checkpoint preflight on final tool arguments.NzTool ÚToolu     ðŸ“ž z: Ú(Ú)zArgs: F)Úindentr‘   z) - r�   zexecuting tool: úTool progressztool.startedz Tool progress callback error: %sz
Tool startÚterminalÚcommandr<   )rg   rh   )Úscope_terminal_cwdÚworkdirzbefore terminal: :Né<   N>   ÚpatchÚ
write_file)'r;   rà   rá   râ   Ú_redact_tool_args_for_displayÚ_tool_progress_enabledÚverbose_loggingÚprintr¦   ÚkeysÚ_wrap_verboser’   r–   Ú_previewÚlog_prefix_charsÚ_current_toolr£  r¤  ró  Ú_build_tool_previewri  rW   rg  rY   Útool_start_callbackrk   r4  r0  r1  rp   rJ   r   rj   rg   Úagent.runtime_cwdrs  ÚosÚgetcwdrl   )rZ   rV  rÑ  ra   rb   rc   rB   Údisplay_argsÚprefixÚpreviewrh  rr  rg   rs  Úcwds   &&&            r6   rå  rå  ø  s¢  € àDGÇHÁHÈcÏhÉhÐX[×XcÑXcÐeh×epÑepÐDpÑA€MÐ"3Ü0°ÓN×_Ð_ÐR_€LÜ˜e×$Ò$Ø,9Ò,E�5˜˜Ñ(È6ˆØ× × Ð Ü�G˜F˜8 2 m _°A´d¸<×;LÑ;LÓ;NÓ6OÐ5PÐPQÐRÔSÜ�%×%Ñ% h´·
²
¸<ÐPQÐ`eÔ0fÓgÕhä�G˜F˜8 2 m _°A´d¸=×;MÑ;MÓ;OÓ6PÐ5QÐQUÔV^Ô_c×_iÒ_iÐjvð  FKô  `Lð  NS÷  Ndñ  Ndó  Weð  Vfð  gô  hà'ÔØ	×ÑÐ,¨]¨OÐ<Ô=Ü! %Ô(à×#×#Ð#ð	@Ü)¨-ÓFˆGô ˜5×7Ñ7¸È.ÐZgÐr~ÔÜ�5×,Ñ,¨l¸LÐYeÔfà× Ñ ×(×(Ð(ÙÜ	×	Ò	œY×	'Õ	'ØÐ3Ô3Ü# E¸-Õ[Ø˜jÔ(Ø#×'Ñ'¨	°2Ó6ˆGÜ& w×/Ò/ÝMÙ-Ð.?×.LÐ.LÀ9ÓMÒUÝDØ'×+Ñ+¨IÓ6×]Ð]Ñ:LÓ:N×]Ð]ÔRT×R[ÒR[ÓR]�CØ×)Ñ)×;Ñ;¸CÐCTÐU\Ð]`ÕUaÐTbÐAcÔd÷ 
(Ñ	'øô ô 	NÜ�MŠMÐ<¸n×MÒMûð	Nú÷ 
(×	'Ð	'ús7   Å$J, Ç AKÈ0&KÉKÉ&<KÊ,KÊ7KËKËK-	c               ó$   € V ^8„  d   QhRRRRRR/# )r0   rV  rß   r^  r¨   r2   rC   r4   )r5   s   "r6   r7   r7      s#   € ÷ 
ñ 
¨\ð 
Ð[_ð 
Ðdhñ 
r8   c                óú  € V'       gu   V P                   '       dc    \        VP                  VP                  4      ;'       g    VP                  p\	        V P                   RVP
                  VP                  WR4       VeL   VP                  R4      R8w  d4   \	        V P                  RRVP                  RRVP
                  VR7       R# R# R#   \         d"   p\        P                  ! RT4        Rp?LxRp?ii ; i)	zZFire ``tool_complete_callback`` (unless blocked) then the ``tool.output_risk`` projection.zTool completez Tool complete callback error: %sNÚriskÚlowzTool output riskztool.output_risk)rB   Úrisk_metadata)Útool_complete_callbackrx  r;   rà   ri  râ   rW   rg  rY   rJ   ró  )rZ   rV  rð   rŽ  r^  r†  Úcb_errs   &&&&&  r6   Ú_emit_tool_complete_and_riskr‘     sÎ   € ç�u×3×3Ð3ð	wÜ8¸¿¹À3Ç8Á8ÓL×XÐXÐPS×PXÑPXˆLô ˜5×7Ñ7¸È#Ï+É+ÐWZ×W_ÑW_ÐamÔvØÒ  ]×%6Ñ%6°vÓ%>À%Ô%GÜØ×(Ñ(Ð*<Ø §¡¨$°À3Ç;Á;Ð^k÷	
ñ &HÑ øô	 ô 	FÜ�MŠMÐ<¸f×EÑEûð	Fús   œ&C ÁC ÃC:ÃC5Ã5C:Úobservedra  Úerror_previewc                ó   € V # rR   r4   ©rð   s   &r6   rÞ  rÞ  =  s   € ¹r8   Úsuccess_log_charsÚverbose_textc                ó   € V # rR   r4   r•  s   &r6   rÞ  rÞ  ?  s   € ¹r8   c               óD   € V ^8„  d   QhRRRRRRRRR	R
RR
RR
RRRRRRRR/# )r0   r¥   r¦   rV  rß   Úbudgetr*   Útool_durationr{   Úis_errorr¨   r^  r’  ra  r`  r“  zCallable[[Any], Any]r–  zOptional[int]r—  r4   )r5   s   "r6   r7   r7   0  s’   € ÷ qTñ qTàðqTð 
ðqTð ðqTð ðqTð ðqTð ðqTð ðqTð ðqTð (ðqTð %ðqTð 'ñqTr8   c       
        óV  € VP                   VP                  VP                  VP                  3w  rïpp^ RIHp V! WV4       V'       g   V'       g   \        WWó4      pV	'       dÍ   V'       g   V P                  WïW6VR7      pV'       d   \        P                  RWåV! V4      4       MVe   \        P                  RWåV4       V'       g    V P                  WïW6VR7       V P                  '       dA   \        P                  ! RWå4       V! V4      p\        P                  ! R	\!        V4      V4       RV n        V'       d   R
MRpV P%                  RV RVR RV 24       Tp\'        V4      '       d   \)        VVV\+        V4      V4      pM\-        VVV\+        V4      VR7      p\/        V VV4       \1        WVVV4       V P2                  P5                  Wï4      pV'       d(   \'        V4      '       d   \7        VV4       M	VV,          pV P9                  VV4      p\;        VVVVR7      p\<        P>                  ! V 4       \@        PB                  ! V V4       \E        V RR4      pV'       g7   V'       d/    \G        Wï4      ;'       g    TpV! VVVV4      pV'       d   VVR&   \I        V\K        V
4      4       VPM                  V4       \O        WRV 2R7      '       g   R# V'       g   \Q        V PR                  RRVRRWVVR7	       \U        V\V        4      '       d   \!        V4      \X        8¼  d   RV n-        VVVP]                  R4      3#   \         d#   p\        P                  ! RT4        Rp?EL“Rp?ii ; i  \         d#   p\        P                  ! RT4        Rp?EL Rp?ii ; i)a  Observe (``observed`` results only) and log the outcome; mark the tool done; persist/
spill, hint, wrap and append the result; flush the session DB; project ``tool.completed``.

Blocked calls never ran, so they are neither guardrail-observed nor fed to the file-
mutation verifier; ``success_log_chars`` (sequential path) also logs the completion line.
Returns ``(persisted_result, display_result, risk_metadata)`` (``display_result`` =
pre-persist content for UI previews) or ``None`` when the flush failed (stop the batch).
)Úobserve_tool_outcome)ÚfailedrB   z"Tool %s returned error (%.2fs): %sNú#tool %s completed (%.2fs, %d chars))rá   z(file-mutation verifier record failed: %szTool %s completed in %.2fszTool result (%d chars): %sz (error)r<   ztool completed: z (rP  zs)©rP   Ú	tool_nameÚtool_use_idÚenvÚconfigr  Útool_result_metadata_callbackÚdisplay_metadataz'Tool result metadata callback error: %sztool result r  rp  ztool.completed)Údurationrœ  rð   TÚ_tool_output_risk)/r;   rà   râ   rá   Ú/hermes_cli.observability.shared_metrics_harnessrž  Úobserve_onboarding_resultÚ_append_guardrail_observationrX   r´   r\  Ú_record_file_mutation_resultrW   rg  rY   rz  rÍ   r€  r£  r   Ú_persist_multimodal_text_partsr%   r'   r_   r-   Ú_subdirectory_hintsÚcheck_tool_callr!   Ú%_tool_result_content_for_active_modelr$   Úlsp_deferredÚforward_to_agentr   Úattach_to_tool_messager?   rx  r   Úsortedr  r¶   ri  ró  rH   r3   Ú_LARGE_TOOL_RESULT_TRIM_CHARSÚ_trim_after_tool_batchrJ   )rZ   r¥   rV  r[   rš  r›  rœ  r^  r  r’  ra  r“  r–  r—  ra   rb   rB   rc   rž  Ú_ver_errÚ_log_resultÚ_status_suffixÚpersisted_resultÚsubdir_hintsÚ_tool_contentÚtool_messageÚprepare_metadatar†  r  rh  s   &&&&$$$$$$$$$$                r6   Ú_commit_tool_resultrÀ  0  si  € ð2 EHÇHÁHÈcÏhÉhÐX[×XcÑXcÐeh×epÑepÐDpÑA€M ,Ð0AÝTá˜¨xÔ8ß—xÜ3°EÈ-ÓiˆßßØ#×AÑAØ¨oÐ]ið Bó ˆO÷ Ü�N‰NÐ?ÀÑ_lÐm|Ó_}Õ~ØÒ*Ü�K‰KÐ=¸}Ð]nÔoßðTØ×2Ñ2Ø!°/ÐUfð 3ô ð
 × × Ð Ü�MŠMÐ6¸ÔUÙ& Ó7ˆKÜ�MŠMÐ6¼¸KÓ8HÈ+ÔVà€EÔß#+‘Z°€NØ	×ÑÐ,¨]¨O¸2¸mÈCÐ=PÐPRÐSaÐRbÐcÔdà&ÐÜ!Ð"2×3Ò3Ü9Ø˜m¨\¼>ÐJ[Ó;\Ð^dó
Ñô 5Ø$Ø#Ø$ÜÐ0Ó1Øô
Ðô $ E¨<Ð9IÔJÜ�U¨<¸ÐJZÔ[à×,Ñ,×<Ñ<¸]ÓZ€LßÜ%Ð&6×7Ò7ä-Ð.>ÀÕMà Õ,Ðð ×?Ñ?ÀÐO_Ó`€MÜ+¨M¸=È,Ðk}Ô~€Lô ×!Ò! %Ô(Ü×,Ò,¨U°LÔAô ˜uÐ&EÀtÓLÐß×'ð	UÜ8¸ÓV×gÐgÐZgˆLÙ'¨°mÀ\ÐSbÓcˆHßØ3;�Ð/Ñ0ô �<¤¨Ó!1Ô2Ø‡O�O�LÔ!Ü0°È,ÐWdÐVeÐHf×gÓgÙçô 	Ø×(Ñ(¨/Ø˜m¨T°4À-Ðkzõ	
ô �/¤3×'Ò'¬C°Ó,@ÔDaÔ,aØ'+ˆÔ$Ø˜_¨l×.>Ñ.>Ð?RÓ.SÐSÐSøôI ô TÜ—’ÐHÈ(×SÒSûðTûôh ô 	UÜ�MŠMÐCÀ^×TÒTûð	Uús<   ÃM É6M; ÊM; ÊM; ÍM8ÍM3Í3M8Í;N(ÎN#Î#N(c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r0   rð   rI   r¢  r3   rB   rš  r*   r2   r4   )r5   s   "r6   r7   r7   ¤  s1   € ÷ ñ ¨4ð ¸Cð Èsð Ðamð Ðrvñ r8   c           	     óX  € V P                  R4      ;'       g    . p. R^ r‡pV F«  p	\        V	\        4      '       d(   V	P                  R4      R8X  d   V	P                  R4      MRp
\        V
\        4      '       dC   V'       g   TMV RV 2p\	        W¡VW4R7      pWÊ8w  d   / V	CRV/Cp	T;'       g    TpV^,          pVP                  V	4       K­  	  Vf   V # / V CRV/CpVP                  R4      p\        V\        4      '       d$   \        V4      VP                  V4      8”  d   W}R&   V# )aÆ  Spill oversized TEXT parts of a multimodal envelope through the same persistence policy as
string results (#95429). A ``browser_exec`` call that captured a screenshot bakes its full
stdout into the envelope's text part, which used to bypass ``maybe_persist_tool_result``
entirely and ride every later request inline. Image parts are left untouched (their size is
governed by the vision embed budget); a fresh dict is returned so history is never mutated.rP   NÚtyperG   Ú_partr¡  rE   )rJ   rH   rI   r3   r'   r  rÍ   Úresolve_threshold)rð   r¢  rB   r¤  rš  ÚpartsÚbounded_partsÚfirst_replacementÚspilledÚpartrG   Úpart_idÚreplacedÚboundedÚsummarys   &&&&&          r6   r®  r®  ¤  s+  € ð �J‰J�yÓ!×'Ð' R€EØ02°D¸! g€MÛˆÜ#-¨d´D×#9Ò#9¸d¿h¹hÀvÓ>NÐRXÔ>Xˆt�x‰x˜ÔÐ^bˆÜ�dœC× Ò ç*1‘l¸,¸ÀuÈWÈIÐ7VˆGÜ0¸Ð`gØ58ôIˆHàÔØ1˜$Ð1 ¨Ñ1�Ø$5×$AÐ$A¸Ð!Ø˜1•�Ø×Ñ˜TÖ"ñ ð Ò ØˆØ2�Ð2˜ MÑ2€GØ�k‰k˜.Ó)€Gô �'œ3×Ò¤C¨£L°6×3KÑ3KÈIÓ3VÔ$VØ"3�ÑØ€Nr8   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r0   r¥   r¦   rc   r3   Ú	num_toolsrv   rš  r*   r2   rC   r4   )r5   s   "r6   r7   r7   Ã  s9   € ÷ 
Dñ 
D¨$ð 
DÀ3ð 
DÐSVð 
DÐ`lð 
DÐquñ 
Dr8   c                óþ   € V^ 8:  d   R# W) R pV Uu. uF  qfP                  R4      NK  	  pp\        V\        V4      VR7       \        P                  ! W4       \        WV4       V P                  W4       R# u upi )u¤   Per-turn aggregate budget enforcement, then /steer injection â€” in that order, so the
steer marker is never truncated/discarded when enforcement replaces a result.NrP   )r¤  r¥  )rJ   r(   r%   r   Úkeep_after_turn_budgetr.   Ú$_apply_pending_steer_to_tool_results)rZ   r¥   rc   rÐ  rš  rW  r�   Úcontents_befores   &&&&&   r6   Ú_finalize_tool_batchrÕ  Ã  ss   € ð �A„~ÙØ�Z�[Ð!€EÙ=BÓC¹U°'—{‘{ 9Ö-¹U€OÐCÜ˜¤>Ð2CÓ#DÈVÕTÜ×,Ò,¨UÔ:Ü�e OÔ4Ø	×.Ñ.¨xÖCùò	 Ds   “A:c               ó   € V ^8„  d   QhRR/# )r0   r2   r¨   r4   )r5   s   "r6   r7   r7   Ð  s   € ÷ Yñ Y Tñ Yr8   c                óT   € V P                   '       * ;'       d    \        V R R4      R8g  # )Útool_progress_modeÚallÚoff)r(  r?   )rZ   s   &r6   ry  ry  Ð  s)   € Ø×ÑÔ×XÐX¤G¨EÐ3GÈÓ$OÐSXÑ$XÐXr8   c               ó$   € V ^8„  d   QhRRRRRR/# )r0   rG   r3   rÅ   rv   r2   r4   )r5   s   "r6   r7   r7   Ô  s!   € ÷ ?ñ ?�3ð ?˜sð ? sñ ?r8   c                ó>   € \        V 4      V8”  d   V R V R,           # T # )Nz...rÌ   )rG   rÅ   s   &&r6   r~  r~  Ô  s#   € Ü#& t£9¨uÔ#4ˆ4��ˆ<˜%ÕÐ>¸$Ð>r8   c               ó$   € V ^8„  d   QhRRRRRR/# )r0   Úindexrv   r›  r{   r2   rC   r4   )r5   s   "r6   r7   r7   Ø  s&   € ÷ `ñ `¨ð `¸Eð `Èdñ `r8   c                ó  € V P                   '       d1   \        RV RVR R24       \        V P                  RV4      4       R# \        RT RVR R\        \	        V\
        4      '       d   TM
\        V4      V P                  4       24       R# )uL   Non-quiet ``âœ… Tool N completed`` line (full result under verbose logging).u     âœ… Tool z completed in z.2frQ  zResult: zs - N)rz  r{  r}  r~  rH   r3   r  )rZ   rÞ  r›  rð   s   &&&&r6   Ú_print_tool_completedrà  Ø  s¥   € à××ÐÜ�˜E˜7 .°¸sÐ0CÀ1ÐEÔFÜˆe×!Ñ! *¨fÓ5Ö6ä�˜E˜7 .°¸sÐ0CÀ4ÌÔ[eÐflÔnq×[rÒ[rÑQWÔx{ð  }Có  yDð  FK÷  F\ñ  F\ó  I]ð  H^ð  _ö  	`r8   c                  óf   € ] tR tRt$ RtR]R&   R]R&   R]R&   R	]R
&   R	]R&   ]! 4       tR]R&   RtR# )Ú_ToolOutcomeiä  zYOne finished worker slot of a concurrent batch (``ref`` holds the final name/args/trace).rß   rV  r   rð   r{   r¨  r¨   rœ  r^  r`  ra  r4   N)	r…   r†   r‡   rˆ   r‰   r	  r  ra  rŠ   r4   r8   r6   râ  râ  ä  s+   ‡ ácà	ÓØƒKØƒOØƒNØƒMÙ(›{€Hˆn×*r8   râ  c               ó    € V ^8„  d   QhRRRR/# )r0   Úbatch_timeoutr›   r2   r{   r4   )r5   s   "r6   r7   r7   ð  s   € ÷ ?ñ ?¨\ð ?¸eñ ?r8   c                óD   € V f   \         # \        \         V ^,          4      # )z¡The gate bound must sit UNDER the batch deadline, else parked workers are falsely
reported timed out without starting. A disabled deadline keeps the stock bound.)Ú_START_ORDER_GATE_TIMEOUT_SrÁ   )rä  s   &r6   Ú_start_order_gate_timeoutrç  ð  s#   € ð ÒÜ*Ð*ÜÔ*¨M¸AÕ,=Ó>Ð>r8   c                  óJ   € ] tR tRtRtR R ltR R ltRRR	/R
 R llltRtR# )Ú_StartOrderGateiø  z«Serialize worker dispatch by submit order (prompts appear in call order); ``abandon()``
releases every parked worker so none dispatches a tool the turn already gave up on.c               ó    € V ^8„  d   QhRRRR/# )r0   rƒ  r{   r2   rC   r4   )r5   s   "r6   r7   Ú_StartOrderGate.__annotate__ü  s   € ÷ +ñ + ð +¨$ñ +r8   c                	óˆ   € \         P                  ! 4       V n        ^ V n        Wn        \         P
                  ! 4       V n        R# ©r}  N)rq  Ú	ConditionÚ
_conditionÚ_next_orderÚ_timeoutrµ  rb  )rê   rƒ  s   &&r6   ry  Ú_StartOrderGate.__init__ü  s-   € Ü#×-Ò-Ó/ˆŒØˆÔØŒÜ"ŸšÓ*ˆŽr8   c               ó   € V ^8„  d   QhRR/# rî   r4   )r5   s   "r6   r7   rë    s   € ÷ )ñ )˜ñ )r8   c                	óÐ   € V P                   P                  4        V P                  ;_uu_ 4        V P                  P                  4        R R R 4       R #   + '       g   i     R # ; irR   )rb  r¹  rï  Ú
notify_allré   s   &r6   ÚabandonÚ_StartOrderGate.abandon  s7   € Ø�‰×ÑÔØ�_�_‹_Ø�O‰O×&Ñ&Ô(÷ �_�_Š_ús   ¯AÁA%	Nr¢  r<   c               ó$   € V ^8„  d   QhRRRRRR/# )r0   Úorderrv   r¢  r3   r2   r¨   r4   )r5   s   "r6   r7   rë    s"   € ÷ ñ  Cð Àcð ÐSWñ r8   c          	     ó–  a a€ S P                   ;_uu_ 4        S P                   P                  VV 3R lS P                  R7      pS P                  P	                  4       '       d    RRR4       R# V'       g-   \
        P                  RT;'       g    RSS P                  4        Ve   V! 4        \        S P                  S^,           4      S n        S P                   P                  4         RRR4       R#   \        S P                  S^,           4      S n        S P                   P                  4        i ; i  + '       g   i     R# ; i)zJWait for ``order``, run ``callback``, advance. Returns False if abandoned.c                 óf   <€ SP                   S 8¬  ;'       g    SP                  P                  4       # rR   )rð  rb  Úis_set)rù  rê   s   €€r6   rÞ  Ú0_StartOrderGate.begin_in_order.<locals>.<lambda>  s(   ø€ ˜×(Ñ(¨EÑ1×LÐL°T·^±^×5JÑ5JÓ5LÐLr8   r‚  NFzMstart-order gate timed out for %s (order=%d next=%d); proceeding out of orderr=   T)
rï  Úwait_forrñ  rb  rü  rX   r´   rð  rÀ   rõ  )rê   rù  r‡  r¢  Úin_orders   ff&$ r6   Úbegin_in_orderÚ_StartOrderGate.begin_in_order  sø   ù€ à�_�_‹_ð —‘×/Ñ/ÝLÐVZ×VcÑVcð 0ó ˆHð �~‰~×$Ñ$×&Ò&Ø÷ ‰_÷ Ü—‘ØcØ×'Ð' ¨°×0@Ñ0@ôð-ØÒ'Ù”Jä#& t×'7Ñ'7¸À½Ó#C�Ô Ø—‘×*Ñ*Õ,÷' ñ( øô $' t×'7Ñ'7¸À½Ó#C�Ô Ø—‘×*Ñ*Õ,ú÷' Ž_ñ( ús6   —AD7Á/D7Á7D7ÂD7Â$C6Â/<D7Ã6>D4Ä4D7Ä7E	)rï  rð  rñ  rb  rR   )	r…   r†   r‡   rˆ   r‰   ry  rö  r   rŠ   r4   r8   r6   ré  ré  ø  s#   † ñ[õ+õ)ñ
ÈB÷ ô r8   ré  c                  ó6   € ] tR tRtRtR R ltR	R R lltRtR# )
Ú_WorkerStartOncei   z›One worker's handle on the start-order gate: advances at most once, raising
``_BatchAbandoned`` (instead of dispatching late) when the batch was abandoned.c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   Úgateré  rù  rv   r¢  r3   r2   rC   r4   )r5   s   "r6   r7   Ú_WorkerStartOnce.__annotate__$  s.   € ÷ añ a˜_ð a°Sð aÀSð aÈTñ ar8   c                	óB   € WVR 3w  V n         V n        V n        V n        R# )FN)Ú_gateÚ_orderÚ
_tool_nameÚ	_advanced)rê   r  rù  r¢  s   &&&&r6   ry  Ú_WorkerStartOnce.__init__$  s!   € ØCGÐPYÐ[`ÐC`Ñ@ˆŒ
�D”K ¤°$¶.r8   Nc               ó   € V ^8„  d   QhRR/# rî   r4   )r5   s   "r6   r7   r  '  s   € ÷ 3ñ 3¨ñ 3r8   c                	óÔ   € V P                   '       d   R # RV n         V P                  P                  V P                  WP                  R7      '       g   \        V P                  4      hR # )NT)r¢  )r  r  r   r	  r
  rƒ   r†  s   &&r6   ÚadvanceÚ_WorkerStartOnce.advance'  sL   € Ø�>�>ˆ>ÙØˆŒØ�z‰z×(Ñ(¨¯©°hÏ/É/Ð(×ZÒZÜ! $§/¡/Ó2Ð2ñ [r8   )r  r  r	  r
  rR   )r…   r†   r‡   rˆ   r‰   ry  r  rŠ   r4   r8   r6   r  r     s   † ñWõa÷3ó 3r8   r  c                  ón   € ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltRtR# )Ú_ConcurrentBatchi/  z—Shared state of one concurrent tool batch: per-slot results, the start-order and
authorization gates, and the deadline bookkeeping the wait loop needs.c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r0   r¥   r¦   rc   r3   Úparsed_callszlist[_ParsedCall]r`  r›   r2   rC   r4   )r5   s   "r6   r7   Ú_ConcurrentBatch.__annotate__3  s6   € ÷ 1ñ 1¨ð 1Àð 1ÐTeð 1Ðr~ð 1ð  DHñ 1r8   c                	ó’  € Wn         W n        W0n        W@n        WPn        R .\        V4      ,          V n        \        V4       FJ  w  rgVP                  f   K  \        VP                  V4      VP                  RRR4      V P                  V&   KL  	  \        \        V4      4      V n        \        4       V n        \!        4       V n        R # )Nr  T)rZ   r¥   rc   r  r`  rÍ   ÚresultsÚ	enumeraterR  râ  rV  ré  rç  r  rg  rÒ  r¹  Útimed_out_indices)rê   rZ   r¥   rc   r  r`  ÚiÚpcs   &&&&&&  r6   ry  Ú_ConcurrentBatch.__init__3  sŸ   € ØŒ
Ø ŒØ!2ÔØ(ÔØ"ŒØ6:°V¼cÀ,Ó>OÕ5OˆŒÜ˜|Ö,‰EˆAØ�~‰~Ô)Ü".¨r¯v©vÐ6GÓ/HÈ"Ï.É.ÐZ]Ð_cÐeiÓ"j�—‘˜Q“ñ -ô $Ô$=¸iÓ$HÓIˆŒ	Ü"BÓ"DˆÔÜ+.«5ˆÖr8   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   rÞ  rv   rV  rß   Ú
start_gater  r2   zOptional[_ToolOutcome]r4   )r5   s   "r6   r7   r  A  s4   € ÷ 5Pñ 5P cð 5P°ð 5PÐWgð 5Pð  mCñ 5Pr8   c                ó  a aa€ S P                   o\        P                  ! 4       pR;rg\        4       p \        S3/ SP	                  4       BRVVV 3R lRVRV^,           RVP
                  RS P                  /B p	V	P                  V	P                  V	P                  up
Sn        Sn
        V	P                  V	P                  V	P                  r‡p\        P                  ! 4       T,
          pT'       g-   T'       g%   SP7                  ST
\9        TR,          4      R7       \;        SP"                  T
4      w  rÞT'       d4   \        P!                  RSP"                  T\=        T
4      R,          4       MV\?        T
\<        4      '       d   \A        T
4      M\A        \=        T
4      4      p\        P!                  RSP"                  Y¿4       \3        SY«YÖT4      #   \         d%    \        P!                  RSP"                  4        R	# \$         d·    \&        P(                  ! \*        4      ;_uu_ 4        SP-                  R
\.        R7       R	R	R	4       M  + '       g   i     M; iSP1                  ST4      p
\        P                  ! 4       T,
          p\        P!                  RSP"                  T4       \3        SY«RR4      u # \*         dA   pRSP"                   RT 2p
\        P5                  RSP"                  TRR7        R	p?EL9R	p?ii ; i)zÂRun one call through the middleware and synthesize its slot outcome; ``None`` when
abandoned at the gate (the main thread already wrote this slot; emitting would
double-report the tool_call_id).Fré  c                ó®   <€ SP                  SP                  V SP                  SP                  SP                  R R R \        SP                  4      R7	      # )T)r¥   Úpre_tool_block_checkedÚskip_tool_request_middlewareÚskip_tool_execution_middlewareÚtool_request_middleware_trace)Ú_invoke_toolr;   rá   râ   r¥   r¦   rã   )r  rZ   rV  rê   s   &€€€r6   rÞ  Ú3_ConcurrentBatch._dispatch_worker.<locals>.<lambda>O  sE   ø€ ¨%×*<Ñ*<Ø—H‘H˜i¨¯©°c·k±kØ!Ÿ]™]Ø+/Ø15Ø37Ü26°s·y±y³/ð +=ô +r8   rJ  rÑ  rØ  rÒ  z8tool %s abandoned at start-order gate; skipping dispatchNúkeyboard interruptrS  ztool %s cancelled (%.2fs)TrN  ú': z_invoke_tool raised for %s: %sro  rû   ©rþ   ztool %s failed (%.2fs): %sºNéÈ   Nr   )!rZ   r  r  r  rë   r  rÒ  rð   rà   rè   rã   r^  r_  ra  rƒ   rX   r\  r;   ÚKeyboardInterruptr0  r1  rW   r^  r   r  râ  rŽ   ró   rv   r   r3   rH   rÍ   )rê   rÞ  rV  rJ  r  r¸  r^  r_  ra  Úmanagedrð   r¨  Ú
tool_errorrœ  Ú_Úresult_charsrZ   s   f&f&&           @r6   Ú_dispatch_workerÚ!_ConcurrentBatch._dispatch_workerA  sm  ú€ ð —
‘
ˆô —	’	“ˆØ$Ð$ˆÜ#,£;ˆð	`Ü:Øñà×'Ñ'Ó)ñöðð (ðð $ a�iðð !+× 2Ñ 2ðð $(×#:Ñ#:òˆGð  +2¯.©.¸'¿,¹,È×H`ÑH`Ð'ˆF�C”H˜cœiØ,3¯O©O¸W×=OÑ=OÐQX×QaÑQa ˆGô —9’9“; Õ&ˆßŸzØ�M‰M˜% ´S¸ÀD½Ó5IˆMÔJÜ*¨3¯8©8°VÓ<‰ˆßÜ�K‰KÐ4°c·h±hÀÌ#ÈfË+ÐVZÕJ[Õ\ä*4°V¼S×*AÒ*Aœ3˜vœ;ÄsÌ3ÈvË;ÓGWˆLÜ�K‰KØ5°s·x±xÀôô ˜C °8ÀhÓOÐOøô1 ô 	Ü�K‰KÐRÐTW×T\ÑT\Ô]ÚÜ ô 	DÜ×$Ò$¤Y×/Õ/Ø—‘Ð 4ÔBX�ÔY÷ 0×/×/Ð/úà×'Ñ'¨¨uÓ5ˆFÜ—y’y“{ UÕ*ˆHÜ�K‰KÐ3°S·X±X¸xÔHÜ  V°t¸UÓCÒCÜô 	`Ø-¨c¯h©h¨Z°s¸:¸,ÐGˆFÜ�L‰LÐ9¸3¿8¹8ÀZÐZ^ˆL×_Ò_ûð	`úsI   ³BG Ç+L
ÈL
È
#L
È-IÉ	L
ÉIÉA%L
Ë L
Ë	L
Ë
5LÌL
c               ó$   € V ^8„  d   QhRRRRRR/# )r0   rÞ  rv   Ústart_orderr2   rC   r4   )r5   s   "r6   r7   r  x  s!   € ÷ )ñ ) ð )°#ð )¸$ñ )r8   c                ó"  € V P                   V P                  V,          rC\        V4      ;_uu_ 4       pVP                  '       d   \	        W5.\        VRR4      R7       \        V4       \        V P                  W$P                  4      p V P                  WP                  V P                  4      VP                  V4      pVe   WpP                  V&   \        P                   ! \"        4      ;_uu_ 4        VP%                  4        RRR4       RRR4       R#   + '       g   i     L; i  \        P                   ! \"        4      ;_uu_ 4        TP%                  4        RRR4       i   + '       g   i     i ; i; i  + '       g   i     R# ; i)z%Worker function executed in a thread.rH  NrI  )rZ   r  r—  r3  rž  r?   r¤  r  r  r;   r1  rV  rc   rJ  r  r0  r1  rƒ   r  )rê   rÞ  r4  rZ   r  Ú_worker_tidr  rò   s   &&&     r6   Ú
run_workerÚ_ConcurrentBatch.run_workerx  s  € à—J‘J × 1Ñ 1°%Õ 8ˆrÜ$ U×+Ô+¨{à×)×)Ð)Ü& u¨mÄGÈEÐSkÐmqÓDrÕsÜ)¨%Ô0Ü)¨$¯)©)°[Ç'Á'ÓJˆJð)Ø×/Ñ/°·v±v¸d×>TÑ>TÓ7UÐWY×WeÑWeÐgqÓr�ØÒ&Ø*1—L‘L Ñ'ä×(Ò(¬×9Õ9Ø×&Ñ&Ô(÷ :÷ ,Ñ+÷ :×9û”Z×(Ò(¬×9Õ9Ø×&Ñ&Ô(÷ :×9×9Ð9ý÷ ,×+Ð+úsU   ²AE=Â
AD*Ã"E=Ã4D	ÄE=ÄD'Ä"E=Ä*#E:ÅE'Å	E:Å'E7Å2E:Å:E=Å=F	c               ó    € V ^8„  d   QhRRRR/# )r0   Úrunnablez	list[int]r2   ztuple[list, dict]r4   )r5   s   "r6   r7   r  ‰  s   € ÷ (ñ (¨Yð (Ð;Lñ (r8   c           
     ó<  € . p/ p\        V4       F@  w  rV VP                  \        V P                  4      We4      pTP                  T4       YdT&   KB  	  W43#   \         dº   p\        T4      '       g   h Y%R p	\        P                  R\        T	4      4       T	 Fq  p
T P                  T
,          P                  T P                  4      pT P                  T
,          e   KF  RTP                   R2p\        Y¼RRR4      T P                  T
&   Ks  	   Rp? Y43# Rp?ii ; i)zòSubmit every runnable slot; on interpreter shutdown, synthesize error results
for the unsubmitted remainder instead of raising. ``propagate_context_to_thread``
carries turn ContextVars and thread-local approval/sudo callbacks into the worker.NzWinterpreter shutdown while scheduling concurrent tools; skipping %d unsubmitted tool(s)rN  z<': Python interpreter is shutting down; tool was not startedr  TF)r  rZ  r&   r7  rÙ   rÝ   rX   r´   rÍ   r  rV  rc   r  r;   râ  r  )rê   rX  r:  r1  Úfuture_to_indexÚsubmit_indexr  ÚfÚsubmit_errorÚskippedÚ	skipped_irV  rð   s   &&&          r6   Ú
submit_allÚ_ConcurrentBatch.submit_all‰  s  € ð ˆØˆÜ(¨Ö2‰OˆLðØ—O‘OÔ$?ÀÇÁÓ$PÐRSÓb�ð �N‰N˜1ÔØ!"˜AÓñ#  3ð$ Ð'Ð'øô  ô Ü<¸\×JÒJØØ" =Ð1�Ü—‘ØmÔorÐszÓo{ôó ")�IØ×+Ñ+¨IÕ6×:Ñ:¸4×;QÑ;QÓR�CØ—|‘| IÕ.Ô6Ø#9¸#¿(¹(¸ÐCð  "A˜Ü2>¸sÈCÐQUÐW\Ó2]˜Ÿ™ YÓ/ñ	 ")ô
 ð Ð'Ð'ûðús   –%AÁDÁ"A8DÃ/DÄDc               ó   € V ^8„  d   QhRR/# )r0   r2   z	list[str]r4   )r5   s   "r6   r7   r  £  s   € ÷ fñ f¸9ñ fr8   c                	ó‚   € V Uu. uF.  q3V9   g   K  V P                   W#,          ,          P                  NK0  	  up# u upi rR   )r  r;   )rê   Únot_doner<  r>  s   &&& r6   Ú_running_namesÚ_ConcurrentBatch._running_names£  s7   € ÙDLÓeÁH¸qÐUdÑPdÔ:�×!Ñ! /Õ"4Õ5×:Ô:ÁHÑeÐeùÒes   …<’'<c               ó    € V ^8„  d   QhRRRR/# )r0   r)  r›   r2   r¨   r4   )r5   s   "r6   r7   r  ¦  s   € ÷ 8ñ 8À<ð 8ÐTXñ 8r8   c                óB  € V P                   p\        P                  ! 4       p RpVev   W0P                  P                  4       ,           \        P                  ! 4       ,
          pV^ 8:  d*   V Uu0 uF  qˆP                  4       '       d   K  VkK  	  p	pM\        Wg4      pVe   X^ 8”  d#   \        P                  P                  WR7      w  r©X	'       g   R# VRJ;'       d7    \        P                  ! 4       W0P                  P                  4       ,           8¬  pV'       d�   V	 Uu0 uF  qˆV9   g   K  W(,          kK  	  upV n
        \        P                  RV P                  \        V P                  4      RP                  V P!                  W’4      R,          4      4       MÇVP"                  '       d.   VP%                  VP&                   R	\        V	4       R
2RR7       Mˆ\)        \        P                  ! 4       V,
          4      pV^ 8”  dZ   V^,          ^8  dL   V P!                  W’4      pVP+                  RV R\        V	4       RRP                  VR,          4       R24       EKD  V	 F  pVP-                  4        K  	  V P.                  P1                  4        V'       dA   VP2                  ;_uu_ 4        \5        VP6                  4      pRRR4       \9        VX4       R# \        P                  P                  V	RR7       R# u upi u upi   + '       g   i     LK; i)z™Wait with periodic heartbeats and interrupt checks; True when the batch was
abandoned (deadline or interrupt) and the executor must not join its workers.Tg      @Nr‚  FzIconcurrent tool batch timed out after %.1fs; %d tool(s) still running: %sú, :Né   Nu   âš¡ Interrupt: cancelling z pending concurrent tool(s)©Úforcezconcurrent tools running (zs, z remaining: :NrÊ   Nrn  rJ  )rZ   r  rÒ  rŒ  r/  r,  rÁ   r0  r1  r®  r  rX   r´   r`  rÍ   rº  rG  r3  Ú_vprintÚ
log_prefixrv   r£  r_  r  rö  r‘  r¦   r’  rž  )rê   r1  r<  r)  rZ   Ú_conc_startÚwait_timeoutr7  r>  rF  Ú_doneÚ	timed_outÚ_conc_elapsedÚ_still_runningÚworker_tidss   &&&&           r6   Úawait_completionÚ!_ConcurrentBatch.await_completion¦  sŒ  € ð —
‘
ˆÜ—i’i“kˆØØˆLØÒ#Ø$×'>Ñ'>×'OÑ'OÓ'QÕQÔTX×TbÒTbÓTdÕd�	Ø ”>Ù+2ÓC©7 a¿&¹&¿(§ ©7�HÐC�Hä#& |Ó#?�LØÒ 9¨q¤=Ü",×"4Ñ"4×"9Ñ"9¸'Ð"9Ó"X‘�ßÙà ¨Ð,×zÐz´·²Ó1AÀX×PgÑPg×PxÑPxÓPzÕEzÑ1zˆIßÙFNÓ)gÁhÀÐWfÑRfÔ*<¨/×*<Ð*<ÁhÑ)g�Ô&Ü—‘Ø_Ø—N‘NÜ˜×.Ñ.Ó/Ø—I‘I˜d×1Ñ1°(ÓLÈRÕPÓQõ	ð ×+×+Ð+ð —‘Ø×'Ñ'Ð(Ð(BÄ3ÀxÃ=À/ÐQlÐmØð õ ô
 !$¤D§I¢I£K°+Õ$=Ó >�à  1Ô$¨¸Õ);¸aÔ)?Ø%)×%8Ñ%8¸Ó%S�NØ×)Ñ)Ø4°]°OÀ3Ü˜x›=˜/¨°d·i±iÀÈrÕ@RÓ6SÐ5TÐTUðWôò Û�Ø—‘–
ñ ð �I‰I×ÑÔßØ×4×4Ó4Ü"& u×'AÑ'AÓ"B�K÷ 5ä& u¨kÔ:ñ ô ×"Ñ"×'Ñ'¨¸#Ð'Ô>Ùùò]  Dùò *h÷< 5×4ús$   Á.LÂ
LÄ#L	Ä0L	Ê5LÌL	c               ó   € V ^8„  d   QhRR/# rî   r4   )r5   s   "r6   r7   r  à  s   € ÷ Zñ Z�Tñ Zr8   c           	     óÜ  € \        V P                  4       UUu. uF  w  rVP                  e   K  VNK  	  pppV'       g   R# V P                  e'   \        P
                  ! 4       V P                  ,           MRp\        V Uu. uF"  qRV P                  V,          P                  3NK$  	  up4      p^ RIH	p V! VR7      pRp V P                  Ws4      w  ršV P                  WšV4      pV'       d   V P                  P                  4        VP                  V'       * VR7       R# u uppi u upi   T'       d   T P                  P                  4        TP                  T'       * TR7       i ; i)zDDispatch the runnable calls on a daemon pool and wait for the batch.Nr>  rE  FrF  )r  r  rR  r`  r  r/  rÓ   r;   rY  r?  rB  rX  r  rö  r[  )rê   r  r  r:  r)  rÒ   r?  rX  Úabandon_executorr1  r<  s   &          r6   rˆ  Ú_ConcurrentBatch.runà  s,  € ä#,¨T×->Ñ->Ô#?ÔZÑ#?™%˜!À2Ç>Á>—A�AÑ#?ˆÑZßÙØ8<¿¹Ò8R”4—>’>Ó# d§n¡nÖ4ÐX\ˆÜ1ÑaiÓ2jÑaiÐ\]°t¸T×=NÑ=NÈqÕ=Q×=VÑ=VÓ3WÑaiÑ2jÓkˆå>Ù+¸ÔDˆØ Ðð	ZØ'+§¡°xÓ'JÑ$ˆGØ#×4Ñ4°WÈxÓXÐ÷  Ø—	‘	×!Ñ!Ô#Ø×ÑÐ'7Ô#7ÐHXÐÖYùó# [ùò 3kø÷  Ø—	‘	×!Ñ!Ô#Ø×ÑÐ'7Ô#7ÐHXÐÕYús   ™D$°D$Â(D*Ã%D/ Ä/<E+)	rZ   rÒ  rc   r  r¥   r  r  r  r`  N)r…   r†   r‡   rˆ   r‰   ry  r1  r7  rB  rG  rX  rˆ  rŠ   r4   r8   r6   r  r  /  s6   † ñNõ1õ5Põn)õ"(õ4fõ8÷tZñ Zr8   r  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   rV  rß   rT  r¨   r`  r›   r2   z tuple[str, float, Optional[str]]r4   )r5   s   "r6   r7   r7   ö  s.   € ÷ >ñ >¨ð >ÀDð >ÐUað >ð  gGñ >r8   c               óÈ  € V'       d_   Ve   VR R2MRpRVP                    RV 2p\        \        T;'       g    RR,          4      R	R
VR7      p\        T;'       g    R4      Rr‡MfV P                  '       d4   \        V 4      p	RVP                    RV	 R2p\        RRRV	 2R7      pRRr‡M!RVP                    R2p\        RRVR7      pRRr‡VP                  ! W3/ VB  WWV3# )zÐSynthesize the result for a slot no worker filled (deadline, interrupt, or a thread
that never returned), emit its terminal post_tool_call, and return
``(function_result, tool_duration, effect_disposition)``.NrP  rQ  zthe configured timeoutrN  rO  r  rû   rƒ  rR  rý   r­   rK  z was skipped. rL  rú   rü   rø   r  z!': thread did not return a resultrŽ   Úthread_missing_result)r;   rI   rv   r{   r3  r   ró   )
rZ   rV  rT  r`  Úsuffixr[   rò   r›  r  Úwhys
   &&$$      r6   Ú_unfinished_tool_resultrc  ö  s  € ÷ Ø(1Ò(=�I˜c�? !Ñ$ÐC[ˆØ2°3·8±8°*Ð<OÐPVÈxÐXˆÜ¤3¨	×(8Ð(8°S¸DÕ'@Ó#AÈ)Ð`nð  Nô  OˆÜ,1°)×2BÐ2B¸sÓ,CÀYÑ)Ø	×	#×	#Ð	#Ü$ UÓ+ˆØ:¸3¿8¹8¸*ÀNÐSVÐRWÐWXÐYˆÜ˜kÐ6JÐ\vÐwzÐv{ÐZ|Ô}ˆØ,/°Ñ)à2°3·8±8°*Ð<]Ð^ˆÜ˜gÐ2IÐYhÔiˆØ,/°Ð)Ø‡M‚M�%Ñ4¨GÒ4ØÐ+=Ð=Ð=r8   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r0   r¥   r¦   rc   r3   rW  r  rš  r*   r2   r¨   r4   )r5   s   "r6   r7   r7     s2   € ÷ "ñ "¨4ð "ÀCð "ÐP`ð "Ðjvð "Ð{ñ "r8   c                ó`  € \        VP                  4       EF“  w  rVVP                  V,          pVf=   VP                  V4      RRr©p\	        WWSP
                  9   VP                  R7      w  r¼pMrVP                  VP                  VP                  VP                  VP                  3w  r‹rÉp
V
'       d   RMRpVP                  e   VP                  WP                  4       \        YY‹YLYšY×RJV'       d   VP                  M	\        4       R R7      pVf    R# Vw  pppV P!                  4       '       d9   \#        VP$                  VP&                  VVR7      pV P)                  R	V 24       M.\+        V 4      '       d   \-        W^,           V\/        V4      4       \1        WVVV
4       EK–  	  R# )
z|Append every slot's result in original call order; returns False at the first
failed flush (the caller must stop the batch).NTF)rT  r`  r  c                ó&   € \        V 4      R ,          # ©r*  )r    )Úress   &r6   rÞ  Ú'_append_batch_results.<locals>.<lambda>!  s   € Ô&>¸sÓ&CÀDÖ&Ir8   )rš  r›  rœ  r^  r  r’  ra  r“  r•  ú  )r  r  r  rV  rc  r  r`  rð   r¨  rœ  r^  rR  r  rÀ  ra  r  Ú _should_emit_quiet_tool_messagesÚ_get_cute_tool_message_implr;   rà   Ú_safe_printry  rà  r    r‘  )rZ   r¥   rc   rW  rš  r  r  ÚrrV  rœ  r^  r[   r›  r  Ú	committedÚ
_persistedÚdisplay_function_resultrŽ  Úcute_msgs   &&&&&              r6   Ú_append_batch_resultsrs    sƒ  € ô ˜5×-Ñ-×.‰ˆØ�M‰M˜!Õˆð Š9Ø%'§V¡VÐ,=Ó%>ÀÀe˜7ˆCÜAXØ a×+BÑ+BÑ&BÈeÏoÉoôBÑ>ˆOÑ,>ð FGÇUÁUÈAÏHÉHÐVW×V`ÑV`Ðbc×blÑblÐno×nwÑnwÐEwÑBˆC -¸7ß+2¡¸ÐØ�~‰~Ò)Ø×*Ñ*¨5·(±(Ô;Ü'Ø˜SØÀØ1ÀT¸M×bcÐTU×T^ÒT^ÔirÓitÙIô	
ˆ	ð ÒÚØ=FÑ:ˆ
Ð+¨]à×1Ñ1×3Ò3Ü2°3·8±8¸S¿X¹XÀ}Ð]tÔuˆHØ×Ñ  8 *˜oÕ.Ü# E×*Ò*Ü! %¨Q­°Ô?WÐXoÓ?pÔqä$ UÐ1HÈ-ÐY`×añ= /ñ> r8   Úfinalizec          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# ©r0   r¥   r¦   rc   r3   Úapi_call_countrv   rt  r¨   r2   rC   r4   )r5   s   "r6   r7   r7   1  sB   € ÷ *bñ *bÀdð *bÐ_bð *bÐtwð *bð  KOð *bð  [_ñ *br8   c               óH  € VP                   p\        V4      p\        V 4      pV P                  '       d<   \	        V P
                   RV R24       \        WWcR\        V 4       R2RRRR7       R	# V U	u. uF  p	\        W	4      NK  	  p
p	R
P                  R V
 4       4      p\        V 4      '       d   \	        RV RV 24       \        4       p\        WW:V4      pW°n        V P                  RV RV 24       \        V R/ RV R2R7      p VP!                  4        V'       dV   VP"                   Uu. uF
  qÿf   K  VNK  	  ppVP%                  R\        V4       RV R\'        R V 4       4      R R24       \)        YY=T4      '       g   R	# T'       d   \+        YT\        T
4      T4       R	# R	# u up	i u upi   T'       d]   TP"                   Uu. uF
  qÿf   K  TNK  	  Mu upi ppTP%                  R\        T4       RT R\'        R T 4       4      R R24       i i ; i)zÊExecute tool calls concurrently; results are appended in original call order.
``finalize=False`` skips end-of-batch budget enforcement and /steer injection (the
segmented dispatcher owns turn-end work).õ   âš¡ Interrupt: skipping z tool call(s)õ2   [Tool execution cancelled â€” {name} was skipped. rL  Úuser_interruptúcancelled tool resultF)rP   r
  r  r  NrK  c              3  ó8   "  € T F  qP                   x € K  	  R # 5irR   )r;   )rL   r  s   & r6   rN   Ú0execute_tool_calls_concurrent.<locals>.<genexpr>F  s   é € Ð>±¨2Ÿwžw³ùó   ‚u     âš¡ Concurrent: u    tool calls â€” z
executing z tools concurrently: r<   u   âš¡ running z tools concurrently©r§  u   âš¡ Ú/z tools completed in c              3  ó8   "  € T F  qP                   x € K  	  R # 5irR   )r¨  )rL   rn  s   & r6   rN   r~  V  s   é € ÐRpÑgoÐbc×S]ÖS]Ógoùr  rP  zs total)r  rÍ   rx   r3  r{  rP  r  r   r[  rº  ry  r£   r  r€  r£  Ú_start_quiet_tool_spinnerrˆ  r  r¼  Úsumrs  rÕ  )rZ   Úassistant_messager¥   rc   rw  rt  r  rÐ  Ú_tool_budgetr  r  Útool_names_strr`  rW  Úspinnerrn  Úfinisheds   &&&&&$           r6   Úexecute_tool_calls_concurrentrŠ  1  s!  € ð #×-Ñ-€JÜ�J“€IÜ$ UÓ+€Là×!×!Ð!Ü�×!Ñ!Ð"Ð":¸9¸+À]ÐSÔTÜ$Ø˜ZØJÔKaÐbgÓKhÐJiÐijÐkØ,Ø/Ø"'õ	
ñ 	á:DÓE¹*°BÔ$ UÖ/¹*€LÐEà—Y‘YÑ>±Ó>Ó>€NÜ˜e×$Ò$ÜÐ" 9 +Ð-=¸nÐ=MÐNÔOô 1Ó2€IÜ˜UÐ.?ÈyÓY€EØ(ÔØ	×Ñ˜J y kÐ1FÀ~ÐFVÐWÔXä'¨¨r°2¸|ÈIÈ;ÐViÐ=jÔk€GðØ�	‰	ŒçØ#(§=¢=ÓB¡=˜aŸ˜¡=ˆHÐBØ�L‰L˜4¤ H£˜¨a°	¨{Ð:NÌsÑRpÑgoÓRpÓOpÐqtÐNuÐu|Ð}Ô~ä  Ð2CÈL×YÒYÙßÜ˜UÐ.?ÄÀ\ÓARÐT`Öañ ùò- Fùò" Cø÷ Ø#(§=¢=ÓB¡=˜aŸ˜¢=ùÒBˆHÐBØ�L‰L˜4¤ H£˜¨a°	¨{Ð:NÌsÑRpÑgoÓRpÓOpÐqtÐNuÐu|Ð}Õ~ð ús0   Á4F1ÄF; Ä2F6Ä<F6Æ;H!ÇG#ÇG#Ç"?H!r  r§  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   ra   r3   rb   rI   r  r¨   r§  r  r4   )r5   s   "r6   r7   r7   a  s*   € ÷ ñ °Cð Èð ÐW[ð Ðkxñ r8   c               ó–  € V P                  4       '       d   V'       d   V P                  4       '       g   R# \        P                  ! \        P
                  ! 4       4      pVf9   \        W4      ;'       g    Tp\        W4       R\        W4      ;'       g    T 2p\	        V RV 2RV P                  R7      pVP                  4        V# )zŸStart the quiet-mode kawaii spinner for one tool call, or return None; ``gate=False``
skips ``_should_start_quiet_spinner`` (context-engine tools always spin).Nr  Údots)Úspinner_typeÚprint_fn)rk  Ú_should_start_quiet_spinnerÚrandomÚchoicer   Úget_waiting_facesrx  Ú_tool_row_emojiÚ_build_tool_labelÚ	_print_fnr¸  )rZ   ra   rb   r  r§  Úfacer†  rˆ  s   &&&$$   r6   rƒ  rƒ  a  sº   € ð ×1Ñ1×3Ò3¿ÀU×EfÑEf×EhÒEhÙÜ�=Š=œ×8Ò8Ó:Ó;€DØ‚}Ü4°]ÓR×cÐcÐVcˆÜ" =Ó?Ð@ÀÔBSÐTaÓBp÷  CBð  CBð  uBð  BCð  DˆÜ˜t˜f A e WÐ-¸FÈUÏ_É_Ô]€GØ‡M�M„OØ€Nr8   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   ra   r3   rb   rI   r›  r{   r2   rC   r4   )r5   s   "r6   r7   r7   o  s1   € ÷ Fñ F¸cð FÐRVð FÐglð FÐy}ñ Fr8   c                óº   € V'       g   V P                  4       '       d=   \        W#WER7      pV'       d   VP                  V4      MV P                  RV 24       R# R# )zPStop the spinner with the cute completion line, or print it when no spinner ran.r•  rj  N)rk  rl  r¼  rO  )rZ   rˆ  ra   rb   r›  rð   Úcutes   &&&&&& r6   Ú_finish_quiet_tool_spinnerr›  o  sD   € ç�%×8Ñ8×:Ò:Ü*¨=ÈÔfˆß%ˆ�‰�TÔ¨5¯=©=¸2¸d¸V¸Ó+Eúñ ;r8   c               ó    € V ^8„  d   QhRRRR/# )r0   rb   rI   r2   r3   r4   )r5   s   "r6   r7   r7   v  s   € ÷ yñ y¨4ð y°Cñ yr8   c                óz  € \        V P                  R 4      ;'       g    R4      P                  4       P                  4       pV P                  R4      pVR9   d   RV 2# V'       d&   \	        V\
        4      '       d   R\        V4       R2# V P                  R4      ;'       g    RR,          pV'       d   RV R	2# R
# )Úactionr<   Útasksu   ðŸ”€ subagent u   ðŸ”€ delegating u    tasks Â· (/agents to monitor)Úgoal:Né   Nu   ðŸ”€ u    Â· (/agents to monitor)u'   ðŸ”€ delegating Â· (/agents to monitor))r¦   Ústeerr¼  )r3   rJ   rI  ÚlowerrH   r¦   rÍ   )rb   rž  rŸ  Úgoal_previews   &   r6   Ú_delegate_spinner_labelr¥  v  s¯   € Ü�×"Ñ" 8Ó,×2Ð2°Ó3×9Ñ9Ó;×AÑAÓC€FØ×Ñ˜gÓ&€EØÐ*Ô*Ø ˜xÐ(Ð(ß”˜E¤4×(Ò(Ø!¤# e£* Ð-KÐLÐLØ!×%Ñ% fÓ-×3Ð3°°SÕ9€Lß=IˆU�<�.Ð 8Ð9ÐxÐOxÐxr8   c                  ó¤   € ] tR tRt$ RtR]R&   RtR]R&   RtR]R	&   RtR
]R&   Rt	R]R&   Rt
R]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR# )Ú_SequentialDispatchi�  zMHow one sequential call executes: the callable plus its spinner/error policy.zCallable[[dict], Any]ré  Nr   rˆ  zOptional[list]Úmiddleware_trace_argz$Optional[Callable[[Exception], str]]Úerror_resultr<   r3   Ú	error_logFr¨   Úhandles_keyboard_interruptÚis_delegateTÚfinish_spinnerÚfinish_in_finallyÚtransform_appliedr4   )r…   r†   r‡   rˆ   r‰   r	  rˆ  r¨  r©  rª  r«  r¬  r­  r®  r¯  rŠ   r4   r8   r6   r§  r§  �  sj   ‡ áWà"Ó"Ø€GˆSÓØ+/Ð˜.Ó/Ø9=€LÐ6Ó=Ø€IˆsÓØ',Ð Ó,Ø€K�ÓØ€N�DÓØ"Ð�tÓ"Ø#Ð�t×#r8   r§  c               ó$   € V ^8„  d   QhRRRRRR/# )r0   rV  rß   r¥   r¦   r2   r§  r4   )r5   s   "r6   r7   r7   ‘  s'   € ÷ Bñ B¨\ð BÀTð BÐNañ Br8   c                óv  a aaaaa	a
a€ VP                   VP                  VP                  VP                  VP                  3w  opooo
SR8w  d:   S\
        9   d/   \
        S,          o	\        SSSR7      o\        V VV	3R lRR7      # SR8X  d8   \        S SV\        V4      R7      pVS n
        \        S P                  VRR7      # S P                  '       d8   SS P                  9   d'   \        V VV3R	 l\        S SVRR
7      V3R lRR7      # S P                  '       dE   S P                  P                  S4      '       d$   \        V V3R l\        S SV4      V3R lRR7      # R V VVV
V3R llp\        TS P                  '       d   \        S SV4      MRS
V3R lRR\!        S P                  4      RR7      # )z½Pick the execute callable for one sequential call and start its spinner. Precedence:
inline agent-level tools, delegate_task, context-engine tools, memory-provider tools,
then the registry.r"  )rc   rB   r¥   c                ó   <€ S! SV S4      # rR   r4   )r  rZ   Ú
inline_ctxÚinline_executors   &€€€r6   rÞ  Ú._resolve_sequential_dispatch.<locals>.<lambda>œ  s   ø€ ±_ÀUÈIÐWaÔ5br8   F)r®  r€  T)rˆ  r¬  c                ó@   <€ SP                   P                  SV SR 7      # ))r¥   )rt   Úhandle_tool_call)r  rZ   ra   r¥   s   &€€€r6   rÞ  rµ  £  s    ø€  e×&>Ñ&>×&OÑ&OÐP]Ð_hÐs{Ð&OÔ&|r8   )r  c                ó@   <€ \         P                  ! R RS RV  2/4      # )rŽ   zContext engine tool 'ú
' failed: ©r’   r–   ©Úera   s   &€r6   rÞ  rµ  ¥  s%   ø€ ¤4§:¢:¨wÐ:OÐP]ÈÐ^hÐijÐhkÐ8lÐ.mÔ#nr8   z1context_engine.handle_tool_call raised for %s: %s)ré  rˆ  r©  rª  c           	     ój   <€ SP                   P                  ST \        SR R4      ;'       g    RR7      # )Ú_gateway_session_keyr<   )Ú
caller_gsk)Ú_memory_managerr·  r?   )r  rZ   ra   s   &€€r6   rÞ  rµ  «  s6   ø€  e×&;Ñ&;×&LÑ&LØ˜yÜ# EÐ+AÀ2ÓF×LÐLÈ"ð 'Mô 'r8   c                ó@   <€ \         P                  ! R RS RV  2/4      # )rŽ   zMemory tool 'r¹  rº  r»  s   &€r6   rÞ  rµ  °  s#   ø€ ¤4§:¢:¨w¸-ÈÀÐV`ÐabÐ`cÐ8dÐ.eÔ#fr8   z1memory_manager.handle_tool_call raised for %s: %sc               ó    € V ^8„  d   QhRRRR/# )r0   r  rI   r2   r   r4   )r5   s   "r6   r7   Ú2_resolve_sequential_dispatch.<locals>.__annotate__µ  s   € ÷ ñ ˜Dð  Sñ r8   c                óÀ  <€ ^ RI pVP                  4       ;_uu_ 4        TP                  ST SSSP                  ;'       g    R\	        SRR4      ;'       g    R\	        SRR4      ;'       g    RSP
                  '       d   \        SP
                  4      MRRRR\        S4      \	        SRR4      \	        SRR4      R7      uuRRR4       #   + '       g   i     R# ; i)	r}  Nr<   r  r  Tr$  r%  )rB   r  r  r  Úenabled_toolsÚskip_pre_tool_call_hookr"  r#  r$  r$  r%  )r*  Úsuppress_post_tool_call_hookÚhandle_function_callr  r?   Úvalid_tool_namesr¦   )r  r*  rZ   rc   ra   rè   rB   s   & €€€€€r6   Ú_executeÚ._resolve_sequential_dispatch.<locals>._executeµ  sÇ   ø€ Ûà×5Ñ5×7Õ7Ø×3Ñ3ØØØ!Ø)Ø ×+Ñ+×1Ð1¨rÜ Ð'9¸2Ó>×DÐDÀ"Ü& uÐ.GÈÓL×RÐRÐPRØ>C×>T×>TÐ>Tœd 5×#9Ñ#9Ô:ÐZ^Ø(,Ø-1Ø/3Ü.2Ð3CÓ.DÜ!(¨Ð0BÀDÓ!IÜ")¨%Ð1DÀdÓ"Kð 4ó ÷ 8×7×7Ó7ús   ž8CÁCÁ-CÂA CÃC	Nc                ó   <€ R S RV  2# )rN  r(  r4   r»  s   &€r6   rÞ  rµ  Î  s   ø€ Ð!7¸°ÀcÈ!ÈÑMr8   z&handle_function_call raised for %s: %s)ré  rˆ  r¨  r©  rª  r«  r­  r¯  )r;   rà   rá   râ   rã   r   r   r§  rƒ  r¥  Ú_delegate_spinnerÚ_dispatch_delegate_taskÚ_context_engine_tool_namesrÀ  Úhas_toolr(  r¨   )rZ   rV  r¥   rb   rˆ  rÊ  rc   ra   r³  r´  rè   rB   s   f&f   @@@@@@r6   Ú_resolve_sequential_dispatchrÑ  ‘  sŽ  ÿ€ ð
 	�‰�#—(‘(˜CŸK™K¨¯©°c·i±iðWÑS€M�=Ð"3°\ÐCSð ˜Ô'¨MÔ=RÔ,Rä/°Õ>ˆÜ&Ð9JÐYeÐpxÔyˆ
Ü"Ö#bÐv{Ô|Ð|Ø˜Ô'Ü+¨E°=À-ÔWnÐo|ÓW}Ô~ˆØ")ˆÔÜ" 5×#@Ñ#@È'Ð_cÔdÐdØ×'×'Ð'¨M¸U×=]Ñ=]Ô,]Ü"Þ|Ü-¨e°]ÀMÐX]Ô^ÜnØIô	
ð 	
ð ××Ð ×!6Ñ!6×!?Ñ!?À×!NÒ!Nä"õô .¨e°]ÀMÓRÜfØIô
ð 	
÷ô ô* ØØRW×Rb×RbÐRbÔ)¨%°ÀÔNÐhlØ-ÜMØ:Ø#'Ü˜E×,Ñ,Ó-Øô	ð 	r8   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r0   r¥   r¦   rc   r3   Únoticer2   r¨   r4   )r5   s   "r6   r7   r7   Ö  s1   € ÷ fñ f°ð fÐTWð fÐdgð fÐ{ñ fr8   c               óx   € V P                  V P                   R\        V4       RV 2RR7       \        WW#3/ VB # )zƒAnnounce an interrupt and append one skipped result per unstarted call; False when
a flush failed (the caller must stop the batch).ry  r  TrM  )rO  rP  rÍ   r  )rZ   r¥   r7  rc   rÓ  Úskip_kwargss   &&&&$,r6   Ú_skip_remaining_sequentialrÖ  Ö  sG   € ð 
‡M�M�U×%Ñ%Ð&Ð&>¼sÀ9»~Ð>NÈaÐPVÈxÐXÐ`d€MÔeÜ'¨¸ÑeÐYdÑeÐer8   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   r¥   r¦   rV  rß   rR  r3   r2   r¨   r4   )r5   s   "r6   r7   r7   Ý  s0   € ÷ nñ n°dð nÀð nÐ\_ð nÐdhñ nr8   c                ó¶   € VP                  W4       VP                  \        VP                  W2P                  4      4       \        WRVP                   2R7      # )zWEmit + append the parse-error result for a call whose arguments were not a JSON object.zinvalid tool arguments r  )r  r  r$   r;   râ   r¶   )rZ   r¥   rV  rR  s   &&&&r6   Ú _append_invalid_arguments_resultrÙ  Ý  sI   € à×Ñ˜uÔ2Ø‡O�OÔ,¨S¯X©X°{ÇKÁKÓPÔQÜ0°ÐJaÐbe×bjÑbjÐakÐHlÔmÐmr8   c               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r0   Údispatchr§  rV  rß   rJ  r  r¥   r¦   rÑ  rv   Útool_start_timer{   r2   z tuple[_ManagedToolResult, float]r4   )r5   s   "r6   r7   r7   ä  sP   € ÷ 3"ñ 3"à!ð3"ð 
ð3"ð
 ð3"ð ð3"ð ð3"ð ð3"ð &ñ3"r8   c               óò  € Rp \        V 3/ \        VP                  4       VP                  R7      BRVP                  RVRV/B p	V	P
                  Vn        V	P                  pTP2                  '       d   RT n        \6        P6                  ! 4       T,
          pTP8                  '       d?   TP:                  '       d-   \=        YP>                  TP,                  TP
                  YÈ4       TP8                  '       d?   TP:                  '       g-   \=        YP>                  TP,                  TP
                  YÈ4       Yœ3#   \         d¢    TP                  '       g   h \        P                  ! \        4      ;_uu_ 4        T P                  R\        R7       RRR4       M  + '       g   i     M; iTP                  Y4      p\        YYRP                   R\#        T 4       R	2R
7       h \         d|   p
TP$                  f   h TP%                  T
4      p\&        P)                  TP*                  TP,                  T
RR7       \/        Y²P
                  TP0                  RRR7      p	 Rp
?
ELRp
?
ii ; i  TP2                  '       d   RT n        \6        P6                  ! 4       T,
          pTP8                  '       dA   TP:                  '       d.   \=        YP>                  TP,                  TP
                  YÈ4       i i i ; i)zýRun one sequential call with its spinner/error policy; returns ``(managed, duration)``.
KeyboardInterrupt (registry tools only) emits results for THIS and every remaining call
before re-raising so the tool-call turn keeps matching results (alternation).N)rè   ré  rJ  rÑ  r'  rS  rz  rL  )rP   Tro  Frþ  ) rd  rI   rë   r¨  ré  rà   rð   r,  r«  r0  r1  rW   r^  r   r  r  rá   r   r©  rX   rŽ   rª  r;   r]  rã   r¬  rÍ  r  r­  r®  r›  rˆ  )rZ   rÛ  rV  rJ  r¥   Úremaining_callsrÑ  rÜ  Ú_spinner_resultr-  r.  r[   r›  s   &&&$$$$$     r6   Ú_run_sequential_callrà  ä  sh  € ð €Oð!tÜ;Øñ
ä�3×(Ñ(Ó*¸X×=ZÑ=ZÔ[ñ
ð ×$Ñ$ð
ð $ð	
ð
 (ò
ˆð —<‘<ˆŒØ!Ÿ.™.ˆð( ××ÐØ&*ˆEÔ#ÜŸ	š	› oÕ5ˆØ×"×"Ð" x×'A×'AÐ'AÜ& u×.>Ñ.>ÀÇÁÈ#Ï(É(ÐTaÔsØ××Ð x×'A×'AÐ'AÜ" 5×*:Ñ*:¸C¿H¹HÀcÇhÁhÐP]ÔoØÐ!Ð!øô5 ô Ø×2×2Ð2Øä× Ò ¤×+Õ+Ø�O‰OÐ0Ô>TˆOÔU÷ ,×+×+Ð+úà×,Ñ,¨UÓDˆÜ$Ø˜_¯k©kØJÔKaÐbgÓKhÐJiÐijÐkõ	
ð 	Üô IØ× Ñ Ò(ØØ"×/Ñ/°
Ó;ˆÜ�‰�X×'Ñ'¨¯©°:ÈˆÔMÜ$¨OÇ(Á(Ð]`×]fÑ]fÐpuð  CHô  IŽûðIûð ××ÐØ&*ˆEÔ#ÜŸ	š	› oÕ5ˆØ×"×"Ð" x×'A×'AÐ'AÜ& u×.>Ñ.>ÀÇÁÈ#Ï(É(ÐTaÕsð (BÐ"ús]   „AD: Ä:I*Å#I*Å:FÆ	I*ÆF+Æ&AI*Ç.I*Ç/A0I%ÉI- É%I*É*I- É-AK6Ê5K6Ë/K6c               ó8   € V ^8„  d   QhRRRRRRRRR	R
RRRRRR/# )r0   r¥   r¦   rV  rß   r-  r]  r›  r{   rÞ  rv   rš  r*   r¯  r¨   r2   r4   )r5   s   "r6   r7   r7     sZ   € ÷ ,ñ ,°ð ,¸<ð ,ÐRdð ,Ðx}ð ,ð  GJð ,ð  T`ð ,ð  uyð ,ð  ~Bñ ,r8   c               óš  a € VP                   VP                  VP                  uVn         Vn        p\	        V\
        \        34      p	VP                  '       g   V	'       gw   VP                  S V\        VR,          4      R7       V'       gK   \        S VP                  VP                   VVP                  VP                  \        VR,          4      R7      p\	        V\        4      '       d   \        V4      M\        \        V4      4      p
\!        VP                  V4      w  r¼\#        S YTYdY³P                  V	'       d   RMRRVP$                  V 3R lV
\&        R7      pVf   R	# Tw  rŽp^ R
IHp T! T;'       g    \-        VP                  4      4       \/        S W.WóP                  4       \1        S 4      '       d   \3        S WTV4       R# )u¨   Terminal hook â†’ observe â†’ commit â†’ completion callbacks/print for one sequential
result; False when the incremental flush failed (the caller must stop the batch).rû   r)  )ra   rb   rð   rc   rB   rþ   r­   NTc                ój   <€ \        V \        4      '       d   SP                  '       g
   V R ,          # T # rg  )rH   r3   rz  )rh  rZ   s   &€r6   rÞ  Ú,_publish_sequential_result.<locals>.<lambda>4  s)   ø€ ¬z¸#¼s×/CÒ/CÈE×La×LaÐLa # d¥)Ð"jÐgjÐ"jr8   )
rš  r›  rœ  r^  r  r’  ra  r“  r–  r—  F)Úmark_batch_outcome)rà   rè   rð   rã   rH   rc  re  r^  ró   rv   r   r;   rá   râ   r3   rÍ   r   rÀ  ra  r    rð  rå  r¨   r‘  ry  rà  )rZ   r¥   rV  r-  r›  rÞ  rš  r¯  r[   Ú_execution_timed_outÚ_result_lenÚ_is_error_resultr/  ro  rq  rŽ  rå  s   f&&&$$$$         r6   Ú_publish_sequential_resultré    su  ø€ ð ,3¯<©<¸×9QÑ9QÐSZ×SaÑSaÐ(€C„HˆcŒi˜Ü% oÔ8JÔL`Ð7aÓbÐð
 �?�?ˆ?×#7Ø�‰�e˜_¼#¸mÈdÕ>RÓ:SˆÔTß Ü9Ø S§X¡X¸S¿X¹XÈoØ"%§+¡+¸C¿K¹KÜ °Õ 4Ó5ôˆOô +5°_Äc×*JÒ*J”#�oÔ&ÔPSÔTWÐXgÓThÓPi€KÜ.¨s¯x©x¸ÓIÑÐÜ#Øˆx˜oØÐ=M×WfÑWfß(<™9À$ÐQUÐ`g×`pÑ`pÜjØ%Ü-ô€Ið ÒÙØ>GÑ;€O¨mõ AÙÐ'×@Ð@¬4°·±Ó+@ÔAä  ¨Àm×UdÑUdÔeÜ˜e×$Ò$Ü˜e U¸?ÔKÙr8   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# rv  r4   )r5   s   "r6   r7   r7   I  sB   € ÷ 	~ñ 	~Àdð 	~Ð_bð 	~Ðtwð 	~ð  KOð 	~ð  [_ñ 	~r8   c               ón  € ^ RI Hp ^ RIHpHp V! WP
                  4       FI  p	V! W	W#4      ;_uu_ 4        \        W! V	R7      W#VRR7       RRR4       \        V RR4      '       g   KH   R# 	  V'       d-   \        WV\        VP
                  4      \        V 4      4       R# R#   + '       g   i     L`; i)r}  ©ÚSimpleNamespace)Úterminal_approval_batchÚterminal_approval_runs©r  F©rt  Nr²   )Útypesrí  rð  rî  rï  r  Ú_execute_tool_calls_sequentialr?   rÕ  rÍ   rx   )
rZ   r…  r¥   rc   rw  rt  rí  rî  rï  Úcallss
   &&&&&$    r6   Úexecute_tool_calls_sequentialrõ  I  s�   € Ý%ß]Ù'¨×/KÑ/KÖLˆÙ$ U°8×OÕOÜ*¨5°/ÈUÔ2SÐU]ð  sAð  LQõ  R÷ Pä�5Ð;¸U×CÔCÚñ	 M÷
 Ü˜UÐ.?ÄÐEV×EaÑEaÓAbÔduÐv{Ód|Ö}ñ ÷	 P×Oús   µB$Â$B4c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# rv  r4   )r5   s   "r6   r7   r7   U  sB   € ÷ 7`ñ 7`Àtð 7`Ð`cð 7`Ðuxð 7`ð  LPð 7`ð  \`ñ 7`r8   c               ón  € \        V 4      pVP                  p\        V^4       EFk  w  r‰\        V RR4      '       d    R# V P                  '       d7   \        WWx^,
          R VRR\        V 4       R2RR R	R
7	      '       g    R#  EM\        W	RR7      p
V
P                  V4      pV
P                  e"   \        WWºP                  4      '       g    R# K±  \        P                  ! 4       p\        WV4      p\        WVV
P                  VWx^,
          R VVR7      w  rï\        WW¾WøWmP                   R7      '       g    R# V P                  '       g   EK0  V\#        V4      8  g   EKC  \        WWxR VRR\        V 4       R2RR7      '       g    R#  M	  V'       d   \%        WV\#        V4      V4       R# R# )zÁExecute tool calls sequentially (single calls or interactive tools). ``finalize=False``
skips end-of-batch budget enforcement and /steer injection (the segmented dispatcher
owns turn-end work).r²   FNztool call(s)rz  rL  r{  c                ó0   € \        V R R4      ;'       g    R# )Úidr<   r>   )r  s   &r6   rÞ  Ú0_execute_tool_calls_sequential.<locals>.<lambda>f  s   € ¤7¨2¨t°RÓ#8×#>Ð#>¸BÐ#>r8   r|  )rÓ  rP   r
  r  r  TrZ  )rJ  r¥   rÞ  rÑ  rÜ  )r›  rÞ  rš  r¯  zremaining tool call(s)u4   [Tool execution skipped â€” {name} was not started. zskipped tool result)rÓ  rP   r  )rx   r  r  r?   r3  rÖ  r   r[  rV  rR  rÙ  r  rÑ  rà  rJ  ré  r¯  rÍ   rÕ  )rZ   r…  r¥   rc   rw  rt  r†  r  r  r1   r  rV  rÜ  rÛ  r-  r›  s   &&&&&$          r6   ró  ró  U  sª  € ô % UÓ+€LØ"×-Ñ-€Jä! *¨a×0‰ˆÜ�5Ð;¸U×CÒCÚà×%×%Ð%Ü-Ø °­E¨FÐ!3Ð5FØ%ØNÔOeÐfkÓOlÐNmÐmnÐoØ 0Ù>Ø3÷ó ò Úä˜e¸dÔCˆØ�f‰fÐ&Ó'ˆØ�>‰>Ò%Ü3°EÀSÏ.É.×YÒYÚÙäŸ)š)›+ˆÜ/°¸HÓEˆÜ!5Ø˜SØŸ™ØØ&¨1¥u vÐ.ØØ+ô"
Ñˆô *¨%¸3ÐWdØ1=×QkÑQk÷mó mâà×%×%Ó%¨!¬c°*«o×*=Ü-Ø ¨B Ð1BØ/ØPÔQgÐhmÓQnÐPoÐopÐqØ1÷	ó ò Ùñ[ 1÷^ Ü˜UÐ.?ÄÀZÃÐR^Ö_ñ r8   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   r¥   r¦   rc   r3   rw  rv   r2   rC   r4   )r5   s   "r6   r7   r7   �  s5   € ÷ hñ hÀTð hÐ^að hÐsvð hð  OSñ hr8   c           
     óð  € ^ RI Hp VfP   \        V4      pVe(   VP                  '       d   \	        VP                  4      MRp\        VP                  VR7      pV Fb  w  rš\        V RR4      '       d    R# V! \        V
4      R7      pV	R8X  d   \        M\        pV! WW#VRR7       \        V RR4      '       g   Ka   R# 	  \        VP                  4      pV^ 8”  d   \        WW=\        V 4      4       R# R# )	a®  Execute a mixed batch as ordered parallel/sequential segments (the ``(kind, calls)``
plan from ``_plan_tool_batch_segments``), preserving per-call result order and barrier
boundaries exactly as fully-sequential execution. Turn-end work (budget + /steer) runs
once here (segments run with ``finalize=False``); each segment executor checks the
interrupt flag up front, so an interrupt drains later segments with one result per call.rì  N)Úexecution_cwdr²   Frð  Úparallelrñ  )rò  rí  r%   r‰  r   r#   r  r?   r¦   rŠ  rõ  rÍ   rÕ  rx   )rZ   r…  r¥   rc   rw  Úsegmentsrí  Ú_active_envÚ	_exec_cwdÚkindrô  Úsegment_messageÚrun_segmentÚtotal_toolss   &&&&&&        r6   Úexecute_tool_calls_segmentedr  �  sÜ   € õ &àÒÜ$Ð%6Ó7ˆØ-8Ò-DÈÏÏÈ”D˜Ÿ™Ô)Ð^bˆ	Ü,Ð->×-IÑ-IÐYbÔcˆã‰ˆÜ�5Ð;¸U×CÒCÚÙ)´T¸%³[ÔAˆØ7;¸zÔ7IÕ3ÔOlˆÙ�E¨HÈÐbgÕhÜ�5Ð;¸U×CÔCÚñ  ô Ð'×2Ñ2Ó3€KØ�Q„Ü˜UÐ.?ÔN_Ð`eÓNfÖgñ r8   )r}  rí  )rŠ  r  rõ  )¬r‰   Ú
__future__r   Úconcurrent.futuresr0  r0  r’   Úpathlibr   rg  r„  r‘  rq  r  Údataclassesr   Útypingr   r   r   Úagent.displayr   r	   r�  r
   r•  r   rl  r   Ú_get_tool_emojir   r”  r   rx  r   Úagent.compression_markerr   Úagent.interrupt_controlr   r   Úagent.message_sanitizationr   Úagent.onboardingr   r«  rZ   r   Ú	agent.lspr   r²  Úagent.inline_tool_executorsr   r   r   r   r   Úagent.message_metadatar   rU  r   r   r   r    r!   r"   r#   r$   Útools.terminal_tool_lifecycler%   Útools.thread_contextr&   Útools.tool_result_storager'   r(   r)   Útools.budget_configr*   r+   r,   Ú2hermes_cli.observability.shared_metrics_efficiencyr-   r.   r¶  Ú	getLoggerr…   rX   r  r@   r_   rp   rx   rÂ   r¿   r¢   ræ  r€   r�   ÚBaseExceptionrƒ   r˜   r£   r¶   rÆ   rÓ   r×   rÝ   rñ   rß   r  r9  r>  rO  rQ  r[  r]  r3   rc  re  rg  Úcontextmanagerr—  Úobjectr›  rž  r¤  r·  r¯  r¾  rê  rI  rë  rÇ  rÎ  r÷  r  r.  r!  r  rV  r'  r9  rd  ri  rå  r‘  rÀ  r®  rÕ  ry  r~  rà  râ  rç  ré  r  r  rc  rs  rŠ  rƒ  r›  r¥  r§  rÑ  rÖ  rÙ  rà  ré  rõ  ró  r  Ú__all__r4   r8   r6   Ú<module>r     s“  ðñõ #ã Û Û Ý Û Û 	Û Û Û Ý !ß *Ñ *÷	÷ 	ó 	õ @ß RÝ <Ý MÝ #Ý .÷õ õ 2÷	÷ 	ó 	õ 9Ý <÷ñ ÷
 XÑ Wß bð
 !*Ð à	×	Ò	˜8Ó	$€ð .Ð õOõNõõ,ð  Ð Ø#$Ð  à%*Ð "à#Ð à%*Ð "õ2ô2R�mô Rõ
õ	õõ41õ$1òõ	*ð !=Ð ð ÷.
ð .
ó ð.
ðbð &*ðð /3ðð "&ðð #'÷õDõB2ð+5ØMR÷+5ð\ ÷yð yó ðyðLÀ÷ Lð ÷+ð +ó ð+ôC˜ô Côa˜3ô a÷
FRñ FRðR ×Ññ-ó ð-ñ ‹X€
ð6°*÷ 6õ5ð '+Ð #ð :Ø!÷õ4!ð,  AÐ ðgð "×'Ó'¨Ó/Ð0Ð0~ð@ð õõõ"H1ðVMð #ðMð !%ðMð 59ðMð ðMð CG÷Mðb &)Ð "õ`ñ$ %.¨Ð@TÐ.UÓ$VÐ !õEõ`ð8dLð #ðdLð !%ðdLð 59÷dLõNFõ%eõP
ð qTð ðqTñ  )›{ðqTñ +@ðqTð (,ðqTñ *?÷qTõhõ>
DõYõ?õ`ð ÷+ð +ó ð+õ?÷%ñ %÷P3ñ 3÷DZñ DZõN>õ,"ñJ*bð  RV÷ *bð *bð`Ð^bð Ð{÷ õFõyð ÷$ð $ó ð$õBõJfõnõ3"õl,ñ^	~ð  RV÷ 	~ð 	~ñ7`ð  SW÷ 7`ð 7`÷thò6‚r8   