+
    lHàjm  ã                  óÞ   a € 0 t $ R t^ RIHt ^ RIt^RIHtHt ]! 4       tRt	Rt
]! 0 Rm4      t]P                  ! 4       t/ tR]R&   R R	 ltR
 R ltR R ltR R ltR R ltR tR R ltR# )zåCompletion helpers (@-mention / path fuzzy ranking, repo file listing) for the complete.* RPCs.

Bodies are rebound onto server.py's globals at install time (see
method_ctx.bind_module), so they reference server.py globals bare.
)ÚannotationsN)ÚHandlerRegistryÚbind_moduleg      @i N  z"dict[str, tuple[float, list[str]]]Ú_fuzzy_cachec               ó   € V ^8„  d   QhRR/# ©é   ÚrootÚstr© )Úformats   "ÚI/home/ubuntu/.hermes/hermes-agent/tui_gateway/methods_complete_helpers.pyÚ__annotate__r      s   € ÷ ñ ˜#ñ ó    c           
   #  ó6  "  € ^ RI HpHp \        RRR\        P
                  V! 4       V! 4       R7      p \        P                  ! RRV RR	.3/ VB pVP                  ^ 8w  d   R
# VP                  P                  RR4      P                  4       p\        P                  ! RRVRRRRR.3/ VB pVP                  ^ 8w  d   R
#  TP                  P                  RR4      P                  R4       F…  pT'       g   K  \        P                  P!                  \        P                  P#                  YW4      T 4      P%                  \        P&                  R4      pTP)                  R4      '       d   K�  Tx € K‡  	  R
#   \        \        P                  3 d     R
# i ; i5i)aj  Yield ``git ls-files`` paths (tracked + untracked) relative to ``root``; empty outside a
repo or on git failure/timeout. Entries above ``root`` are skipped (Cmd-P workspace scope).

:func:`noninteractive_git_env` (GHSA-7x36-8jrh-v4pw): runs on a keystroke in the session cwd,
and ``ls-files`` reads the index, which executes a repo-configured ``core.fsmonitor``.)Únoninteractive_git_envÚwindows_hide_flagsTg       @F)Úcapture_outputÚtimeoutÚcheckÚstdinÚcreationflagsÚenvÚgitz-Cz	rev-parsez--show-toplevelNzutf-8Úreplacezls-filesz-zz--cachedz--othersz--exclude-standardÚ Ú/z../)Úhermes_cli._subprocess_compatr   r   ÚdictÚ
subprocessÚDEVNULLÚrunÚ
returncodeÚstdoutÚdecodeÚstripÚOSErrorÚTimeoutExpiredÚsplitÚosÚpathÚrelpathÚjoinr   ÚsepÚ
startswith)	r	   r   r   Úrun_kwÚ
top_resultÚtopÚlist_resultÚpÚrels	   &        r   Ú_git_repo_filesr5      s^  é € ÷ YÜ ¨s¸%Äz×GYÑGYÙ 2Ó 4Ñ:PÓ:RôT€Fð
Ü—^’^ U¨D°$¸ÐEVÐ$WÑbÐ[aÑbˆ
Ø× Ñ  AÔ%ÙØ×Ñ×&Ñ& w°	Ó:×@Ñ@ÓBˆÜ —n’nØ�D˜#˜z¨4°¸ZÐI]Ð^ñjØbhñjˆà×!Ñ! QÔ&Ùð 'ð ×Ñ×&Ñ& w°	Ó:×@Ñ@ÀÖFˆß‰1Ü—'‘'—/‘/¤"§'¡'§,¡,¨sÓ"6¸Ó=×EÑEÄbÇfÁfÈcÓRˆCØ—>‘> %×(Ô(Ø”	ó	 Gøô ”Z×.Ñ.Ð/ô ÚðüsB   ‚2Fµ-E7 Á"FÁ$AE7 Â>6FÃ9A/FÅ-
FÅ7FÆFÆFÆFc               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   3   s   € ÷ 
ñ 
˜3ñ 
r   c              #  ó¤  "  €  \         P                  V RR7       F˜  w  rpV Uu. uF*  qD\        9  g   K  VP                  R4      '       d   K(  VNK,  	  upVR&   \         P                  P                  W4      pV F3  pVR8X  d   TMV RV 2P                  \         P                  R4      x € K5  	  Kš  	  R# u upi   \         d     R# i ; i5i)z–Non-git fallback: ``os.walk`` skipping vendor/build dirs + dot-dirs; dotfiles survive
(the ranker decides based on whether the query starts with `.`).F)ÚfollowlinksÚ.:NNNr   N)	r)   ÚwalkÚ_FUZZY_FALLBACK_EXCLUDESr.   r*   r+   r   r-   r&   )r	   ÚdirpathÚdirnamesÚ	filenamesÚdÚrel_dirÚfs   &      r   Ú_walk_repo_filesrB   3   sµ   é € ðÜ,.¯G©G°DÀe¨GÖ,LÑ(ˆG˜yÙ&.Ón¡h Ô;SÑ2Sœ1Ð\]×\hÑ\hÐil×\mŸ1˜1¡hÑnˆH�Q‰KÜ—g‘g—o‘o gÓ4ˆGÛ�Ø# sœN‘q°7°)¸1¸Q¸CÐ0@×IÑIÌ"Ï&É&ÐRUÓVÔVó ó -MùÚnøô ô ÚðüsE   ‚C„!B> ¥B9¶B9ÁB9ÁA"B> Â7CÂ9B> Â>CÃ	CÃCÃCc               ó    € V ^8„  d   QhRRRR/# )r   r	   r
   Úreturnz	list[str]r   )r   s   "r   r   r   @   s   € ÷ ñ ˜3ð  9ñ r   c           	     ó¾  € \         P                  4       p\        ;_uu_ 4        \        P	                  V 4      pV'       d,   W^ ,          ,
          \
        8  d   V^,          uuRRR4       # RRR4       ^ RIHp \        V! \        V 4      \        4      4      pV'       g    \        V! \        V 4      \        4      4      p\        ;_uu_ 4        \        P                  4        UUUu. uF  w  pw  rgW,
          \
        8¼  g   K  VNK  	  uppp F
  p\        V K  	  W3\        V &   RRR4       V#   + '       g   i     LÍ; iu upppi   + '       g   i     T# ; i)z•File paths relative to ``root`` (git listing, else a bounded walk), cached per-root for
``_FUZZY_CACHE_TTL_S`` so rapid keystrokes don't respawn git.N)Úislice)ÚtimeÚ	monotonicÚ_fuzzy_cache_lockr   ÚgetÚ_FUZZY_CACHE_TTL_SÚ	itertoolsrF   Úlistr5   Ú_FUZZY_CACHE_MAX_FILESrB   Úitems)	r	   ÚnowÚcachedrF   ÚfilesÚrÚtsÚ_Ústales	   &        r   Ú_list_repo_filesrW   @   sý   € ô �.‰.Ó
€Cß	Ö	Ü×!Ñ! $Ó'ˆß�c 1�I•oÔ(:Ô:Ø˜!•9÷ 
×	Ò	õ !Ü‘œ¨Ó-Ô/EÓFÓG€EßÜ‘VÔ,¨TÓ2Ô4JÓKÓLˆß	Ö	ô +7×*<Ñ*<Ô*>ÕaÑ*>™J˜A™w À#Å(ÔN`ÑB`—a�aÑ*>ÖaˆEÜ˜UÒ#ñ bà!˜\Œ�TÑ÷ 
ð €L÷ 
×	üô b÷ 
Ö	ð €Lús/   £>D1ÃEÃ'EÄEÄ
EÄ1E	ÅEÅE	c               ó$   € V ^8„  d   QhRRRRRR/# )r   Únamer
   ÚqueryrD   ztuple[int, int] | Noner   )r   s   "r   r   r   U   s'   € ÷ Pñ P˜sð P¨3ð PÐ3Iñ Pr   c                óŠ  aa€ V'       g   ^\        V 4      3# V P                  4       VP                  4       upoVS8X  d   ^ \        V 4      3# VP                  S4      '       d   ^\        V 4      3# . pRpV  Fm  pVR9   g<   VP                  4       '       dF   V'       d>   VR,          P                  4       '       g!   Y4'       d   V.M. ,          pVR9  d   TMRpKe  WE,          pKo  	  \        ;QJ d0    V3R lY4'       d   V.M. ,            4       F  '       g   K   RM%	  RM!! V3R lY4'       d   V.M. ,            4       4      '       d   ^\        V 4      3# SV9   d   ^\        V 4      3# \        V4      o\        ;QJ d    V3R lS 4       F  '       d   K   RM	  RM! V3R lS 4       4      '       d   ^\        V 4      3# R# )	ué   Rank ``name`` against ``query`` as (tier, len(name)); lower wins, None rejects.
Tiers: 0 exact Â· 1 prefix Â· 2 word-boundary/camelCase hit (`chrome` â†’ `appChrome.tsx`)
Â· 3 substring Â· 4 subsequence (query chars appear in order).Ú z-_.c              3  ó`   <"  € T F#  qP                  4       P                  S4      x € K%  	  R # 5i©N©Úlowerr.   )Ú.0r3   Úqls   & €r   Ú	<genexpr>Ú'_fuzzy_basename_rank.<locals>.<genexpr>j   s%   øé € Ð
LÑ-K¨�7‰7‹9×Ñ ×#Ð#Ó-Kùó   ƒ+.TFc              3  óš   <a"  € T F?  o\         ;QJ d    V3R  lS 4       F  '       g   K   RM	  RM! V3R  lS 4       4      x € KA  	  R# 5i)c              3  ó,   <"  € T F	  qS8H  x € K  	  R # 5ir^   r   )ra   ÚcÚqs   & €r   rc   Ú1_fuzzy_basename_rank.<locals>.<genexpr>.<genexpr>o   s   øé € Ð$8±R°¨!¦V³Rùs   ƒTFN)Úany)ra   ri   Úits   &@€r   rc   rd   o   s/   ùé € Ð EÁ"¸Q§£Ô$8±RÓ$8§§¢Ô$8±RÓ$8×!8Ð!8Ã"ùs   „A”A« ANéÿÿÿÿ)Úlenr`   r.   Úisupperrk   ÚiterÚall)rY   rZ   ÚnlÚpartsÚbufÚchrl   rb   s   &&    @@r   Ú_fuzzy_basename_rankrv   U   sT  ù€ ÷ Ø”3�t“9ˆ~ÐØ�Z‰Z‹\˜5Ÿ;™;›=€F€BˆØ	ˆR„xØ”3�t“9ˆ~ÐØ	‡}�}�R×ÒØ”3�t“9ˆ~Ðð €EØ
€CÛˆØ�Œ;˜2Ÿ:™:Ÿ<š<¯C¸¸B½¿¹×8IÒ8IØžc�c‘U rÕ)ˆEØ %œ‘"¨RŠCà�IŠCñ ÷ ƒsÔ
L¨U¾s°s±eÈÖ-KÓ
L‡s‡s‚sÔ
L¨U¾s°s±eÈÖ-KÓ
L×LÒLØ”3�t“9ˆ~ÐØ	ˆR„xØ”3�t“9ˆ~ÐÜ	ˆb‹€Bß ›SÔ EÁ"Ó EŸSŸSšSÔ EÁ"Ó E×EÒEˆAŒs�4‹yˆ>ÐOÈ4ÐOr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	path_partr
   rD   Úboolr   )r   s   "r   r   r   r   s   € ÷ ñ ¨Sð °Tñ r   c                óÐ  a€ \        V 4      p\        P                  P                  VP	                  R4      4      ;'       g    Rp\        P                  P                  VP	                  R4      4      p\        P                  P                  V4      '       g   R# V'       d   VP                  R4      '       d-   \        P                  P                  V4      ;'       g    VR8H  #  VP                  4       o\        ;QJ d2    V3R l\        P                  V4       4       F  '       g   K   R# 	  R# ! V3R l\        P                  V4       4       4      #   \         d     R# i ; i)z§True when ``path_part`` reads sensibly as an absolute path (parent exists and a
partially-typed final segment matches an entry): decides `@/foo` = `/foo` vs cwd `foo`.r   Fc              3  ó`   <"  € T F#  qP                  4       P                  S4      x € K%  	  R # 5ir^   r_   )ra   ÚeÚ
tail_lowers   & €r   rc   Ú0_abs_completion_prefix_exists.<locals>.<genexpr>~   s%   øé € ÐPÑ=O¸—7‘7“9×'Ñ'¨
×3Ð3Ó=Oùre   T)Ú_normalize_completion_pathr)   r*   ÚdirnameÚrstripÚbasenameÚisdirÚendswithr`   rk   Úlistdirr&   )rx   ÚexpandedÚparentÚtailr}   s   &   @r   Ú_abs_completion_prefix_existsr‰   r   sô   ø€ ô *¨)Ó4€HÜ�W‰W�_‰_˜XŸ_™_¨SÓ1Ó2×9Ð9°c€FÜ�7‰7×Ñ˜HŸO™O¨CÓ0Ó1€DÜ�7‰7�=‰=˜× Ò Ùß�8×$Ñ$ S×)Ò)Ü�w‰w�}‰}˜XÓ&×9Ð9¨(°c©/Ð9ðØ—Z‘Z“\ˆ
ß‹sÔP¼R¿Z¹ZÈÔ=OÓP�sŒsÐPŠsÐPˆsÔP¼R¿Z¹ZÈÔ=OÓPÓPÐPøÜô Úðús*   Ã&E Ä'E Ä+E Ä.E Ä2#E ÅE%Å$E%c                ó¶  a € ^ RI Hp V! 4       pV 3R lR 4       w  r4p\        T;'       g    R4      P                  4       P	                  4       R8X  d;    ^ RIHp T! T;'       g    RVP                  T;'       g    RR7      ;'       g    TpTP                  Y5;'       g    \        4       VR7      #   \         d    \        P                  RR	R
7        LIi ; i)zDLayer live session state onto config without losing custom identity.)Úload_picker_contextc              3  óR   <"  € T F  pS'       d   \        SVR 4      MR x € K  	  R# 5i)r\   N)Úgetattr)ra   ÚkÚagents   & €r   rc   Ú(_model_picker_context.<locals>.<genexpr>‡   s#   øé € Ð sÑQrÈA¿%¤¨°°2Ô!6ÀRÔ!GÓQrùs   ƒ'�'r\   Úcustom)Úcanonical_custom_identityN)Úbase_urlÚconfig_providerÚmodelz7custom provider identity recovery failed (model picker)T)Úexc_info)Úcurrent_providerÚcurrent_modelÚcurrent_base_url)Úproviderr“   r•   )Úhermes_cli.inventoryr‹   r
   r%   r`   Úhermes_cli.runtime_providerr’   r—   Ú	ExceptionÚloggerÚdebugÚwith_overridesÚ_resolve_model)r�   r‹   Úctxrš   r“   r•   r’   s   f      r   Ú_model_picker_contextr£   ƒ   sÚ   ø€ å8Ù
Ó
€CÜ sÑQrÓ sÑ€H˜Ü
ˆ8�>ˆ>�rÓ× Ñ Ó"×(Ñ(Ó*¨hÔ6ð	cÝMÙ0Ø!×)Ð) T¸3×;OÑ;OÐW\×WdÐWdÐ`dôf÷ rð rØiqð ð ×ÑØ!×1JÐ1J¼.Ó:JÐ]eð ó gð gøô ô 	cÜ�L‰LÐRÐ]aˆLÖbð	cús$   ÁB3 Á&B3 Á<B3 ÂB3 Â3"CÃCc               ó   € V ^8„  d   QhRR/# )r   rD   ÚNoner   )r   s   "r   r   r   “   s   € ÷ 0ñ 0˜ñ 0r   c                ó2   € \        \        4       V RR7       R# )zQPublish this module's helpers + handlers onto ``server``, rebound to its globals.)ÚskipN)rU   )r   Úglobals)Úservers   &r   Úregisterrª   “   s   € ä”“	˜6¨×/r   >   ÚdistÚvenvÚbuildÚtargetÚ__pycache__Únode_modulesú.hgú.gitú.svnú.nextú.venvú.cacheú.mypy_cacheú.ruff_cacheú.pytest_cache)Ú__conditional_annotations__Ú__doc__Ú
__future__r   Ú	threadingÚ
method_ctxr   r   Ú	_registryrK   rN   Ú	frozensetr;   ÚLockrI   r   Ú__annotations__r5   rB   rW   rv   r‰   r£   rª   )rº   s   @r   Ú<module>rÃ      s{   øðôõ #ã ç 4áÓ€	àÐ ØÐ Ù$òOóPÐ ð —N’NÓ$Ð Ø35€Ð0Ó 5õõ6
õõ*Põ:ò"g÷ 0r   