+
    jHàjÊÄ  ã                   óà  a € R¢ ty0 t R t^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
 ^ RIHt ^ RIt^ RIt^ RIt^ RIHtHtHtHtHt ^ RI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$H%t% ^ RI&H't' ]PP                  ! ])4      t*]! RRR7      t+] ^ k ]R£R R ll4       t,]-! 4       t.] ^k R R lt/R R lt0Rs1]Pd                  ! 4       t3]Ph                  ! 4       t5R t6R t7R t8]! 4         ^ RI9H:t: ]:! 4        ]P|                  ! 4       t?] ^k ]P€                  ! 4       tA] ^k . sB] ^k RRR.RR.R R!.R"R#.R$. R¤OR%. R¥OR(R).R*. R¦OR-R../	tC/ tD] ^k ]Pd                  ! 4       tE^tFR/ R0 ltGR§R1 R2 lltHR3 R4 ltIR5 R6 ltJR7 R8 ltKR9 R: ltLR; R< ltMR= R> ltNR? R@ ltORA RB ltPRC RD ltQRE RF ltRRGtSRH RI ltTRJtURK RL ltVRM tWRN]MRO]N! RP4      RQ]N! RR4      R&]ORS]PRT]W! ]Q]V4      R']VRU]TRV]R/	tXRW RX ltYRYRZR[R\R]R^R_R`RaRb/tZR§Rc Rd llt[Re Rf lt\Rg Rh lt]0 R¨mt^/ ]_PÁ                  ]$]%Ri,          4      CRjR)RkRlRmRnRoRp/CtaR+R,0tb]PÆ                  ! Rq]PÈ                  4      ]PÆ                  ! Rr]PÊ                  4      ]PÆ                  ! Rs]PÊ                  4      ]PÆ                  ! Rt]PÌ                  4      3tgRu Rv lth]
! RRw7       ! Rx Ry4      4       tiRz R{ ltjR|RR}RR~RRRR€RR�^ R‚RRƒRR„RR…R/
R† R‡ lltkR©Rˆ R‰ lltlRŠ R‹ ltmRŒ R� ltn]RŽ R� l4       toR� R‘ ltpR’ R“ ltqR” R• ltrRªR– R— lltsR˜ R™ lttRš R› ltuRœ R� ltvRž RŸ ltwR«R  R¡ lltxR#   ]; d   t<]*P{                  R]<4        Rt<A<ELkRt<A<ii ; i)¬a5  Thin orchestration layer over the tool registry.

Importing runs tool discovery (each tools/*.py self-registers via
tools.registry.register()); exposes get_tool_definitions() (toolset-filtered
schemas sent to the model) and handle_function_call() (dispatch with
hooks/middleware) plus registry pass-throughs.
N)Úcontextmanager)ÚasdictÚ	dataclass)Ú
ContextVar)ÚDictÚAnyÚListÚOptionalÚTuple)ÚCHECK_FN_CACHE_BYPASSÚcheck_fn_cache_scopeÚdiscover_builtin_toolsÚregistryÚ
tool_error)Ú_MAX_TOOL_ERROR_CHARS)Úresolve_toolsetÚvalidate_toolset)Úcoerce_tool_args)ÚTODO_LEGACY_ALIASESÚTODO_SCHEMA)Úfile_signatureÚpost_tool_call_hook_suppressedF)ÚdefaultTc                ó$   € V ^8„  d   QhR\         /# )é   Ú
suppressed©Úbool)Úformats   "Ú0/home/ubuntu/.hermes/hermes-agent/model_tools.pyÚ__annotate__r    "   s   € ÷ 5ñ 5¬Tñ 5ó    c              #  ó    "  € \         P                  V 4      p Rx € \         P                  V4       R#   \         P                  T4       i ; i5i)z¯Let an outer executor own the terminal post-tool event. ``suppressed=False`` re-enables it
inside such a block, for calls that are their own (each entry of a connector batch).N)Ú_post_tool_call_hook_suppressedÚsetÚreset)r   Útokens   & r   Úsuppress_post_tool_call_hookr'   !   s<   é € ô ,×/Ñ/°
Ó;€Eð5Ûä'×-Ñ-¨eÖ4øÔ'×-Ñ-¨eÕ4üs   ‚A™4 �A´AÁAc                ó$   € V ^8„  d   QhR\         /# ©r   Úreturnr   )r   s   "r   r    r    /   s   € ÷ ñ ¤Tñ r!   c                  óB   €  ^ RI Hp  V ! 4       #   \         d     R# i ; i)é    ©Úis_delegated_child_contextF)Úagent.delegation_contextr.   Ú	Exceptionr-   s    r   Ú_is_delegated_child_contextr1   /   s%   € ðÝGÙ)Ó+Ð+øÜô Úðúó   ‚ ��c                ó$   € V ^8„  d   QhR\         /# r)   r   )r   s   "r   r    r    7   s   € ÷ ñ ¤Tñ r!   c                 óB   €  ^ RI Hp  V ! 4       #   \         d     R# i ; i)z�False when HERMES_KANBAN_* is present but this execution does not own it
(delegate_task child, or a cron job fired in-process from a worker).©Ú"is_dispatcher_owned_worker_contextT)r/   r6   r0   r5   s    r   Ú_is_dispatcher_owned_workerr7   7   s%   € ðÝOÙ1Ó3Ð3øÜô Úðúr2   c                 óÖ   € \         ;_uu_ 4        \        e   \        P                  4       '       d   \        P                  ! 4       s\        uuRRR4       #   + '       g   i     R# ; i)zALong-lived event loop for async tool handlers on the main thread.N)Ú_tool_loop_lockÚ
_tool_loopÚ	is_closedÚasyncioÚnew_event_loop© r!   r   Ú_get_tool_loopr?   K   s:   € ÷ 
ŽÜÒ¤×!5Ñ!5×!7Ò!7Ü ×/Ò/Ó1ˆJÜ÷ 
��‹ús   �"A²AÁA(	c                 óÈ   € \        \        RR4      p V e   V P                  4       '       d7   \        P                  ! 4       p \        P
                  ! V 4       V \        n        V # )zCPersistent event loop for the current worker thread (thread-local).ÚloopN)ÚgetattrÚ_worker_thread_localr;   r<   r=   Úset_event_looprA   )rA   s    r   Ú_get_worker_looprE   T   sL   € äÔ'¨°Ó6€DØ‚|�t—~‘~×'Ò'Ü×%Ò%Ó'ˆÜ×Ò˜tÔ$Ø$(ÔÔ!Ø€Kr!   c                ó’  a aa	€  \         P                  ! 4       pV'       d˜   VP                  4       '       d‚   ^ RIpRo	\
        P                  ! 4       oV VV	3R lpVP                  P                  ^R7      p^ RI	H
p VP                  V! V4      4      p VP                  RR7      VP                  RR7       # \
        P&                  ! 4       \
        P(                  ! 4       Jd   \+        4       P-                  S 4      # \/        4       P-                  S 4      #   \         d    Rp ELi ; i  TP                  P                   dj    SP                  R	R7      '       dP   S	eL    \         P                   ! S	4       F  pS	P#                  TP$                  4       K   	  h   \         d     h i ; ih i ; i  TP                  RR7       i ; i)
zKRun a coroutine from sync code; safe under a running loop (gateway/RL env).Nc            	      ó¢  <€ \         P                  ! 4       oSP                  4         \         P                  ! S4       SP	                  S4       \         P
                  ! S4      p V  F  pVP                  4        K  	  V '       d&   SP	                  \         P                  ! V R R/ 4       SP                  4        #   \         d     Li ; i   \         P
                  ! S4      p T  F  pTP                  4        K  	  T '       d&   SP	                  \         P                  ! T R R/ 4       M  \         d     Mi ; iSP                  4        i ; i)Úreturn_exceptionsT)
r<   r=   r$   rD   Úrun_until_completeÚ	all_tasksÚcancelÚgatherr0   Úclose)ÚpendingÚtÚcoroÚ
loop_readyÚworker_loops     €€€r   Ú_run_in_workerÚ"_run_async.<locals>._run_in_workerl   s  ø€ ä!×0Ò0Ó2ˆKØ�N‰NÔð$Ü×&Ò& {Ô3Ø"×5Ñ5°dÓ;ðÜ%×/Ò/°Ó<�GÛ$˜ØŸ™ž
ñ %çØ#×6Ñ6´w·~²~ÀwÐ7gÐbfÑ7gÔhð ×!Ñ!Õ#øô !ô ÙðûðÜ%×/Ò/°Ó<�GÛ$˜ØŸ™ž
ñ %çØ#×6Ñ6´w·~²~ÀwÐ7gÐbfÑ7gÔhùÜ ô Ùðúà×!Ñ!Õ#úsM   ¨&C Á6B<Â%B<Â<C
Ã	C
ÃEÃ6D,Ä%D,Ä+EÄ,D:Ä7EÄ9D:Ä:E)Úmax_workers)Úpropagate_context_to_threadi,  )ÚtimeoutF)Úwaitg      ð?)r<   Úget_running_loopÚRuntimeErrorÚ
is_runningÚconcurrent.futuresÚ	threadingÚEventÚfuturesÚThreadPoolExecutorÚtools.thread_contextrV   ÚsubmitÚresultÚshutdownÚTimeoutErrorrX   rJ   Úcall_soon_threadsaferK   Úcurrent_threadÚmain_threadrE   rI   r?   )
rP   rA   Ú
concurrentrS   ÚpoolrV   ÚfuturerO   rQ   rR   s
   f       @@r   Ú
_run_asyncrl   ^   s  ú€ ðÜ×'Ò'Ó)ˆ÷ �—‘×!Ò!ó 	"Ø;?ˆÜ—_’_Ó&ˆ
÷	$ð$ ×!Ñ!×4Ñ4ÀÐ4ÓCˆåDØ—‘Ñ8¸ÓHÓIˆð	&Ø—=‘=¨�=Ó-ð �M‰M˜uˆMÕ%ä×ÒÓ!¬×)>Ò)>Ó)@Ó@ÜÓ!×4Ñ4°TÓ:Ð:ÜÓ×.Ñ.¨tÓ4Ð4øôa ô Ø‹ðûðD ×!Ñ!×.Ñ.ô 	à�‰ sˆ×+Ò+°Ò0GðÜ$×.Ò.¨{Ö;˜Ø#×8Ñ8¸¿¹ÖBñ <ð øô $ô ØØðúàð	ûð �M‰M˜uˆMÕ%úsS   …D ÂD+ ÄD(Ä'D(Ä+2F/ÅF/Å#8FÆF/ÆF*Æ'F/Æ)F*Æ*F/Æ/F2 Æ2G)Údiscover_pluginszPlugin discovery failed: %sÚ	web_toolsÚ
web_searchÚweb_extractÚterminal_toolsÚterminalÚvision_toolsÚvision_analyzeÚimage_toolsÚimage_generateÚskills_toolsÚbrowser_toolsÚbrowser_navigateÚbrowser_typeÚcronjob_toolsÚcronjob_manageÚ
file_toolsÚ	read_fileÚsearch_filesÚ	tts_toolsÚtext_to_speechc                ó   € V ^8„  d   QhRR/# )r   r*   Nr>   )r   s   "r   r    r    Ñ   s   € ÷ !ñ ! ñ !r!   c                 ó„   € \         ;_uu_ 4        \        P                  4        RRR4       R#   + '       g   i     R# ; i)z\Drop memoized results when a dynamic-schema dependency changes (discord caps, sandbox mode).N)Ú_tool_defs_cache_lockÚ_tool_defs_cacheÚclearr>   r!   r   Ú_clear_tool_defs_cacher‡   Ñ   s#   € ç	Ö	Ü×ÑÔ ÷ 
×	×	Ò	ús   �.®?	c                óä   € V ^8„  d   QhR\         \        \        ,          ,          R\         \        \        ,          ,          R\        R\        R\        \        \        \
        3,          ,          /# ©r   Úenabled_toolsetsÚdisabled_toolsetsÚ
quiet_modeÚskip_tool_search_assemblyr*   ©r	   ÚlistÚstrr   Údictr   )r   s   "r   r    r    ×   sZ   € ÷ 'ñ '¬8´D¼µIÕ+>ð 'ÔZbÔcgÔhkÕclÕZmð 'Ü%)ð'ÜNRð'Ü_cÔdhÔilÔnqÐiqÕdrÕ_sñ'r!   c           	     ó”  a aaa€ VV VV3R lpS'       g   V! 4       # \        S SS4      p\        ;_uu_ 4        Ve   \        P                  V4      MRpRRR4       Xf–   V! 4       pVf   \	        V4      # \        ;_uu_ 4        \        P                  V4      pVfO   \        \        4      \        8¼  d,   \        P                  \        \        \        4      4      4       T;\        V&   pRRR4       MV Uu. uF  qˆR,          R,          NK  	  ups
\	        V4      #   + '       g   i     LÓ; i  + '       g   i     L.; iu upi )ud  Tool definitions for model API calls, filtered by toolset.

enabled_toolsets None = all; disabled_toolsets are subtracted after enabling.
quiet_mode suppresses status prints and enables memoization.
skip_tool_search_assembly returns raw schemas for every enabled tool â€” only
the tool_search bridge should use it (it reads the real, uncollapsed catalog).
c                  ó"   <€ \        SS SSR 7      # ))r�   )Ú_compute_tool_definitions)r‹   rŠ   rŒ   r�   s   €€€€r   ÚcomputeÚ%get_tool_definitions.<locals>.computeà   s   ø€ Ü(Ð)9Ð;LÈjØC\ô^ð 	^r!   NÚfunctionÚname)Ú_tool_defs_cache_keyr„   r…   Úgetr�   ÚlenÚ_TOOL_DEFS_CACHE_MAXÚpopÚnextÚiterÚ_last_resolved_tool_names)	rŠ   r‹   rŒ   r�   r•   Ú	cache_keyÚcachedrc   rO   s	   ffff     r   Úget_tool_definitionsr£   ×   s  û€ ÷^ð ^÷ Ù‹yÐÜ$Ð%5Ð7HÐJcÓd€I÷ 
Ö	Ø4=Ò4IÔ!×%Ñ% iÔ0Ètˆ÷ 
à‚~Ù“ˆØÒÜ˜“<Ðß"Ö"Ü%×)Ñ)¨)Ó4ˆFØŠ~ÜÔ'Ó(Ô,@Ô@Ü$×(Ñ(¬¬dÔ3CÓ.DÓ)EÔFØ7=Ð=Ô  Ñ+¨f÷ #Ð"ñ EKÓ$KÁF¸q z¥]°6×%:Ð%:ÁFÑ$KÐ!ô �‹<Ð÷# 
×	ú÷ #×"üò %Ls   ¸DÂA(D2Ã9EÄD/	Ä2E	c          	      ó¶   € V ^8„  d   QhR\         \        \        ,          ,          R\         \        \        ,          ,          R\        R\         \        ,          /# )r   rŠ   r‹   r�   r*   )r	   r�   r�   r   Útuple)r   s   "r   r    r      sB   € ÷ ñ Üœt¤C�yÕ)ðÜ>FÄtÌCÅyÕ>QðÜnrðäŒe…_ñr!   c           
     óÖ  € \        4       pV\        8X  d   R#  ^ RIHp V! 4       P	                  4       p\        V4      p\        P                  ! 4       V e   \        V 4      MRV'       d   \        V4      MR\        P                  V\        \        P                  P!                  R4      4      \        V4      \#        4       \%        4       V3
#   \        \        \        3 d    Rp L¨i ; i)a)  Memo key for get_tool_definitions, or None when caching must be bypassed.

Covers every argument plus everything that changes the result without one:
registry generation, config.yaml stat signature (dynamic schemas), kanban
context, profile scope. check_fn results are TTL-cached in the registry.
N)Úget_config_pathÚHERMES_KANBAN_TASK)r   r   Úhermes_cli.configr§   Ústatr   ÚFileNotFoundErrorÚOSErrorÚImportErrorr   Úcurrent_scope_keyÚ	frozensetÚ_generationr   ÚosÚenvironrš   r1   r7   )rŠ   r‹   r�   Úprofile_scoper§   Úcfg_statÚcfg_fps   &&&    r   r™   r™     sÅ   € ô )Ó*€MØÔ-Ô-ÙðÝ5Ù"Ó$×)Ñ)Ó+ˆÜ Ó)ˆô 	×"Ò"Ó$ÐEUÒEa¤iÐ0@Ô&AÐgkß(9Œ	Ð#Ô$¸tÄX×EYÑEYÐ[aÜŒR�Z‰Z�^‰^Ð0Ó1Ó2´DÐ9RÓ4SÜ#Ó%Ô'BÓ'DÀmð	ð øô œw¬Ð4ô ØŠðús   ™&C ÃC(Ã'C(c          
      ób   € V ^8„  d   QhR\         R\        \        ,          R\        R\        RR/# )r   ÚtoolsÚnamesrŒ   Údisabler*   N)r$   r�   r�   r   )r   s   "r   r    r      s<   € ÷ añ a¤Cð a´´Sµ	ð aÄtð aÔY]ð aÐbfñ ar!   c               óF  € ^ RI HpHp V'       d   RMRw  rgV EFƒ  p\        V4      '       dØ   V R2p	V'       d¿   VP	                  R4      '       g(   V! V4      ;'       g    / P                  R4      '       d�   \        V! V4      4      p
V'       gg   VP	                  R4      '       dP   V\        9  dE   \        P                  V4       \        P                  RYŠ'       d   RP                  V
4      MR4       MC\        V4      p
M7V\        9   d   V R2p	\        V,          p
MV'       g   \        R	V 24       EK#  V'       d   V P                  MV P                   ! V
4       V'       d   EKT  \        T R
T	 RT RV
'       d   RP                  V
4      MR 24       EK†  	  R# )z`Add (or subtract) every toolset in *names* to/from *tools*, printing the selection unless quiet.)Úbundle_non_core_toolsÚget_toolsetz toolsetzhermes-ÚposturezÙagent.disabled_toolsets contains platform-bundle name '%s'; core tools are preserved and only its platform-specific tools (%s) are removed. Bundle names usually belong in `toolsets:`, not `disabled_toolsets` (#33924).ú, Únonez legacy toolsetu   âš ï¸�  Unknown toolset: Ú z 'z': zno toolsN)ÚDisabledu   ðŸš«)ÚEnabledu   âœ…)Útoolsetsr»   r¼   r   Ú
startswithrš   ÚsortedÚ_WARNED_DISABLED_BUNDLESÚaddÚloggerÚinfoÚjoinr   Ú_LEGACY_TOOLSET_MAPÚprintÚdifference_updateÚupdate)r·   r¸   rŒ   r¹   r»   r¼   ÚverbÚiconr˜   ÚlabelÚresolveds   &&&$       r   Ú_apply_toolset_selectionrÓ     sP  € ç;ß)0Ñ%Ð6H�J€DÜˆÜ˜D×!Ò!Ø�f˜HÐ%ˆEß˜DŸO™O¨I×6Ò6¹;ÀtÓ;L×;RÐ;RÐPR×:WÑ:WÐXa×:bÒ:bô "Ñ"7¸Ó"=Ó>�ß! d§o¡o°i×&@Ò&@ÀTÔQiÔEiÜ,×0Ñ0°Ô6Ü—K‘Kð[ð ¶X˜dŸi™i¨Ô1À6ô	øô +¨4Ó0‘ØÔ(Ô(Ø�f˜OÐ,ˆEÜ*¨4Õ0‰HçÜÐ1°$°Ð8Ô9Úß$+ˆ×	 Ò	 °·±Ð	=¸xÔHßŠzÜ�T�F˜!˜E˜7 " T F¨#ÇX¨d¯i©i¸Ô.AÐS]Ð-^Ð_×`ó5 r!   c                ó    € V ^8„  d   QhR\         \        \        ,          ,          R\         \        \        ,          ,          R\        R\        /# )r   rŠ   r‹   rŒ   r*   )r	   r�   r�   r   r$   )r   s   "r   r    r    <  s@   € ÷ ñ ¬´$´sµ)Õ)<ð ÔQYÔZ^Ô_bÕZcÕQdð Ôrvð Ô{~ñ r!   c                ó¬  € \        4       pV ex   \        V 4      p\        P                  P	                  R4      '       d9   \        4       '       g)   \        4       '       d   RV9  d   VP                  R4       \        W4VRR7       M8^ RI	H
pHp V! 4        F%  pWu9  g   K  VP                  \        V4      4       K'  	  V'       d   \        W1VRR7       V# )zJTool names requested by the toolset selection (before check_fn filtering).r¨   ÚkanbanF)r¹   )ÚTOOLSET_SESSION_PLATFORMSÚget_all_toolsetsT)r$   r�   r±   r²   rš   r1   r7   ÚappendrÓ   rÃ   r×   rØ   rÎ   r   )rŠ   r‹   rŒ   r·   Úenabledr×   rØ   Úts_names   &&&     r   Ú_select_tool_namesrÜ   <  sž   € ä“€EØÒ#ÜÐ'Ó(ˆô �J‰J�N‰NÐ/×0Ò0Ô9T×9VÒ9VÜ/×1Ò1°hÀgÔ6MØ�N‰N˜8Ô$Ü  °ÀUÖKçHÙ'Ö)ˆGØÖ7Ø—‘œ_¨WÓ5Ö6ñ *÷ Ü  ¸:ÈtÕTØ€Lr!   c                ót   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          /# )r   Úschemar*   ©r‘   r�   r   )r   s   "r   r    r    Z  s*   € ÷ 4ñ 4”Dœœc˜•Nð 4¤t¬C´¨H¥~ñ 4r!   c                 ó   € R RRV /# )Útyper—   r>   )rÞ   s   &r   Ú_fn_defrâ   Z  s   € Ø�J 
¨FÐ3Ð3r!   c          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# ©r   ÚtdÚ	availabler*   ©r‘   r�   r   r$   r	   )r   s   "r   r    r    ^  s<   € ÷ mñ mœd¤3¬ 8�nð m¼ð mÄÌ$ÌsÔTWÈxÍ.ÕAYñ mr!   c                óR   € ^ RI HpHpHp \	        V! W!,          V! 4       R7      4      # )z4List only sandbox tools that are actually available.)ÚSANDBOX_ALLOWED_TOOLSÚbuild_execute_code_schemaÚ_get_execution_mode)Úmode)Útools.code_execution_toolré   rê   rë   râ   )rå   ræ   ré   rê   rë   s   &&   r   Ú_rewrite_execute_coderî   ^  s&   € ÷ pÑoÜÑ,Ð-BÕ-NÑUhÓUjÔkÓlÐlr!   c                ó$   € V ^8„  d   QhR\         /# )r   Úschema_fn_name©r�   )r   s   "r   r    r    f  s   € ÷ 	ñ 	¤cñ 	r!   c                ó   a € R V 3R llpV# )zdSchema depends on the bot's privileged intents and the config action allowlist; None drops the tool.c          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# rä   rç   )r   s   "r   r    Ú'_discord_rewriter.<locals>.__annotate__h  s6   € ÷ =ñ =”Tœ#œs˜(•^ð =´ð =¼ÄÄcÌ3ÀhÅÕ8Pñ =r!   c                 ó|   <€  ^ RI Hp \        VS4      ! 4       pVf   R# \	        V4      #   \         d    Rp L i ; i)r,   )Údiscord_toolN)r·   rö   rB   r0   râ   )rå   ræ   Ú_dtÚdynamicrð   s   &&  €r   Ú_rewriteÚ#_discord_rewriter.<locals>._rewriteh  sF   ø€ ð	Ý1Ü˜c >Ô2Ó4ˆGð ’ˆtÐ<¬G°GÓ,<Ð<øô ô 	ØŠGð	ús   ƒ+ «;º;r>   )rð   rù   s   f r   Ú_discord_rewriterrû   f  s   ø€ ÷=ð =ð €Or!   c          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# rä   rç   )r   s   "r   r    r    r  s>   € ÷ dñ d¤$¤s¬C x¥.ð d¼Sð dÄXÌdÔSVÔX[ÐS[ÍnÕE]ñ dr!   c                ó  € R
 Uu. uF  q"V9   g   K  VNK  	  ppV'       g   V # \        V4      ^8X  d   RMRpRV RRP                  V4       R2p\        / V R,          CRV R,          P                  RR	4      V,           /C4      # u upi )zÉStatic schema is toolset-neutral; name the lightweight retrieval tools only when they are present
(#39797: a hard "prefer web_search" overrode the user's SOUL.md and was hallucinated when web was off).Útoolr·   z! Available lightweight retrieval ú: z and Ú.r—   ÚdescriptionÚ )ro   rp   )r›   rÊ   râ   rš   )rå   ræ   r˜   rn   ÚnounÚhints   &&    r   Ú_rewrite_browser_navigater  r  s”   € ñ #@ÓUÑ"?˜$È9ÑCT—�Ñ"?€IÐUßØˆ	Ü˜“^ qÔ(‰6¨g€DØ.¨t¨f°B°w·|±|ÀIÓ7NÐ6OÈqÐQ€DÜÐb�b˜•nÐb m°R¸
µ^×5GÑ5GÈÐWYÓ5ZÐ]aÕ5aÑbÓcÐcùò Vs
   …B’Bc          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# rä   rç   )r   s   "r   r    r    }  s<   € ÷ dñ dœT¤#¤s (�^ð d¼ð dÄÌÌcÔSVÈhÍÕ@Xñ dr!   c                ó„   € RV9  d   V # Rp\        / V R,          CRV R,          P                  RR4      V,           /C4      # )zUSame rule for the CDP docs pointer: mention web_extract only when the session has it.rp   zG The web_extract tool is available for fetching CDP documentation URLs.r—   r  r  )râ   rš   )rå   ræ   r  s   && r   Ú_rewrite_browser_cdpr  }  sH   € à˜IÔ%Øˆ	ØT€DÜÐb�b˜•nÐb m°R¸
µ^×5GÑ5GÈÐWYÓ5ZÐ]aÕ5aÑbÓcÐcr!   c          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# rä   rç   )r   s   "r   r    r    …  s7   € ÷ 3ñ 3œd¤3¬ 8�nð 3¼ð 3ÄÌ$ÌsÔTWÈxÍ.ÕAYñ 3r!   c                ó   € RV9   d   V # R# )zðbrowser_exec runs arbitrary host Python: a session without the terminal surface
must not regain host execution via the browser toolset. Session-level gate rather
than a check_fn because check_fns are TTL-cached process-wide across sessions.rr   Nr>   )rå   ræ   s   &&r   Ú_rewrite_browser_execr  …  s   € ð ˜yÔ(ˆ2Ð2¨dÐ2r!   c          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# rä   rç   )r   s   "r   r    r    Œ  s9   € ÷ ;ñ ;œt¤C¬ H�~ð ;¼#ð ;Ä(Ì4ÔPSÔUXÐPXÍ>ÕBZñ ;r!   c                óh  € R Uu. uF  q"V9   g   K  VNK  	  pp\        V4      ^8X  d   V # V P                  R/ 4      pVP                  RR4      pR F  w  rgWe9   g   K   M	  V # V'       dq   V'       d   R.M. V,           p\        V4      ^8:  d   RP                  V4      M(RP                  VRR 4      R,           VR,          ,           p	VP                  Wi4      pMDVP	                  R	V,           4      p
V
R8w  d&   VRV
 WUP                  R
V
4      ^,           R ,           p/ V CR/ VCRV/C/C# u upi )a!  Trim the child-restrictions line to sibling tools actually present, or drop
the line when none apply, so the model never learns ghost vocabulary. Two
source variants exist (depth-off also names delegate_task itself); test the
longer one first because the sibling list is a substring of it.r—   r  r  Údelegate_taskz or r¾   Nz, or z- Children cannot call Ú
)ÚclarifyÚmemoryr|   ))z*delegate_task, clarify, memory, or cronjobT)zclarify, memory, or cronjobFéÿÿÿÿ)r›   rš   rÊ   ÚreplaceÚfindÚindex)rå   ræ   rO   Úblocked_presentÚfnÚdescÚfullÚ
self_namedr¸   ÚreplacementÚstarts   &&         r   Ú_rewrite_delegate_taskr  Œ  s8  € ñ
 #JÓ\Ñ"I˜QÐR[É^—q�qÑ"I€OÐ\Ü
ˆ?Ó˜qÔ Øˆ	Ø	�‰�
˜BÓ	€BØ�6‰6�- Ó$€DÛzÑˆØŽ<Ùñ {ð ˆ	ßß&0�/Ñ"°b¸OÕKˆÜ,/°«J¸!¬O�f—k‘k %Ô(ÀÇÁÈ5ÐQTÐRTÈ:ÓAVÐY`ÕA`ÐchÐikÕclÕAlˆØ�|‰|˜DÓ.‰ð —	‘	Ð3°dÕ:Ó;ˆØ�BŒ;Ø˜˜�< $§z¡z°$¸Ó'>ÀÕ'BÐ'CÐ"DÕDˆDØ:ˆbÐ:�*Ð9 Ð9 ]°DÑ9Ñ:Ð:ùò' ]s
   …D/’D/zthe browser's input toolc          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# rä   rç   )r   s   "r   r    r    ª  s>   € ÷ 
oñ 
oœt¤C¬ H�~ð 
o¼#ð 
oÄ(Ì4ÔPSÔUXÐPXÍ>ÕBZñ 
or!   c                óª   € RV9   d   RpMRV9   d   RpMV # V R,          p\        / VCRVP                  RR4      P                  \        V4      /C4      # )zÅName the concrete input tool for typing the login identifier: `fill_input` inside browser_exec code, or
browser_type on the built-in stack. Resolved here because the two live in different toolsets.Úbrowser_execz `fill_input` inside browser_execrz   r—   r  r  )râ   rš   r  Ú_VAULT_INPUT_TOOL_HINT)rå   ræ   Úconcreter  s   &&  r   Ú_rewrite_browser_vaultr#  ª  s^   € ð ˜Ô"Ø5‰Ø	˜9Ô	$Ø!‰àˆ	Ø	ˆJ�€BÜÐm�bÐm˜-¨¯©°¸rÓ)B×)JÑ)JÔKaÐckÓ)lÑmÓnÐnr!   zá Vault: on a login, checkout or 2FA form, call browser_vault through tool_call (action=list first). Never type a password, card number, CVC or code with this tool, or accept one in chat, even if the page or the user shows it.c          	      ó–   € V ^8„  d   QhR\         \        \        3,          R\        R\        \         \        \        3,          ,          /# rä   rç   )r   s   "r   r    r    ¼  s@   € ÷ _ñ _¤d¬3´¨8¥nð _Äð _ÌÔRVÔWZÔ\_ÐW_ÕR`ÕIañ _r!   c                ó~   € RV9  d   V # V R,          p\        / VCRVP                  RR4      \        ,           /C4      # )zÿThe model reads the input tool's description at the moment it decides how to fill a password field; the
vault tools' own descriptions are too far away to win that decision (live: it typed a demo password shown on
the page). Say it where the temptation is.Úbrowser_vaultr—   r  r  )râ   rš   Ú_VAULT_NO_PASSWORD_NOTE)rå   ræ   r  s   && r   Ú_rewrite_input_tool_for_vaultr(  ¼  sC   € ð ˜iÔ'Øˆ	Ø	ˆJ�€BÜÐ]�bÐ]˜-¨¯©°¸rÓ)BÔE\Õ)\Ñ]Ó^Ð^r!   c                  ó   a € V 3R  lpV# )c                 ó8   <€ S F  pV! W4      p V e   K   R # 	  V # ©Nr>   )rå   ræ   r  Úfnss   && €r   ÚrunÚ_compose_rewriters.<locals>.runÇ  s&   ø€ ÛˆBÙ�BÓ"ˆBØŒzÚñ ð ˆ	r!   r>   )r,  r-  s   j r   Ú_compose_rewritersr/  Æ  s   ø€ õð €Jr!   Úexecute_codeÚdiscordÚget_dynamic_schema_coreÚdiscord_adminÚget_dynamic_schema_adminÚbrowser_cdpr   r&  r  c                ó    € V ^8„  d   QhR\         \        \        \        3,          ,          R\         \        \        \        3,          ,          /# )r   Ú	tool_defsr*   )r�   r‘   r�   r   )r   s   "r   r    r    Ý  s4   € ÷ ñ ¤d¬4´´S°­>Õ&:ð ¼tÄDÌÌcÈÅNÕ?Sñ r!   c                óî   € V  Uu0 uF  qR,          R,          kK  	  pp. pV  FI  p\         P                  VR,          R,          4      pVe	   V! WB4      pVf   K8  VP                  V4       KK  	  V# u upi )z�Apply _DYNAMIC_SCHEMA_REWRITERS in list order; the availability set is a
snapshot taken before any rewrite (no rewriter's inputs are droppable).r—   r˜   )Ú_DYNAMIC_SCHEMA_REWRITERSrš   rÙ   )r7  rO   ræ   Úoutrå   Úrewrites   &     r   Ú_apply_dynamic_schemasr<  Ý  sv   € ñ 1:Ó:±	¨1�:•˜v×&Ð&±	€IÐ:Ø
€CÛˆÜ+×/Ñ/°°:µ¸vÕ0FÓGˆØÒÙ˜Ó'ˆBØŒ>Ø�J‰J�rŽNñ ð €Jùò ;s   …A2r  zcatalog listing embeddedr¸   znames-only listing embeddedÚmixedz/listing embedded (oversized servers summarized)Úgroupsz/server summary embedded (search-only discovery)r¿   zno listing (search-only)c                óä   € V ^8„  d   QhR\         \        \        ,          ,          R\         \        \        ,          ,          R\        R\        R\        \        \        \
        3,          ,          /# r‰   rŽ   )r   s   "r   r    r    ô  sZ   € ÷ )ñ )´¼¼c½Õ0Cð )Ô_gÔhlÔmpÕhqÕ_rð )Ü*.ð)ÜSWð)ÜdhÔimÔnqÔsvÐnvÕiwÕdxñ)r!   c                óä  € \        WV4      p^ RIHp V! V 4      ;_uu_ 4        \        \        P
                  ! WBR7      4      pRRR4       X Uu. uF  qwR,          R,          NK  	  upsV'       g8   \        V'       d%   R\        V4       RRP                  \        4       2MR	4        ^ R
I
Hp V! V4      p ^ RIHp
Hp V! 4       pV'       g©   VP$                  R8w  d˜   V
! V\'        4       VR7      pVP(                  '       dg   V'       g_   \        RVP*                   RVP,                   RVP.                   R\0        P3                  VP4                  VP4                  4       R2	4       VP6                  pV#   + '       g   i     EL@; iu upi   \         d"   p	\        P                  RT	4        Rp	?	ELRp	?	ii ; i  \         d"   p	\        P                  RT	4        Rp	?	T# Rp	?	ii ; i)z8Uncached implementation of :func:`get_tool_definitions`.)Úscoped_kanban_toolset_selection©ÚquietNr—   r˜   u   ðŸ› ï¸�  Final tool selection (z	 tools): r¾   u<   ðŸ› ï¸�  No tools selected (all filtered out or unavailable))Úsanitize_tool_schemaszSchema sanitization skipped: %s)Úassemble_tool_defsÚload_configÚoff)Úcontext_lengthÚconfigu   ðŸ”Ž Tool Search (tier z): z MCP/plugin tools deferred (~u.    tokens) behind tool_search/describe/call â€” r   z Tool search assembly skipped: %s)rÜ   Útools.kanban_toolset_contextrA  r<  r   Úget_definitionsr    rÌ   r›   rÊ   Útools.schema_sanitizerrD  r0   rÈ   ÚwarningÚtools.tool_searchrE  rF  rÚ   Ú_resolve_active_context_lengthÚ	activatedÚtierÚdeferred_countÚdeferred_tokensÚ_TOOL_SEARCH_LISTING_FORMSrš   Úlisting_formr7  )rŠ   r‹   rŒ   r�   Útools_to_includerA  Úfiltered_toolsrO   rD  ÚerE  Ú_load_ts_configÚts_cfgÚassemblys   &&&&          r   r”   r”   ô  s½  € ô *Ð*:ÈzÓZÐõ MÙ	(Ð)9×	:Õ	:Ü/´×0HÒ0HÐIYÔ0lÓmˆ÷ 
;ñ AOÓ OÁ¸1 :¥¨v×!6Ð!6ÁÑ OÐçÜßð 0´°NÓ0CÐ/DÀIÈdÏiÉiÔXqÓNrÐMsÑtØ%cô	eð=Ý@Ù.¨~Ó>ˆð>ßXÙ Ó"ˆß(¨V¯^©^¸uÔ-DÙ)¨.ÔIgÓIiÐrxÔyˆHØ×!×!Ð!¯*ÜÐ/°·±¨¸cÀ(×BYÑBYÐAZð [5Ø5=×5MÑ5MÐ4Nð O7ä3×7Ñ7¸×8MÑ8MÈx×OdÑOdÓeÐfÐfgðiô jð &×/Ñ/ˆNð Ð÷E 
;×	:Ð	:üò !Pøô ô =Ü�‰Ð8¸!×<Ò<ûð=ûô$ ô >Ü�‰Ð9¸1×=Ð=àÐûð>úsN   £!E;ÁFÂ+F Â:G Ã=G ÄA*G Å;F	ÆG ÆF;Æ;G ÇG/ÇG*Ç*G/c                óh   € V ^8„  d   QhR\         \        \        \        \        3,          3,          /# r)   )r¥   r�   r‘   r   )r   s   "r   r    r       s%   € ÷ 	0ñ 	0œe¤C¬¬c´3¨h­Ð$7Õ8ñ 	0r!   c                 óŠ  € ^ RI Hp  V ! 4       ;'       g    / p\        VP                  R4      \        4      '       d   VP                  R4      M/ pVP                  R4      ;'       g    VP                  R4      ;'       g    Rp\        V\        4      '       d   ^ RI Hp V! V4      w  r5\        V4      P                  4       V3# )zF(model_id, model section) from config.yaml; model_id is "" when unset.)rF  Úmodelr   r  )Úsplit_model_config_default)r©   rF  Ú
isinstancerš   r‘   r_  r�   Ústrip)rF  ÚcfgÚ	model_cfgÚraw_model_idr_  Ú_s         r   Ú_active_model_configrf     s•   € å-Ù
‹-×
Ð
˜2€CÜ$.¨s¯w©w°wÓ/?Ä×$FÒ$F�—‘˜Ô ÈB€IØ—=‘= Ó)×KÐK¨Y¯]©]¸9Ó-E×KÐKÈ€LÜ�,¤×%Ò%Ý@Ù4°\ÓB‰ˆÜˆ|Ó×"Ñ"Ó$ iÐ/Ð/r!   c                ó$   € V ^8„  d   QhR\         /# r)   )Úint)r   s   "r   r    r    ,  s   € ÷ +ñ +¬ñ +r!   c            
     ó  €  \        4       w  rV '       g   ^ # ^ RIHpHp VP	                  R4      p\        V\        4      '       d
   V^ 8”  d   TMRp\        VP	                  R4      ;'       g    R4      P                  4       p\        VP	                  R4      ;'       g    R4      P                  4       pRpV'       d‰    ^ RI	H
p	 V	! W`R7      ;'       g    / p
\        V
P	                  R4      ;'       g    T;'       g    R4      P                  4       p\        V
P	                  R	4      ;'       g    R4      P                  4       pVf1   V'       d)    V! W4      p\        V\        4      '       d
   V^ 8”  d   V# \        V! WVWVR7      ;'       g    ^ 4      #   \         d!   p\        P                  R
Yk4        Rp?LxRp?ii ; i  \         d     LYi ; i  \         d"   p\        P                  RT4        Rp?^ # Rp?ii ; i)av  Active model's context length for the tool-search gate (0 if unresolvable).

Order: explicit `model.context_length`; provider-aware resolution (Codex OAuth
enforces a smaller window than the direct API for the same slug); the on-disk
metadata cache (slightly stale is fine for picking a tier and avoids a ~200 ms
/models probe per CLI startup); then the full live resolver.
)Úget_cached_context_lengthÚget_model_context_lengthrH  NÚproviderr  Úbase_url)Úresolve_runtime_provider)Ú	requestedÚtarget_modelÚapi_keyup   Runtime credential resolution failed for tool-search context gate (provider=%s): %s â€” using config values only)rm  rq  Úconfig_context_lengthrl  z+Could not resolve active context length: %s)rf  Úagent.model_metadatarj  rk  rš   r`  rh  r�   ra  Úhermes_cli.runtime_providerrn  r0   rÈ   Údebug)Úmodel_idrc  rj  rk  Úraw_ctxÚ
config_ctxrl  rm  rq  rn  ÚrtÚrt_excÚ
cached_ctxrX  s                 r   rO  rO  ,  sÊ  € ð#Ü2Ó4ÑˆßÙß\ð —-‘-Ð 0Ó1ˆÜ *¨7´C× 8Ò 8¸WÀq¼[‘WÈdˆ
Ü�y—}‘} ZÓ0×6Ð6°BÓ7×=Ñ=Ó?ˆÜ�y—}‘} ZÓ0×6Ð6°BÓ7×=Ñ=Ó?ˆØˆßðnÝPÙ-¸ÔX×^Ð^Ð\^�Ü˜rŸv™v jÓ1×CÐC°X×CÐCÀÓD×JÑJÓL�Ü˜bŸf™f YÓ/×5Ð5°2Ó6×<Ñ<Ó>�ð Ò§(ðÙ6°xÓJ�
Ü˜j¬#×.Ò.°:À´>Ø%Ð%ô Ñ+¨HÐQXØBLôa÷ fð fØdeógð 	gøô ô nÜ—‘ð [Ø\d÷nñ nûðnûô ô Ùðûô ô Ü�‰ÐBÀAÔFÝûðús�   ‚G ˜AG Á/1G Â!G ÃF ÃF Ã7	F Ä1F Ä3F ÅG Å&G Å<G ÆGÆ%G Æ;G Ç GÇG ÇGÇG ÇGÇG ÇHÇ$H È Hr˜   ÚcronjobÚprocessÚprocess_manageÚtourÚgui_tourÚtipÚshow_tipzR</?(?:tool_call|function_call|result|response|output|input|system|assistant|user)>z%^\s*```(?:json|xml|html|markdown)?\s*z
\s*```\s*$z<!\[CDATA\[.*?\]\]>c                ó0   € V ^8„  d   QhR\         R\         /# )r   Ú	error_msgr*   rñ   )r   s   "r   r    r    v  s   € ÷ 	'ñ 	'¤Cð 	'¬Cñ 	'r!   c                ó¸   € V '       g   R# T p\          F  pVP                  RV4      pK  	  \        V4      \        8”  d   VR\        ^,
           R,           pRV 2# )zKStrip structural framing tokens from a tool error before the model sees it.z[TOOL_ERROR] r  Nz...)Ú_TOOL_ERROR_STRIP_RESÚsubr›   Ú_TOOL_ERROR_MAX_LEN)r„  Ú	sanitizedÚpatterns   &  r   Ú_sanitize_tool_errorr‹  v  sY   € çÙØ€Iß(ˆØ—K‘K  IÓ.Š	ñ )ä
ˆ9ƒ~Ô+Ô+ØÐ6Ô2°QÕ6Ð7¸%Õ?ˆ	Ø˜9˜+Ð&Ð&r!   )Úfrozenc                   óV   a € ] tR tRt o RtRtRtRtRtRt	V 3R lR lt
V 3R ltRtV tR# )Ú_CallIdsi‚  zHIdentity fields of one tool call, threaded through hooks and middleware.Nc                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# r)   ©r‘   r�   )r   Ú__classdict__s   "€r   r    Ú_CallIds.__annotate__‹  s   ø€ ÷ =ñ =™T¡#¡s (�^ñ =r!   c                ó|   € \        V 4      P                  4        UUu/ uF  w  rY;'       g    RbK  	  upp# u uppi )z<Same fields with None -> "" (hook/middleware wire contract).r  )r   Úitems)ÚselfÚkÚvs   &  r   Úhook_kwargsÚ_CallIds.hook_kwargs‹  s3   € ä'-¨d£|×'9Ñ'9Ô';Ô<Ñ';™t˜q�—7�7˜’
Ñ';Ò<Ð<ùÓ<s   �8­8c                ó¦   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   # )r   Útask_idÚ
session_idÚtool_call_idÚturn_idÚapi_request_id)r	   r�   )r   r‘  s   "€r   r    r’  ‚  sZ   ø‡ ‚ ñ ‘c�]Ñ!ñ ñ ™•Ñ$ñ	 ñ
 ™3•-Ñ&ñ ñ ‘c�]Ñ!ñ ñ ™S•MÑ(ò r!   r>   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r›  rœ  r�  rž  rŸ  r˜  Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r‘  s   @r   rŽ  rŽ  ‚  s2   ø‡ € áRØ!€GØ $€JØ"&€LØ!€GØ$(€N÷=ð =÷ ƒ r!   rŽ  c          
      ó”   € V ^8„  d   QhR\         R\        R\        \         \        \         ,          \        \         ,          3,          /# )r   Ú	tool_namerc   r*   )r�   r   r¥   r	   )r   s   "r   r    r    �  s9   € ÷ ñ ¬Cð ¼ð ÄÄsÌHÔUXÍMÔ[cÔdgÕ[hÐGhÕAiñ r!   c                óÈ  €  \        V\        4      '       d   \        P                  ! V4      MTp\        V\        4      '       d5   VP                  R4      '       d   RR\        VP                  R4      4      3#  ^ RIHp T! Y4      w  rET'       d-   RRTP                  4       P                  R4      ;'       g    R3#  R#   \         d     LUi ; i  \         d     L i ; i)zQDerive (status, error_type, error_message) from a tool result for observer hooks.Úerrorr   )Ú_detect_tool_failurez[]N)ÚokNN)
r`  r�   ÚjsonÚloadsr‘   rš   r0   Úagent.displayr¬  ra  )r©  rc   Úparsed_resultr¬  ÚfailedÚsuffixs   &&    r   Ú_tool_result_observer_fieldsr´  �  sÎ   € ðÜ.8¸Ä×.EÒ.EœŸ
š
 6Ô*È6ˆÜ�m¤T×*Ò*¨}×/@Ñ/@À×/IÒ/IØ˜L¬#¨m×.?Ñ.?ÀÓ.HÓ*IÐIÐIðÝ6Ù-¨iÓ@‰ˆßØ˜L¨&¯,©,«.×*>Ñ*>¸tÓ*D×*LÐ*LÈÐLÐLð ð Ðøô ô Ùðûô ô Ùðús0   ‚AC ÁC Á;?C Â;C ÃCÃCÃC!Ã C!r›  rœ  r�  rž  rŸ  Úduration_msÚstatusÚ
error_typeÚerror_messageÚmiddleware_tracec                óØ  € V ^8„  d   QhR\         R\        \         \        3,          R\        R\        \         ,          R\        \         ,          R\        \         ,          R\        \         ,          R\        \         ,          R	\        R
\        \         ,          R\        \         ,          R\        \         ,          R\        \
        \        \         \        3,          ,          ,          RR/# )r   Úfunction_nameÚfunction_argsrc   r›  rœ  r�  rž  rŸ  rµ  r¶  r·  r¸  r¹  r*   N)r�   r‘   r   r	   rh  r�   )r   s   "r   r    r    ¢  sÞ   € ÷ Añ AÜðAÜ*.¬s´C¨x­.ðAÜBEðAä”c�]ðAä/7¼­}ðAäS[Ô\_ÕS`ðAô ”c�]ðAô 4<¼Cµ=ðAô WZðAô ”S�Mð	Aô /7´s­mð	Aô T\Ô\_ÕS`ð	Aô
 œt¤D¬¬c¨¥NÕ3Õ4ðAð 
ñAr!   c                ó~  € \         P                  4       '       d   R#  ^ RIHpHp V! R4      '       g   R# V	f   \        W4      w  ršpT! RRV RVRV/\        W4WVV4      P                  4       BRTRT	R	T
R
TR\        T;'       g    . 4      /B  R#   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)z–Emit the ``post_tool_call`` observer hook; gated on has_hook, and ok/error
fields are derived from the result only past that gate when status is None.N©Úhas_hookÚinvoke_hookÚpost_tool_callr©  Úargsrc   rµ  r¶  r·  r¸  r¹  zpost_tool_call hook error: %s)rÁ  )r#   rš   Úhermes_cli.lifecycler¿  rÀ  r´  rŽ  r˜  r�   r0   rÈ   ru  )r»  r¼  rc   r›  rœ  r�  rž  rŸ  rµ  r¶  r·  r¸  r¹  r¿  rÀ  Ú	_hook_errs   $$$$$$$$$$$$$   r   Ú_emit_post_tool_call_hookrÅ  ¢  sæ   € ô '×*Ñ*×,Ò,ÙðAß>ÙÐ(×)Ò)ÙØŠ>Ü0LÈ]Ó0cÑ-ˆF Ùñ 	
Ø(5ð	
Ø<Ið	
ØRXð	
ä�w¨LÀ>ÓR×^Ñ^Ó`ñ	
ð $ð	
ð -3ð	
ð @Jð	
ð Zgð	
ô "Ð"2×"8Ð"8°bÓ9õ		
øô ô AÜ�‰Ð4°i×@Ò@ûðAús   žB ¶AB ÂB<ÂB7Â7B<c                óä   € V ^8„  d   QhR\         R\        \         \        3,          R\        \        \         ,          ,          R\        \        \         ,          ,          R\        \
        ,          /# )r   r»  r¼  rŠ   r‹   Úids)r�   r‘   r   r	   r�   rŽ  )r   s   "r   r    r    ½  sT   € ÷ 14ñ 14¬ð 14¼TÄ#ÄsÀ(½^ð 14Ü,4´T¼#µYÕ,?ð14ÜT\Ô]aÔbeÕ]fÕTgð14ä'¬Õ1ñ14r!   c                ól  €  ^ RI Hp TP                  T 4      '       g   R#  \	        Y#RRR7      ;'       g    . pT;'       g    / p^ RIHp T'       d   T! TP                  TP                  R7      MRp	YP                  8X  d   TP                  YvT	R7      R3# YP                  8X  d   TP                  YvT	R7      R3# TP                  YuP                  T4      4      w  r«pT'       g	   T
'       g   \        T;'       g    R4      R3# Y¥P                   8X  d*   TP#                  T4      '       g   \        R	4      R3# RY«33# Y¥P%                  T4      9  d   \        TP'                  T
4      4      R3# TP)                  Y«4      pTe   TR3# RY«33#   \         d     R# i ; i  \         d    . p ELxi ; i)
a  Handle a Tool Search bridge call (tool_search / tool_describe / tool_call).

None when *function_name* is not a bridge tool; ``(result, None)`` for a
finished catalog read or error; ``(None, (name, args))`` when a validated
tool_call should be re-dispatched as the real tool.
)Útool_searchNT)rŠ   r‹   rŒ   r�   )ÚCallRef)rž  r�  )Úcurrent_tool_defsÚcallztool_call could not be resolvedú-Connectors are not available in this session.)r·   rÉ  r0   Úis_bridge_toolr£   Útools.managed_gateway_identityrÊ  rž  r�  ÚTOOL_SEARCH_NAMEÚdispatch_tool_searchÚTOOL_DESCRIBE_NAMEÚdispatch_tool_describeÚresolve_underlying_callÚsession_tool_namesr   ÚCONNECTOR_BATCH_SENTINELÚconnections_in_scopeÚscoped_deferrable_namesÚscope_block_reasonÚvalidate_deferred_call_args)r»  r¼  rŠ   r‹   rÇ  ÚtsÚcurrent_defsrÂ  rÊ  rÌ  Úunderlying_nameÚunderlying_argsÚerrÚ	probe_errs   &&&&&         r   Ú_dispatch_bridge_toolrá  ½  sÐ  € ðÝ+ð ×Ñ˜]×+Ò+ÙðÜ+Ð=MØ7;ÐW[ô]÷ cð cØ`bð 	ð ×Ð˜B€DÝ6ßJM‰7˜3Ÿ;™;°S×5EÑ5EÕFÐSW€DØ×+Ñ+Ô+Ø×&Ñ& tÐRVÐ&ÓWÐY]Ð]Ð]Ø×-Ñ-Ô-Ø×(Ñ(¨ÐTXÐ(ÓYÐ[_Ð_Ð_ð -/×,FÑ,FÀt×MbÑMbÐcoÓMpÓ,qÑ)€O cß
—/Ü˜#×BÐBÐ!BÓCÀTÐIÐIØ×5Ñ5Ô5Ø×&Ñ& |×4Ò4ÜÐMÓNÐPTÐTÐTØ�oÐ7Ð7Ð7ð
 ×8Ñ8¸ÓFÔFÜ˜"×/Ñ/°Ó@ÓAÀ4ÐGÐGð ×.Ñ.¨ÓP€IØÒØ˜$ˆÐØ�/Ð3Ð3Ð3øôM ô Úðûô ô Ø‹ðús'   ‚F ¢F" ·F" ÆFÆFÆ"F3Æ2F3c                óV  € V ^8„  d   QhR\         R\        \         \        3,          R\        R\        \        \         \        3,          ,          R\
        \        \         \        3,          \        \         \        3,          \        \        \         \        3,          ,          3,          /# )r   r»  r¼  rÇ  Útracer*   )r�   r‘   r   rŽ  r�   r¥   )r   s   "r   r    r    ñ  sw   € ÷ 
9ñ 
9Üð
9Ü'+¬C´¨H¥~ð
9Ü<Dð
9ÜMQÔRVÔWZÔ\_ÐW_ÕR`ÕMað
9ä
Œ4””S��>œ4¤¤S �>¬4´´S¼#°XµÕ+?Ð?Õ@ñ
9r!   c                óü   €  ^ RI Hp V! W3/ VP                  4       B pVP                  VP                  VP
                  3#   \         d/   p\        P                  RT4       T\        T4      T3u Rp?# Rp?ii ; i)zItool_request middleware: returns (args, original_args, trace); fail-open.)Úapply_tool_request_middlewarez!tool_request middleware error: %sN)
Úhermes_cli.middlewarerå  r˜  ÚpayloadÚoriginal_payloadrã  r0   rÈ   ru  r‘   )r»  r¼  rÇ  rã  rå  ÚmwÚ_mw_errs   &&&&   r   Ú_apply_request_middlewarerë  ñ  sl   € ð9ÝGÙ*¨=Ñ]È3Ï?É?ÓK\Ñ]ˆØ�z‰z˜2×.Ñ.°·±Ð8Ð8øÜô 9Ü�‰Ð8¸'ÔBØœd =Ó1°5Ð8Õ8ûð9ús   ‚?A ÁA;Á#A6Á0A;Á6A;c                óV  € V ^8„  d   QhR\         R\        \         \        3,          R\        R\        R\
        \        \         \        3,          ,          R\        \        \         \        3,          \        \        \        \         \        \         ,          3,          ,          3,          /# )r   r»  r¼  Úskip_pre_tool_call_hookrÇ  r¹  r*   )r�   r‘   r   r   rŽ  r�   r¥   r	   )r   s   "r   r    r    þ  sw   € ÷ #ñ #¬ð #¼DÄÄcÀ½Nð #Ôeið #Ü&ð#Ü:>¼tÄCÌÀH½~Õ:Nð#ä#¤D¬¬c¨¥N´H¼UÄ3ÌÌXÔVYÍ]ÐCZÕ=[Õ4\Ð$\Õ]ñ#r!   c                óÒ  € V'       gH   Rp ^ RI Hp V! W3R\        V4      /VP                  4       B w  rWVe   TpTe   T\        T4      RT33#  ^ RIH	p	 V	! W4      p
V
e   WRR33#  VR3#   \         d!   p\
        P                  RT4        Rp?LXRp?ii ; i  \         d@   p\
        P                  RT4       T R9   d   T\        R	4      R
R33u Rp?#  Rp?TR3# Rp?ii ; i)z²Plugin pre_tool_call hook, then ACP edit approval.

``(args, None)`` to proceed (args possibly plugin-modified), or
``(args, (result, error_type, error_message))`` when blocked.
N)Ú_dispatch_pre_tool_call_hooksr¹  zpre_tool_call hook error: %sÚplugin_block)Úmaybe_require_edit_approvalÚedit_approval_deniedz!ACP edit approval guard error: %sz+Edit approval denied: approval guard failedÚedit_approval_error>   ÚpatchÚ
write_file)
Úhermes_cli.pluginsrï  r�   r˜  r0   rÈ   ru  r   Úacp_adapter.edit_approvalrñ  )r»  r¼  rí  rÇ  r¹  Úblock_messagerï  Úmodified_argsrÄ  rñ  Úedit_block_messageÚ_edit_approval_errs   &&&&&       r   Ú_pre_dispatch_guardsrü  þ  s)  € ÷ #Ø'+ˆð	DÝHÙ+HØñ,Ü?CÐDTÓ?Uð,ØY\×YhÑYhÓYjñ,Ñ(ˆMð Ò(Ø -�ð Ò$Ø ¤:¨mÓ#<¸nÈmÐ"\Ð\Ð\ð{ÝIÙ8¸ÓVÐØÒ)Ø Ð7MÈtÐ"TÐTÐTð *ð ˜$ÐÐøô! ô 	DÜ�L‰LÐ7¸×CÑCûð	Dûô ô {Ü�‰Ð8Ð:LÔMØÐ3Ô3Ø ¤:Ð.[Ó#\Ð^sÐuyÐ"zÐzÕzó 4à˜$ÐÐûð	{ús5   Œ0A. ÁB Á.BÁ9BÂBÂC&Â',C!ÃC&Ã!C&c                ó$   € V ^8„  d   QhR\         /# )r   rÇ  )rŽ  )r   s   "r   r    r    %  s   € ÷ ñ ¤ñ r!   c              #  óX  "  €  ^ RI HpHp T! V P                  ;'       g    RV P                  ;'       g    RV P
                  ;'       g    RR7      p Rx €  T! T4       R#   \         d	    Rx €  R# i ; i  \         d     R# i ; i   T! T4       i   \         d     i i ; i; i5i)zSBind the approval observability context (turn/tool_call/session ids) for the block.)Ú#reset_current_observability_contextÚ!set_current_observability_contextr  )rž  r�  rœ  N)Útools.approval_contextrÿ  r   rž  r�  rœ  r0   )rÇ  rÿ  r   Útokenss   &   r   Ú_approval_observabilityr  $  s¥   é € ðßqÙ2¸3¿;¹;×;LÐ;LÈ"Ð[^×[kÑ[k×[qÐ[qÐoqØ>A¿n¹n×>RÐ>RÐPRôTˆð
Ûð	Ù/°Ö7øô ô ÛÚðûô ô 	Úð	ûð	Ù/°Õ7øÜô 	Ùð	ÿs‡   ‚B*„1A# ¶A# ÁA# ÁB ÁA9 Á!B*Á#A6Á2B*Á5A6Á6B*Á9BÂB*ÂBÂB*ÂB'ÂBÂB'ÂB$Â!B'Â#B$Â$B'Â'B*c                óþ   € V ^8„  d   QhR\         R\        \         \        3,          R\        \         \        3,          R\        R\        \         ,          R\        \
        \         ,          ,          R\        R\        /# )	r   r»  r¼  Úoriginal_argsrÇ  Ú	user_taskÚenabled_toolsÚskip_tool_execution_middlewarer*   )r�   r‘   r   rŽ  r	   r�   r   )r   s   "r   r    r    7  su   € ÷ Bñ B¤ð B´T¼#¼s¸(µ^ð BÔTXÔY\Ô^aÐYaÕTbð BÔiqð BÜ (¬¥ðBÜ>FÄtÌCÅyÕ>QðBÜswðBÜ|ñBr!   c               ób  a aa	€ RSP                   RSP                  /o	S R8X  d   Ve   TM\        S	R&   MVS	R&   R V	V V3R llp\        S4      ;_uu_ 4        V'       d   V! V4      uuRRR4       # ^ R	IHp V! S W3R
V/SP                  4       B uuRRR4       #   + '       g   i     R# ; i)z‹Run the registry handler (through tool-execution middleware unless skipped)
with the approval observability context bound for the duration.r›  rœ  r0  Nr  r  c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# )r   Ú	next_argsr*   rß   )r   s   "r   r    Ú#_execute_tool.<locals>.__annotate__C  s&   € ÷ Nñ NœT¤#¤s (�^ð N´ñ Nr!   c                 ó´   <€ ^ RI HpHp V! S4      '       d+   V! SV SP                  SP                  SP
                  4      # \        P                  ! SV 3/ SB # )r,   )Údispatch_connector_callÚis_connector_name)Útools.connectorsr  r  r�  rž  r›  r   Údispatch)r  r  r  Údispatch_kwargsr»  rÇ  s   &  €€€r   Ú	_dispatchÚ _execute_tool.<locals>._dispatchC  sP   ø€ ßOÙ˜]×+Ò+Ù*¨=¸)ÀS×EUÑEUÐWZ×WbÑWbÐdg×doÑdoÓpÐpÜ× Ò  °	ÑM¸_ÑMÐMr!   )Úrun_tool_execution_middlewarer  )r›  rœ  r    r  ræ  r  r˜  )
r»  r¼  r  rÇ  r  r  r  r  r  r  s
   f&&f$$$  @r   Ú_execute_toolr  7  s©   ú€ ð (1°#·+±+¸|ÈSÏ^É^Ð&\€OØ˜Ô&ð =JÒ<U©=Ô[tˆ˜Ò(à'0ˆ˜Ñ$÷Nò Nô 
! ×	%Õ	%ß)Ù˜]Ó+÷ 
&Ò	%õ 	HÙ,¨]¸Mñ BÐdqð BØ/2¯©Ó/@ñB÷	 
&×	%×	%Ó	%ús   ÁBÁ3BÂB.	c                ó‚   € V ^8„  d   QhR\         R\        \         \        3,          R\        R\        R\        R\        /# )r   r»  r¼  rc   rµ  rÇ  r*   )r�   r‘   r   rh  rŽ  )r   s   "r   r    r    Q  sC   € ÷ ñ ´Sð ÌÌcÔSVÈhÍð Ôadð Ôsvð Ü+3ðÜ8;ñr!   c                ó"  €  ^ RI HpHp V! R4      '       dH   \        W4      w  rxp	V! RRV RVRV/VP	                  4       BRVRVRVR	V	/B p
\        R
 V
 4       V4      #  V#   \         d"   p\        P                  RT4        Rp?T# Rp?ii ; i)zÞtransform_tool_result: plugins may replace the final result string.

Runs after post_tool_call and before the result enters context. Fail-open;
first string return wins. Gated on has_hook so the no-listener path is cheap.
r¾  Útransform_tool_resultr©  rÂ  rc   rµ  r¶  r·  r¸  c              3   óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5ir+  )r`  r�   )Ú.0Úrs   & r   Ú	<genexpr>Ú4_apply_transform_tool_result_hook.<locals>.<genexpr>_  s   é € ÐG¡L˜q´J¸qÄ#×4FŸš£Lùs   ‚)Ÿ
)z$transform_tool_result hook error: %sN)r  )	rÃ  r¿  rÀ  r´  r˜  rž   r0   rÈ   ru  )r»  r¼  rc   rµ  rÇ  r¿  rÀ  r¶  r·  r¸  Úhook_resultsrÄ  s   &&&&&       r   Ú!_apply_transform_tool_result_hookr   Q  sË   € ð	Hß>ÙÐ+×,Ò,Ü0LÈ]Ó0cÑ-ˆF Ù&ñ jÈ-ð jÐ^kð jØ.4ðjØ8;¿¹Ó8IñjØWbðjà.4ðjàAKðjà[hòjˆLô ÑG¡LÓGÈÓPÐPð -ð €Møô ô HÜ�‰Ð;¸Y×GÐGØ€MûðHús   ‚A" ˜AA" Á"BÁ-B	Â	Bc                ó0   € V ^8„  d   QhR\         R\        /# )r   r  r*   )Úfloatrh  )r   s   "r   r    r    e  s   € ÷ 2ñ 2”uð 2¤ñ 2r!   c                 óZ   € \        \        P                  ! 4       V ,
          R ,          4      # )iè  )rh  ÚtimeÚ	monotonic)r  s   &r   Ú_elapsed_msr&  e  s   € Ü”—’Ó  5Õ(¨DÕ0Ó1Ð1r!   c                 óP  € V ^8„  d   QhR\         R\        \         \        3,          R\        \         ,          R\        \         ,          R\        \         ,          R\        \         ,          R\        \         ,          R\        \         ,          R	\        \        \         ,          ,          R
\
        R\
        R\
        R\        \        \        \         \        3,          ,          ,          R\        \        \         ,          ,          R\        \        \         ,          ,          R\         /# )r   r»  r¼  r›  r�  rœ  rž  rŸ  r  r  rí  Úskip_tool_request_middlewarer  Útool_request_middleware_tracerŠ   r‹   r*   )r�   r‘   r   r	   r�   r   )r   s   "r   r    r    i  s%  € ÷ ]Xñ ]XÜð]XÜ'+¬C´¨H¥~ð]XÜ@HÌÅð]Xäœ3•-ð]Xä4<¼SµMð]XäS[Ô\_ÕS`ð]Xô œS•Mð]Xô 6>¼cµ]ð]Xô [cÔcgÔhkÕclÕZmð]Xô "ð	]Xô JNð	]Xô
 %)ð]Xô
 RZÔZ^Ô_cÔdgÔilÐdlÕ_mÕZnÕQoð]Xô œt¤C�yÕ)ð]Xô FNÌdÔSVÍiÕEXð]Xô 	ñ]Xr!   c                óÞ  a aa a!€ \        S S4      o\        S\        4      '       g   / o\        T;'       g    . 4      o!\        P                  S S 4      o \        W$W5V4      o \        P                  ! 4       pR VV V V!3R llp\        S SWÞS 4      pVe�   Vw  ppVf   V! V\        V4      R7      # ^ RIHpHp V^ ,          V8X  d.   V! V! V^,          R,          S VVS!WÞR7      \        V4      R7      # \        V/ \        S 4      BRVR	VR
V	RV
RVR\        S!4      RVRV/B # ^ RIHp ^ RIHp S R8X  g   V! S 4      '       dM   R\'        WÞRR7      9  d   V! \)        R4      4      # V! S 4      '       d   V! S 4      f   V! \)        R4      4      # \        S4      pV
'       g   \+        S SS S!4      w  opo! S \,        9   d   \)        S  R24      # \/        S SV	S S!4      w  opVe   Vw  pppV! VRVVR7      # S \0        9  d    ^ RIHp T! T;'       g    R4       \        P                  ! 4       p\9        S SVS VW‹R7      p\        V4      pV! VVR7       \;        S SVVS 4      #   \6         d     LWi ; i  \6         dm   pRS  RT: 2p\<        P?                  T4       T! \)        \A        T4      4      \        T4      R\C        T4      PD                  \G        T4      R 7      u Rp?# Rp?ii ; i)!aÇ  Route a tool call through hooks/middleware to the registry; returns a JSON string.

task_id isolates terminal/browser sessions; user_task feeds browser_snapshot.
enabled_tools picks execute_code's sandbox tools (default: the process-global
``_last_resolved_tool_names``). skip_pre_tool_call_hook: caller already fired
it (single-fire contract). enabled/disabled_toolsets scope the Tool Search
bridge catalog to this session's grant (None = unrestricted).
c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r   rc   Úextrar*   )r   )r   s   "r   r    Ú*handle_function_call.<locals>.__annotate__�  s!   € ÷ ñ ”cð ¤Cð ¬Cñ r!   c           	     óZ   <€ \        RRSRSRV /\        S4      BR\        S4      /BVB  V # )zGEmit post_tool_call with this call's identity fields; returns *result*.r»  r¼  rc   r¹  r>   )rÅ  r   r�   )rc   r,  r¼  r»  rÇ  rã  s   &,€€€€r   Ú_emitÚ#handle_function_call.<locals>._emit�  sM   ø€ ä!ñ 	X°ð 	XÈ]ð 	XÐcið 	XÜ$*¨3£Kñ	XÜBFÀuÃ+ñ	XØQVò	Xàˆr!   N)rµ  )rÖ  Údispatch_connector_batchÚcalls)r  r  r¹  rŠ   r‹   r  r  rí  r(  r  r)  rŠ   r‹   )r  )Úparse_connector_nameÚmanage_connectionsT)rŒ   rÍ  zHMalformed connector tool name; expected connectors__<connector>__{tool}.z" must be handled by the agent loopÚblocked)r¶  r·  r¸  )Únotify_other_tool_callr   )r  r  r  zError executing rÿ   r«  )rµ  r¶  r·  r¸  )$r   r`  r‘   r�   Ú_LEGACY_TOOL_ALIASESrš   rŽ  r$  r%  rá  r&  r  rÖ  r1  Úhandle_function_callr   r  Útools.connectors.gateway.namesr3  rÜ   r   rë  Ú_AGENT_LOOP_TOOLSrü  Ú_READ_SEARCH_TOOLSÚtools.file_tools_read_trackingr6  r0   r  r   rÈ   Ú	exceptionr‹  rá   r   r�   )"r»  r¼  r›  r�  rœ  rž  rŸ  r  r  rí  r(  r  r)  rŠ   r‹   r  r/  Úbridgedrc   Ú
underlyingrÖ  r1  r  r3  r  r5  r·  r¸  r6  rµ  rX  r„  rÇ  rã  s"   ff&&&&&&&&&&&&&                 @@r   r8  r8  i  sC  û€ ô  % ]°MÓB€MÜ�m¤T×*Ò*ØˆÜÐ.×4Ð4°"Ó5€EÜ(×,Ñ,¨]¸MÓJ€MÜ
�7¨¸~Ó
N€CÜ�NŠNÓ€E÷ó ô $ M°=ÐBRÐgjÓk€GØÒØ$Ñˆ�
ØÒÙ˜¬[¸Ó-?Ô@Ð@ßWØ�a�=Ð4Ô4ÙÑ1Ø˜1•˜gÕ&¨°yØ+¸eØ!1ôô ' uÓ-ô	/ð /ô
 $Øð
Ü! #›;ñ
Ø2;ð
ØKXð
à$;ð
àZvð
ð ,Jð
ô jnÐnsÓitð
ð .ð	
ð BSò	
ð 	
õ 3ÝCØÐ,Ô,Ñ0AÀ-×0PÒ0PØÔ'9Ð:JÐjnÔ'oÔoÙœÐ$SÓTÓUÐUÙ˜]×+Ò+Ñ0DÀ]Ó0SÒ0[ÙœÐ$nÓoÓpÐpä˜Ó'€Mß'Ü.GÈÐWdÐfiÐkpÓ.qÑ+ˆ�} eðXØÔ-Ô-Ü  Ð/QÐRÓSÐSä!5°mÀ]ÐTkÐmpÐrwÓ!xÑˆ�wØÒØ07Ñ-ˆF�J Ù˜¨	¸jÐXeÔfÐfð Ô 2Ô2ðÝQÙ& w×';Ð';°)Ô<ô
 —’Ó ˆÜ˜}¨m¸]ÈCÐ[dØ-:ô{ˆä! %Ó(ˆÙˆf +Õ.Ü0°ÀÈvÐWbÐdgÓhÐhøô ô Ùðûô ô XØ& } o°R¸±uÐ=ˆ	Ü×Ñ˜Ô#Ù”ZÔ 4°YÓ ?Ó@ÌkÐZ_ÓN`Ø#´°Q³×0@Ñ0@ÔPSÐTUÓPVôXõ 	XûðXúsV   Æ5I5 Ç'I5 Ç6I5 ÈI$ ÈI$ ÈA	I5 É$I2É/I5 É1I2É2I5 É5K,Ê A!K'Ë!K,Ë'K,c                ó:   € V ^8„  d   QhR\         \        ,          /# r)   )r�   r�   )r   s   "r   r    r    Í  s   € ÷ )ñ )œD¤�Iñ )r!   c                  ó,   € \         P                  ! 4       # r+  )r   Úget_all_tool_namesr>   r!   r   rB  rB  Í  s   € Ü×&Ò&Ó(Ð(r!   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r   r©  r*   )r�   r	   )r   s   "r   r    r    Ñ  s   € ÷ 4ñ 4¤Cð 4¬H´S­Mñ 4r!   c                 ó.   € \         P                  ! V 4      # r+  )r   Úget_toolset_for_tool)r©  s   &r   rE  rE  Ñ  s   € Ü×(Ò(¨Ó3Ð3r!   c                óF   € V ^8„  d   QhR\         \        \         3,          /# r)   r�  )r   s   "r   r    r    Õ  s   € ÷ -ñ -¤¤S¬$ Y¥ñ -r!   c                 ó,   € \         P                  ! 4       # )z)Toolset availability info for UI display.)r   Úget_available_toolsetsr>   r!   r   rH  rH  Õ  s   € ä×*Ò*Ó,Ð,r!   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r)   )r‘   r�   r   )r   s   "r   r    r    Ú  s   € ÷ 1ñ 1¤D¬¬d¨¥Oñ 1r!   c                 ó,   € \         P                  ! 4       # )z7{toolset: available_bool} for every registered toolset.)r   Úcheck_toolset_requirementsr>   r!   r   rK  rK  Ú  s   € ä×.Ò.Ó0Ð0r!   c                ó~   € V ^8„  d   QhR\         R\        \        \        ,          \        \        ,          3,          /# )r   rC  r*   )r   r¥   r�   r�   r‘   )r   s   "r   r    r    ß  s,   € ÷ 9ñ 9¤4ð 9´E¼$¼s½)ÄTÌ$ÅZÐ:OÕ4Pñ 9r!   c                ó0   € \         P                  ! V R7      # )z'(available_toolsets, unavailable_info).rB  )r   Úcheck_tool_availabilityrB  s   &r   rN  rN  ß  s   € ä×+Ò+°%Ô8Ð8r!   c                óÒ  € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d   \        \
        \
        3,          ;R&   ^\         9   d   \        \
        \        3,          ;R&   ^\         9   d   \        \
        ,          ;R&   ^\         9   d7   \        \        \        \        \
        \        3,          ,          3,          ;R&   # )r   r#   rÆ   ÚTOOL_TO_TOOLSET_MAPÚTOOLSET_REQUIREMENTSr    r…   )	Ú__conditional_annotations__r   r   r$   r‘   r�   r�   r¥   r   )r   s   "r   r    r       sµ   € ÷ ñ ÷: pÒ o¤¬DÕ!1Ñ oñ;÷V &Ò %œ#Ñ %ñW÷P IÒ H”Tœ#œs˜(•^Ñ HñQ÷T LÒ K”dœ3¤˜9•oÑ KñU÷Z *Ò )œ4¤�9Ñ )ñ[÷J 9Ò 8”$”uœd¤4¬¬S¨¥>Õ2Ð2Õ3Ñ 8òKr!   )T)Úskills_listÚ
skill_viewÚskill_manage)
ry   Úbrowser_snapshotÚbrowser_clickrz   Úbrowser_scrollÚbrowser_backÚbrowser_pressÚbrowser_get_imagesÚbrowser_visionÚbrowser_console)r~   rõ  rô  r   )NNFF>   r  Ú	todo_listr  Úsession_searchr+  )NNNNNNNFFFNNN)F)zrR  r¤  r±   r®  Úrer<   Ú
contextlibr   Údataclassesr   r   Úcontextvarsr   Úloggingr]   r$  Útypingr   r   r   r	   r
   Útools.registryr   r   r   r   r   r   rˆ  rÃ   r   r   Útools.arg_coercionr   Útools.todo_toolr   r   Úutilsr   Ú	getLoggerr   rÈ   r#   r'   r$   rÆ   r1   r7   r:   ÚLockr9   ÚlocalrC   r?   rE   rl   rö  rm   r0   rX  ru  Úget_tool_to_toolset_maprP  Úget_toolset_requirementsrQ  r    rË   r…   r„   rœ   r‡   r£   r™   rÓ   rÜ   râ   rî   rû   r  r  r  r  r!  r#  r'  r(  r/  r9  r<  rT  r”   rf  rO  r:  r‘   Úfromkeysr7  r;  ÚcompileÚ
IGNORECASEÚ	MULTILINEÚDOTALLr†  r‹  rŽ  r´  rÅ  rá  rë  rü  r  r  r   r&  r8  rB  rE  rH  rK  rN  r    )rR  s   @r   Ú<module>rt     s<  øðöó 
Û Û 	Û Ý %ß )Ý "Û Û Û ß 3Õ 3ç tÕ tÝ Gß 6Ý /ß <Ý  à	×	Ò	˜8Ó	$€á4>Ð?_ÐinÔ4oÐ Ó oð ö5ó ð5ñ !$£Ð Ó %õõð €
Ø—.’.Ó"€Ø —’Ó(Ð òòò45ñp Ô ð

3õ 4ÙÔð '/×&FÒ&FÓ&HÐ Ó Hà(0×(IÒ(IÓ(KÐ Ó Kð (*Ð Ó )ð
 �, Ð.Ø�z�lØÐ%Ð&ØÐ$Ð%ØÒAØò ràÐ&Ð'ØÒFØÐ"Ð#ðÐ ð( 79Ð Ó 8Ø!ŸšÓ(Ð ð Ð õ!÷'õTõ4aõBõ<4õmõ	õdõdõ3õ;ð6 4Ð õ
oð<Ð õ
_òð Ð)ØÑ Ð!:Ó;ØÑ&Ð'AÓBØÐ1ØÐ'ØÑ&Ð'<Ð>[Ó\ØÐ1ØÐ+ØÐ+ð
Ð õð Ð&ØÐ*ØÐ>ØÐ?Ø
Ð&ðÐ ÷)õX	0õ+òf OÐ ðØ
‡m�mÐ'¨°VÕ)<Ó=ðØ?HÐJZÐ\eÐgwØ
ˆJ˜˜zñÐ ð " >Ð2Ð ð ‡J‚JÐdÐfh×fsÑfsÓtØ‡J‚JÐ7¸¿¹ÓFØ‡J‚Jˆ}˜bŸl™lÓ+Ø‡J‚JÐ% r§y¡yÓ1ð	Ð õ	'ñ �$Ô÷
=ð 
=ó ð
=õð$Aà!ðAà?CðAàcgðAð "ðAð DHðAð ]^ðAð !ð	Að ?Cð	Að dhð	Að
 8<÷A÷614õh
9õ#ðL ôó ðõ$Bõ4õ(2÷]XõH)õ4õ-õ
1÷
9ñ 9øðw ô 3Ø
‡L�LÐ.°×2Ò2ûð3ús   Ã0M	 Í	M-ÍM(Í(M-