+
    jHàjÁ<  ã            
      ó  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
Ht ^ RIHtHtHtHt ]P"                  ! ]4      t]P(                  R R l4       tRR/R R	 lltR
 R ltR R ltR R lt/ ]P7                  R_R4      C]P7                  R`R4      C]P7                  RaR4      C]P7                  RbR4      C]P7                  RcR4      Ct^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#R$/R% R& llt%R' R( lt&RdR)R*/R+ R, lllt'Ret(R- R. lt)R/RRR/R0 R1 llt*]+! R204      t,]+! R3R404      t-R5t.]
 ! R6 R74      4       t// t0R8]1R9&   ]Pd                  ! 4       t3R: R; lt4R< R= lt5R> R? lt6R@ RA lt7RB RC lt8RDRDRERDR3R3R4R3RFRF/t9RG RH lt:RI RJ lt;RK RL lt<RM]<RN];RO]:/t=RP RQ lt>]P~                  ! RRR*RS7      t@]P(                  RT RU l4       tARdRVR/RW RX llltBRVR/RY RZ lltCR[ R\ ltDR] R^ ltER# )fa  Learning-loop, delegation and execution-backend shared metrics.

Memory operations, curator runs, delegate_task fan-outs and terminal/browser/execute_code backend
calls. Producers call the ``record_*`` functions with RAW values; every builder here maps them onto
the closed enums and buckets in ``shared_metrics_contract``. Recording is a no-op unless shared
metrics are enabled for the owning profile and never raises into the caller.

This module imports only the stdlib at load time so tool modules can import it on their hot path.
)ÚannotationsN)Ú	dataclassÚfield)ÚAnyÚCallableÚIterableÚIteratorc               ó    € V ^8„  d   QhRRRR/# )é   Úhermes_homer   ÚreturnúIterator[None]© )Úformats   "ÚQ/home/ubuntu/.hermes/hermes-agent/hermes_cli/observability/shared_metrics_loop.pyÚ__annotate__r      s   € ÷ *ñ *˜Sð * ^ñ *ó    c              #  ó~   "  € V '       g   Rx € R# ^ RI HpHp V! V 4      p Rx € V! V4       R#   T! T4       i ; i5i)z]Record in the profile captured by the producer (curator/delegation threads carry no binding).N)Úreset_hermes_home_overrideÚset_hermes_home_override)Úhermes_constantsr   r   )r   r   r   Útokens   &   r   Ú_bound_homer      s6   é € ÷ ÛÙßUá$ [Ó1€Eð*Ûá" 5Ö)øÑ" 5Õ)üs   ‚=¢0 ¦
=°
:º=r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r
   Ú	mark_attrÚstrÚbuildz$Callable[..., dict[str, str] | None]r   r   Úrawr   ÚNoner   )r   s   "r   r   r   '   s:   € ÷ Qñ Q�Sð QÐ!Eð QÐWZð QÐjmð QÐrvñ Qr   c               óú   €  ^RI Hp ^RIHp \	        V4      ;_uu_ 4        V! \        W@4      V3/ VB  RRR4       R#   + '       g   i     R# ; i  \         d    \        P                  RT RR7        R# i ; i)é   )Úshared_metrics_contract)Ú_emitNzShared-metrics %s not recordedT)Úexc_info)	Ú r!   Úshared_metrics_eventsr"   r   ÚgetattrÚ	ExceptionÚloggerÚdebug)r   r   r   r   ÚcontractÚ	emit_marks   &&$,  r   r"   r"   '   s_   € ðQÝ9Ý=ä˜×%Õ%Ù”g˜hÓ2°EÑA¸SÒA÷ &×%×%Ò%ûäô QÜ�‰Ð5°yÈ4ˆ×PðQús+   ‚A ¡?µA ¿A	Á
A ÁA Á#A:Á9A:c               ó    € V ^8„  d   QhRRRR/# ©r
   Úvaluer   r   r   r   )r   s   "r   r   r   2   s   € ÷ ,ñ ,�ð ,˜ñ ,r   c                ód   € \        T ;'       g    R 4      P                  4       P                  4       # )r$   )r   ÚstripÚlower©r.   s   &r   Ú_normr3   2   s%   € Üˆu�{ˆ{˜Ó×!Ñ!Ó#×)Ñ)Ó+Ð+r   c               ó    € V ^8„  d   QhRRRR/# )r
   Úresultr   r   údict[str, Any]r   )r   s   "r   r   r   6   s   € ÷ 2ñ 2�Cð 2˜Nñ 2r   c                ó  € \        V \        4      '       d   V #  \        V \        \        34      '       d   \        P
                  ! V 4      MR p\        T\        4      '       d   T# / #   \        \        3 d    / u # i ; i©N)Ú
isinstanceÚdictr   ÚbytesÚjsonÚloadsÚ	TypeErrorÚ
ValueError)r5   Údatas   & r   Ú_parsedrA   6   sm   € Ü�&œ$×ÒØˆðÜ%/°¼¼e¸×%EÒ%EŒt�zŠz˜&Ô!È4ˆô ˜d¤D×)Ò)ˆ4Ð1¨rÐ1øô ”zÐ"ô ØŠ	ðús   š4A( Á(A>Á=A>c               ó   € V ^8„  d   QhRR/# )r
   r   ú
str | Noner   )r   s   "r   r   r   @   s   € ÷ ñ �zñ r   c                 óT   €  ^ RI Hp  \        V ! 4       4      #   \         d     R# i ; i)é    ©Úget_hermes_homeN)r   rG   r   r'   rF   s    r   Ú_current_homerH   @   s*   € ðÝ4ä‘?Ó$Ó%Ð%øÜô Úðús   ‚ ˜'¦'ÚaddÚreplaceÚremoveÚsearchÚreadc               ó    € V ^8„  d   QhRRRR/# r-   r   )r   s   "r   r   r   X   s   € ÷ 7ñ 7�Sð 7˜Sñ 7r   c                ó@   € \         P                  \        V 4      R 4      # ©Úother)Ú_MEMORY_OP_WORDSÚgetr3   r2   s   &r   Ú	memory_oprT   X   s   € Ü×Ñ¤ e£¨gÓ6Ð6r   c               ó$   € V ^8„  d   QhRRRRRR/# )r
   Ú	tool_namer   Úargsr   r   r   )r   s   "r   r   r   \   s!   € ÷ ñ  #ð ¨Sð °Sñ r   c                ó€  € \        V\        4      '       d   VP                  R4      MRp\        V\        4      '       d+   \	        V4      \
        9   d   \
        \	        V4      ,          # \        \	        V 4      P                  RR4      P                  R4      4       F  pV\
        9   g   K  \
        V,          u # 	  R# )zYThe operation a provider tool performs: its ``action`` argument, else a verb in its name.ÚactionNÚ-Ú_rQ   )	r9   r:   rS   r   r3   rR   ÚreversedrJ   Úsplit)rV   rW   rY   Úwords   &&  r   Úmemory_provider_opr_   \   sŒ   € ä#-¨d´D×#9Ò#9ˆT�X‰X�hÔ¸t€FÜ�&œ#×Ò¤5¨£=Ô4DÔ#DÜ¤ f£Õ.Ð.Üœ˜yÓ)×1Ñ1°#°sÓ;×AÑAÀ#ÓFÖGˆØÔ#Ö#Ü# DÕ)Ò)ñ Hñ r   c               ó    € V ^8„  d   QhRRRR/# r-   r   )r   s   "r   r   r   g   s   € ÷ :ñ : ð :¨ñ :r   c                óL   € ^RI Hp \        V 4      ;'       g    RpW!9   d   V# R# )r    )ÚMEMORY_PROVIDERSÚbuiltinÚplugin)r!   rb   r3   )r.   rb   Únames   &  r   Úmemory_provider_namerf   g   s&   € Ý9ä�‹<×$Ð$˜9€DØÔ+ˆ4Ð9°Ð9r   c               ó   € V ^8„  d   QhRR/# ©r
   r   r   r   )r   s   "r   r   r   n   s   € ÷ Kñ K˜ñ Kr   c                 ó0   € ^ RI Hp  V ! 4       '       d   R# R# )rE   ©Úis_background_reviewÚbackground_reviewÚ
foreground)Útools.skill_provenancerk   rj   s    r   Ú_memory_originro   n   s   € Ý;á"6×"8Ò"8ÐÐJ¸lÐJr   c               ó0   € V ^8„  d   QhRRRRRRRRRRRR/# )	r
   Úopr   ÚproviderÚoutcomeÚoriginÚfailure_classr   údict[str, str]r   )r   s   "r   r   r   t   s8   € ÷ ñ ˜Cð ¨3ð ¸ð Àcð ÐZ]ð Ðbpñ r   c                óê   € ^RI HpHpHpHp \        V4      \        V4      \        V4      rºp	W—9   d   T	MRp	RV	R8X  d   RMWµR0,
          9   d   TMRRW9   d   T MRR	W¦9   d   T
MR
RV	R\        V4      /# )r    )ÚMEMORY_OP_FAILURE_CLASSESÚMEMORY_OP_ORIGINSÚMEMORY_OP_OUTCOMESÚ
MEMORY_OPSÚfailedru   ÚsuccessÚnoneÚunknownrq   rQ   rt   rm   rs   rr   )r!   rx   ry   rz   r{   r3   rf   )rq   rr   rs   rt   ru   rx   ry   rz   r{   Úoutcome_valueÚorigin_valueÚclass_values   $$$$$       r   Úmemory_op_fieldsrƒ   t   s}   € ßuÓuä/4°W«~¼uÀV»}ÌeÐTaÓNb €MØ%2Ô%H‘MÈh€Mà =°IÔ#=™Ø&ÀvÀhÕ*NÔN‰KÐT]à�BÔ$‰b¨'Ø ,Ô"C‘,ÈØ�=ØÔ(¨Ó2ðð r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r
   ÚopszIterable[str]rr   r   rs   r   ru   r   r   r   )r   s   "r   r   r   „   s1   € ÷ 	
ñ 	
˜Mð 	
¸ð 	
Àcð 	
ÐZ]ð 	
Ðbfñ 	
r   c               óœ   €  \        4       p\        V 4      R\          F  p\	        R\
        WQW$VR7       K  	  R#   \         d    R p L>i ; i)rm   NÚMEMORY_OP_MARK)rq   rr   rs   rt   ru   )ro   r'   ÚlistÚ_MAX_BATCH_OPSr"   rƒ   )r…   rr   rs   ru   rt   rq   s   &$$$  r   Ú_record_memory_opsrŠ   „   sR   € ðÜÓ!ˆô �3‹i˜œÓ(ˆÜØÔ.°2ÐRYØ'÷	
ó )øô ô ØŠðús   ‚
; »AÁ
Ac               ó$   € V ^8„  d   QhRRRRRR/# )r
   rY   r   Ú
operationsr   z	list[str]r   )r   s   "r   r   r   �   s!   € ÷ ñ ˜sð °ð ¸	ñ r   c           	     óä   € \        V\        4      '       dK   V'       dC   V Uu. uF5  p\        \        V\        4      '       d   VP	                  R 4      MR4      NK7  	  up# \        V 4      .# u upi )rY   N)r9   rˆ   rT   r:   rS   )rY   rŒ   rq   s   && r   Úbuiltin_memory_opsrŽ   �   sY   € Ü�*œd×#Ò#¯
ÙXbÓcÑXbÐRT”	¬j¸¼T×.BÒ.B˜"Ÿ&™& Ô*ÈÖMÑXbÑcÐcÜ�fÓÐÐùò ds   £;A-ru   r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r
   rY   r   rŒ   rs   r   ru   r   r   r   )r   s   "r   r   r   –   s1   € ÷ ñ  sð ¸ð Èð Ð]`ð Ðquñ r   c               ó4   € \        \        W4      RW#R7       R# )zªOne row per operation of a built-in ``memory`` tool call (a batch applies all or none).
``failure_class`` is the store's closed refusal/failure name, ``none`` on success.rc   ©rr   rs   ru   N)rŠ   rŽ   )rY   rŒ   rs   ru   s   &&$$r   Úrecord_builtin_memory_callr’   –   s   € ô Ü˜6Ó.¸ÈG÷r   c               ó    € V ^8„  d   QhRRRR/# )r
   r5   r   r   Úboolr   )r   s   "r   r   r   ž   s   € ÷ Eñ E Cð E¨Dñ Er   c                óœ   € \        V \        4      '       g   R # V P                  4       R,          pVP                  R4      ;'       g    RV9   # )F:NéÈ   Nz{"error"z"success": false)r9   r   ÚlstripÚ
startswith)r5   Úheads   & r   Ú_provider_result_failedrš   ž   s?   € Ü�fœc×"Ò"ÙØ�=‰=‹?˜4Õ €DØ�?‰?˜:Ó&×DÐDÐ*<ÀÑ*DÐDr   ÚraisedFc               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r
   rr   r   rV   rW   r5   r›   r”   r   r   r   )r   s   "r   r   r   ¥   s9   € ÷ ñ ¨#ð ¸#ð ÀSð ÐRUð Ðimð Ðz~ñ r   c               óœ   € V'       d   RM\        V4      '       d   RMRp\        \        W4      .Y'       d   RMRT;'       g    RR7       R# )zPOne row per memory-provider tool call (plugin providers expose their own tools).Ú	exceptionÚprovider_errorNr|   r}   r~   r‘   )rš   rŠ   r_   )rr   rV   rW   r5   r›   r|   s   &&&&$ r   Úrecord_provider_memory_callr    ¥   sC   € ç"‰[Ô<SÐTZ×<[Ò<[Ñ(8Ðae€FÜÜ	˜IÓ	,Ð-¸ÖV\É(ÐbkØ×&Ð& ÷r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   Útriggerr   rs   Úcountsr   rv   r   )r   s   "r   r   r   ³   s(   € ÷ ñ  3ð °ð ¸cð Ànñ r   c                ó¦  € ^RI HpHp \        V4      '       d   V! 4       MTp\	        V\
        4      '       d   TM/ p\        V4      p\         UUu/ uFM  quP                  V4      pV R2T! \	        V\        4      '       d   \	        V\        4      '       g   TM^ 4      bKO  	  p	pp/ V	CRWc9   d   TMRR\        V 4      R8X  d   R/C# R/C# u uppi )r    )ÚCURATOR_OUTCOMESÚcount_bucketÚ_bucketrs   r|   r¢   Ú	scheduledÚmanual)r!   r¥   r¦   Úcallabler9   r:   r3   Ú_CURATOR_COUNT_KEYSrS   Úintr”   )
r¢   rs   r£   r¥   r¦   Úresolvedr€   Úkeyr.   Úfieldss
   $$$       r   Úcurator_run_fieldsr°   ³   sÙ   € ßGä# F×+Ò+‰vŒx°€HÜ% h´×5Ò5‰x¸2€HÜ˜'“N€Mõ 'ôá&ˆC·\±\À#Ó5F¨5ð ˆ%ˆwˆ™¬z¸%Ä×/EÒ/EÌjÐY^Ô`d×NeÒNe¡eÐklÓmÐm‰Ù&ð ñ ðØ
ðà MÔ$E‘=È8Ø¤%¨£.°KÔ"?�;ñð ð FNñð ùó	s   ÁACr£   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r
   r¢   r   rs   r£   z4dict[str, int] | Callable[[], dict[str, int]] | Noner   r   r   r   r   )r   s   "r   r   r   Ä   s6   € ÷ ñ ØðØ!ðØ+_ðàðð 
ñr   c           	     óB   € \        R\        YT;'       g    / VR7       R# )z\One row per curator pass. ``counts`` may be a callable so the diff is only computed when on.ÚCURATOR_RUN_MARK©r¢   rs   r£   r   N)r"   r°   r´   s   $$$$r   Úrecord_curator_runrµ   Ä   s#   € ô
 
ØÔ.¸ÐY_×YeÐYeÐceØ÷r   Ú	completedÚinterruptedÚ	cancelledé   c                  ó`   € ] tR t^×t$ R]R&   R]R&   R]R&   ]! ]R7      tR]R&   R	tR
]R&   Rt	R# )Ú_DelegationRunr¬   ÚexpectedÚdepthrC   r   )Údefault_factoryz	list[Any]ÚstatusesFr”   Ú
backgroundr   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   rˆ   r¿   rÀ   Ú__static_attributes__r   r   r   r»   r»   ×   s+   ‡ àƒMØƒJØÓÙ°Ô5€HˆiÓ5Ø€J�×r   r»   zdict[int, _DelegationRun]Ú_DELEGATIONSc               ó    € V ^8„  d   QhRRRR/# )r
   r½   r   r   r   r   )r   s   "r   r   r   ä   s   € ÷ 8ñ 8˜Cð 8 Cñ 8r   c                óž   € \        V \        4      '       d   \        V \        4      '       g   T M^pV^8  d   \        \	        ^V4      4      # R# )r    Úgte_4)r9   r¬   r”   r   Úmax)r½   r.   s   & r   Údelegation_depthrÌ   ä   s>   € Ü ¤s×+Ò+´J¸uÄd×4KÒ4K‰EÐQR€EØ!&¨¤Œ3Œs�1�e‹}ÓÐ7°Ð7r   c               ó    € V ^8„  d   QhRRRR/# )r
   r¿   úIterable[Any]r   r   r   )r   s   "r   r   r   é   s   € ÷ Vñ V ð V°3ñ Vr   c                ó(  € V  Uu. uF  p\        V4      NK  	  pp\        R  V 4       4      pV'       d   V\        V4      8X  d   R# V'       d   R# \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   R# R# u upi )c              3  ó2   "  € T F  q\         9   x € K  	  R # 5ir8   )Ú_SUCCESS_STATUSES©Ú.0Úss   & r   Ú	<genexpr>Ú%delegation_outcome.<locals>.<genexpr>ë   s   é € Ð;±F¨qÔ*Ö*³Fùó   ‚r}   Úpartialc              3  ó2   "  € T F  q\         9   x € K  	  R # 5ir8   )Ú_CANCELLED_STATUSESrÒ   s   & r   rÕ   rÖ   ð   s   é € ÐGÁ¸1Ô#6Ö6Ãùr×   TFr¸   r|   )r3   ÚsumÚlenÚany)r¿   rÔ   ÚvaluesÚ	succeededs   &   r   Údelegation_outcomerà   é   sq   € Ù (Ó)¡˜1Œe�AŽh¡€FÐ)ÜÑ;±FÓ;Ó;€Iß�)œs 6›{Ô*ÙßÙß›#ÑGÁÓGŸ#Ÿ#š#ÑGÁÓG×GÒGˆ;ÐUÈXÐUùò *s   …Bc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r
   r¿   r   r½   rÀ   Ú	subagentsr   rv   r   )r   s   "r   r   r   ó   s1   € ÷ ñ  sð °3ð ÀCð ÐTWð Ð\jñ r   c                ó°   € ^RI Hp R\        V4      RVRJ d   RMRR\        T ;'       g    R	4      RT! \	        V\
        4      '       d   V4      /# ^ 4      /# )
r    )r¦   r½   ÚmodeTrÀ   rm   rs   Úsubagent_count_bucketr   )r!   r¦   rÌ   rà   r9   r¬   )r¿   r½   rÀ   râ   r¦   s   $$$$ r   Údelegation_run_fieldsræ   ó   sf   € Ý5ð 	Ô! %Ó(Ø 
¨dÓ 2‘¸ØÔ% h§n n°"Ó5Ø¡¼:ÀiÔQT×;UÒ;U¨iÓ!]ð	ð ð \]Ó!]ð	ð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   Úcall_keyÚobjectrâ   r¬   r½   r   r   r   )r   s   "r   r   r   þ   s(   € ÷ )ñ ) 6ð )¸ð )ÀSð )ÈTñ )r   c          	     óF  € V^ 8:  d   R# \        W\        4       R7      p\        ;_uu_ 4        \        \        4      \
        8¼  d.   \        P                  \        \        \        4      4      4       KE  V\        \        V 4      &   RRR4       R#   + '       g   i     R# ; i)zVOpen one delegate_task call; ``call_key`` is the object every unit of the call shares.N)r¼   r½   r   )
r»   rH   Ú_DELEGATIONS_LOCKrÜ   rÇ   Ú_MAX_OPEN_DELEGATIONSÚpopÚnextÚiterÚid)rè   râ   r½   Úruns   &$$ r   Úbegin_delegation_runrò   þ   sc   € à�A„~ÙÜ
 )ÄmÃoÔ
V€Cß	Ö	Ü”,ÓÔ#8Ô8Ü×ÑœT¤$¤|Ó"4Ó5Ö6Ø%(Œ”R˜“\Ñ"÷ 
×	×	Ò	ús   ­ABÂB 	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r
   rè   ré   ÚresultsrÎ   rÀ   r”   r   r   r   )r   s   "r   r   r   	  s*   € ÷ ñ  Vð °mð ÐTXð Ð]añ r   c          
     ó¨  € V Uu. uF,  p\        V\        4      '       d   VP                  R4      MRNK.  	  pp\        ;_uu_ 4        \        P                  \        V 4      4      pVf    RRR4       R# VP                  P                  V4       VP                  ;'       g    TVn        \        VP                  4      VP                  8  d    RRR4       R# \        \        V 4       RRR4       \        R\        XP                  VP                  VP                  VP                  VP                  R7       R# u upi   + '       g   i     L_; i)zVFold one joined unit into its call; the call's single row is emitted by its last unit.ÚstatusNÚDELEGATION_RUN_MARK)r¿   r½   rÀ   râ   r   )r9   r:   rS   rë   rÇ   rð   r¿   ÚextendrÀ   rÜ   r¼   r"   ræ   r½   r   )rè   rô   rÀ   Úrr¿   rñ   s   &&$   r   Úfinish_delegation_unitrú   	  sò   € áJQÓRÉ'ÀQ¤:¨a´×#6Ò#6�—‘�h”¸DÒ@É'€HÐRß	Ö	Ü×Ñœr (›|Ó,ˆØŠ;Ø÷ 
Ñ	ð 	�‰×Ñ˜HÔ%ØŸ™×5Ð5¨:ˆŒÜˆs�|‰|Ó˜sŸ|™|Ô+Ø÷ 
Ñ	ô œ˜H›Ð&÷ 
ô 
ØÔ4¸s¿|¹|ÐSV×S\ÑS\Ø—>‘>¨S¯\©\ÀsÇÁ÷ùò Sß	×	ús#   …2D<Á$EÁ5-EÂ#-EÃEÅE	ÚtimeoutÚ	timed_outÚblockedc               ó    € V ^8„  d   QhRRRR/# ©r
   r@   r6   r   rC   r   )r   s   "r   r   r   #  s   € ÷ 7ñ 7˜Nð 7¨zñ 7r   c                óh   € V P                  R 4      ^|8X  d   R# V P                  R4      '       d   R# R# )Ú	exit_coderû   ÚerrorÚ
tool_errorN©rS   ©r@   s   &r   Ú_terminal_failurer  #  s/   € à‡x�x�Ó Ô#ÙØŸ8™8 G×,Ò,ˆ<Ð6°$Ð6r   c               ó    € V ^8„  d   QhRRRR/# rÿ   r   )r   s   "r   r   r   *  s   € ÷ ñ ˜ð ¨:ñ r   c                óØ   € \        V P                  R 4      4      pV\        9   d   \        V,          # VR8X  d1   V P                  R4      '       d   V P                  R4      '       g   R# R# )rö   r  Úoutputr  N)r3   rS   Ú_STATUS_ERROR_CLASSES)r@   rö   s   & r   Ú_code_failurer  *  sU   € Ü�4—8‘8˜HÓ%Ó&€FØÔ&Ô&Ü$ VÕ,Ð,ð �Ô˜TŸX™X g×.Ò.°t·x±xÀ×7IÒ7IÙÙr   c               ó    € V ^8„  d   QhRRRR/# rÿ   r   )r   s   "r   r   r   5  s   € ÷ Wñ W˜>ð W¨jñ Wr   c                ób   € V P                  R 4      RJ g   V P                  R4      '       d   R# R# )r}   Fr  r  Nr  r  s   &r   Ú_browser_failurer  5  s,   € ØŸ8™8 IÓ.°%Ó7¸4¿8¹8ÀG×;LÒ;Lˆ<ÐVÐRVÐVr   ÚbrowserÚcodeÚterminalc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r
   Úkindr   Úbackendr5   Úerror_classr   zdict[str, str] | Noner   )r   s   "r   r   r   <  s1   € ÷ ñ  cð °Cð Àð ÐSVð Ð[pñ r   c                ó  € ^RI HpHp \        V 4      pWd9  d   R# \        \	        V4      '       d   V! 4       MT4      pVe   TM\
        V,          ! \        V4      4      pRWtV,          9   d   TMRRVf   RM	W…9   d   TMRRTR	Vf   R
/# R/# )r    )ÚEXECUTION_BACKENDS_BY_KINDÚTOOL_ERROR_CLASSESNr  rQ   r  r~   r   r  rs   r}   r|   )r!   r  r  r3   rª   Ú_FAILURE_CLASSIFIERSrA   )	r  r  r5   r  r  r  Ú
kind_valueÚbackend_valueÚfailures	   $$$$     r   Úexecution_backend_fieldsr  <  sš   € ßWä�t“€JØÔ3ÙÜ¤x°×'8Ò'8™'œ)¸gÓF€MØ(Ò4‰kÔ:NÈzÖ:ZÔ[bÐciÓ[jÓ:k€Gà MÐPZÕ5[Ô$[‘=ÐahØ ¢‘vÀÔA^±gÐdmØ�
Ø ¢�9ð	ð ð 6>ð	ð r   Ú shared_metrics_unmetered_backend)Údefaultc               ó   € V ^8„  d   QhRR/# )r
   r   r   r   )r   s   "r   r   r   R  s   € ÷  ñ   ñ  r   c               #  ó    "  € \         P                  R4      p  Rx € \         P                  V 4       R#   \         P                  T 4       i ; i5i)z\Run Hermes-owned terminal/browser/code calls without counting them as execution-backend use.TN)Ú
_UNMETEREDÚsetÚreset)r   s    r   Úunmetered_backend_callsr%  Q  s9   é € ô �N‰N˜4Ó €Eð Ûä×Ñ˜ÖøŒ
×Ñ˜Õüs   ‚A™4 �A´AÁAr  c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r
   r  r   r  r   r5   r  rC   r   r   )r   s   "r   r   r   [  s1   € ÷ ñ  3ð °ð ¸cð ÐZdð Ðpsñ r   c          	     óŒ   € ^ RI Hp \        P                  4       '       g   V! 4       '       d   V# \	        R\
        WVVR7       V# )a  Count one tool call that reached its backend; returns ``result`` unchanged. ``backend`` may be a
callable so resolving it costs nothing while collection is off. Calls the background review /
curator forks make are Hermes' own work, not the user's (terminal.outcome skips them too).rj   ÚEXECUTION_BACKEND_MARK)r  r  r5   r  )rn   rk   r"  rS   r"   r  )r  r  r5   r  rk   s   &&&$ r   Úrecord_execution_backendr)  [  s?   € õ <ä‡~�~×ÒÑ/×1Ò1ØˆÜ	Ø Ô":ÀÐ_eØõð €Mr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   Úplanr   r5   r  rC   r   r   )r   s   "r   r   r   j  s/   € ÷ rñ r #ð r¨sð rÀJð rÐZ]ñ rr   c               ó@   € V f   V# \        R\        V RR4      WR7      # )zTTerminal calls that got past planning; ``plan`` is None when planning itself failed.Nr  Úenv_type©r  )r)  r&   )r+  r5   r  s   &&$r   Úrecord_terminal_backendr/  j  s%   € à‚|ØˆÜ# J´¸¸jÈ$Ó0OÐQWÔqÐqr   c               ó$   € V ^8„  d   QhRRRRRR/# )r
   Úcallz3Callable[[Callable[[Callable[[], Any]], Any]], Any]Úresolve_backendúCallable[[], str]r   r   r   )r   s   "r   r   r   q  s$   € ÷ ñ ÐQð Ðduð Ðz}ñ r   c                ó˜   aa€ . oR VV3R llpR V3R llp V ! V4      p\        Y$R4       T#   \          d    \        TRR4       h i ; i)zøRun one browser tool call and count it against the backend that served it. ``call`` receives a
wrapper for the legacy-backend fallback: when the extension controller serves the call instead,
the fallback never runs and the backend is ``extension``.c               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   Ú)record_browser_call.<locals>.__annotate__w  s   € ÷ Fñ F�Sñ Fr   c                 ó&   <€ S'       d   S ! 4       # R # )Ú	extensionr   )r2  Úserved_by_legacys   €€r   r  Ú$record_browser_call.<locals>.backendw  s   ø€ ß$4‰Ó ÐE¸+ÐEr   c               ó    € V ^8„  d   QhRRRR/# )r
   ÚfallbackzCallable[[], Any]r   r   r   )r   s   "r   r   r6  z  s   € ÷ ñ Ð*ð ¨sñ r   c                ó4   <€ SP                  R 4       V ! 4       # )T)Úappend)r<  r9  s   &€r   ÚlegacyÚ#record_browser_call.<locals>.legacyz  s   ø€ Ø×Ñ Ô%Ù‹zÐr   Nrž   )r'   Ú_safe_record_browser)r1  r2  r  r?  r5   r9  s   &f   @r   Úrecord_browser_callrB  q  s`   ù€ ð Ð÷Fñ F÷ð ðÙ�f“ˆô ˜¨$Ô/Ø€Møô	 ô Ü˜W d¨KÔ8Øðús	   ™/ ¯A	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r
   r  r3  r5   r   r  rC   r   r   r   )r   s   "r   r   r   ‡  s0   € ÷ Oñ OÐ"3ð O¸Sð OÈzð OÐ^bñ Or   c                ó6   a € R  V 3R llp\        RW1VR7       R# )c               ó   € V ^8„  d   QhRR/# rh   r   )r   s   "r   r   Ú*_safe_record_browser.<locals>.__annotate__ˆ  s   € ÷ ñ �#ñ r   c                 ó8   <€  S ! 4       #   \          d     R # i ; irP   )r'   )r  s   €r   re   Ú"_safe_record_browser.<locals>.nameˆ  s"   ø€ ð	Ù“9ÐøÜô 	Úð	ús   ƒ
 Š˜r  r.  N)r)  )r  r5   r  re   s   f&& r   rA  rA  ‡  s   ø€ ÷ð ô ˜Y¨À+×Nr   )	rI   ÚconcludeÚcreateÚingestÚrememberÚretainÚsaveÚstoreÚupload)ÚeditrJ   Úupdate)ÚdeleteÚforgetrK   )ÚprobeÚqueryÚreasonÚ	reasoningÚrecallÚrelatedrL   )ÚcontextrS   rˆ   ÚprofilerM   r8   )ÚarchivedÚcreatedÚmergedÚpatched)FÚ__conditional_annotations__Ú__doc__Ú
__future__r   Ú
contextlibÚcontextvarsr<   ÚloggingÚ	threadingÚdataclassesr   r   Útypingr   r   r   r   Ú	getLoggerrÁ   r(   Úcontextmanagerr   r"   r3   rA   rH   r:   ÚfromkeysrR   r‰   rT   r_   rf   ro   rƒ   rŠ   rŽ   r’   rš   r    r«   r°   rµ   Ú	frozensetrÑ   rÚ   rì   r»   rÇ   rÅ   ÚLockrë   rÌ   rà   ræ   rò   rú   r
  r  r  r  r  r  Ú
ContextVarr"  r%  r)  r/  rB  rA  )ra  s   @r   Ú<module>rp     sw  øðôõ #ã Û Û Û Û ß (ß 4Ó 4à	×	Ò	˜8Ó	$€ð ×Ñô*ó ð*ðQÐ]a÷ Qõ,õ2õðØ
‡m�mØ`Ðbgóðð ‡m�mÐ1°9Ó=ð	ð
 ‡m�mÐ2°HÓ=ðð ‡m�mÐ\Ð^fÓgðð ‡m�mÐAÀ6ÓJðÐ ð €õ7õõ:õKõõ 	
õðÐcl÷ õEñÐpu÷ ð ð CÐ õð"Øbfðà÷ñ ˜{˜mÓ,Ð Ù °Ð <Ó=Ð àÐ ð ÷ð ó ðð +-€Ð'Ó ,Ø—N’NÓ$Ð õ8õ
Võõ)õð* ˆy˜+ y°-ÀÐP[Ð]jØˆyðÐ õ7õõWð "Ð#3°V¸]ÈJÐXiÐjÐ õð$ ×#Ò#Ð$FÐPUÔV€
ð ×Ñô ó ð ñÐgk÷ ð ðrÐQU÷ rõ÷,Or   